MIRROR: javascript for 🐜's, a tiny runtime with big ambitions
1// Test default parameters in function definitions
2
3// Test 1: Basic default parameter
4function greet(name = 'World') {
5 return 'Hello, ' + name;
6}
7
8console.log("Test 1 - Basic default param:");
9console.log(greet()); // Should print "Hello, World"
10console.log(greet('Alice')); // Should print "Hello, Alice"
11
12// Test 2: Multiple default parameters
13function multiply(a = 1, b = 1, c = 1) {
14 return a * b * c;
15}
16
17console.log("\nTest 2 - Multiple default params:");
18console.log(multiply()); // Should print 1
19console.log(multiply(2)); // Should print 2
20console.log(multiply(2, 3)); // Should print 6
21console.log(multiply(2, 3, 4)); // Should print 24
22
23// Test 3: Mix of regular and default parameters
24function describe(name, age = 25, city = 'Unknown') {
25 return name + ' is ' + age + ' years old and lives in ' + city;
26}
27
28console.log("\nTest 3 - Mix of regular and default params:");
29console.log(describe('Alice')); // Should print "Alice is 25 years old and lives in Unknown"
30console.log(describe('Bob', 30)); // Should print "Bob is 30 years old and lives in Unknown"
31console.log(describe('Charlie', 35, 'NYC')); // Should print "Charlie is 35 years old and lives in NYC"
32
33// Test 4: Default parameter with number
34function power(base = 2, exponent = 2) {
35 let result = 1;
36 for (let i = 0; i < exponent; i++) {
37 result = result * base;
38 }
39 return result;
40}
41
42console.log("\nTest 4 - Default params with numbers:");
43console.log(power()); // Should print 4 (2^2)
44console.log(power(3)); // Should print 9 (3^2)
45console.log(power(2, 3)); // Should print 8 (2^3)
46
47// Test 5: Arrow function with default parameters
48const add = (a = 0, b = 0) => a + b;
49
50console.log("\nTest 5 - Arrow function with default params:");
51console.log(add()); // Should print 0
52console.log(add(5)); // Should print 5
53console.log(add(5, 3)); // Should print 8
54
55// Test 6: Class methods with default parameters
56class Calculator {
57 add(x = 0, y = 0) {
58 return x + y;
59 }
60
61 subtract(x = 0, y = 0) {
62 return x - y;
63 }
64
65 multiply(x = 1, y = 1) {
66 return x * y;
67 }
68}
69
70console.log("\nTest 6 - Class methods with default params:");
71const calc = new Calculator();
72console.log(calc.add()); // Should print 0
73console.log(calc.add(10)); // Should print 10
74console.log(calc.add(10, 5)); // Should print 15
75console.log(calc.multiply()); // Should print 1
76console.log(calc.multiply(3)); // Should print 3
77console.log(calc.multiply(3, 4)); // Should print 12
78
79// Test 7: Default params with special characters in strings
80function wrap(text, left = '(', right = ')') {
81 return left + text + right;
82}
83
84console.log("\nTest 7 - Default params with parens in strings:");
85console.log(wrap('hello')); // Should print "(hello)"
86console.log(wrap('hello', '<', '>')); // Should print "<hello>"
87console.log(wrap('hello', '[')); // Should print "[hello)"
88
89// Test 8: Default with undefined explicitly passed
90function testUndefined(a = 'default') {
91 return a;
92}
93
94console.log("\nTest 8 - Explicit undefined uses default:");
95console.log(testUndefined()); // Should print "default"
96console.log(testUndefined(undefined)); // Should print "default"
97console.log(testUndefined('value')); // Should print "value"
98
99// Test 9: Complex default expressions
100function createArray(size = 5, fill = 'x') {
101 let arr = [];
102 for (let i = 0; i < size; i++) {
103 arr.push(fill);
104 }
105 return arr;
106}
107
108console.log("\nTest 9 - Default params with expressions:");
109console.log(createArray().length); // Should print 5
110console.log(createArray(3).length); // Should print 3
111console.log(createArray(2, 'o').join('')); // Should print "oo"
112
113// Test 10: Async function with default parameters
114async function asyncGreet(name = 'Async World') {
115 return 'Hello, ' + name;
116}
117
118console.log("\nTest 10 - Async function with default params:");
119asyncGreet().then(result => console.log(result)); // Should print "Hello, Async World"
120asyncGreet('Async Alice').then(result => console.log(result)); // Should print "Hello, Async Alice"
121
122// Test 11: Default parameters in constructor
123class Person {
124 constructor(name = 'Anonymous', age = 0) {
125 this.name = name;
126 this.age = age;
127 }
128
129 introduce() {
130 return this.name + ' is ' + this.age;
131 }
132}
133
134console.log("\nTest 11 - Constructor with default params:");
135const p1 = new Person();
136console.log(p1.introduce()); // Should print "Anonymous is 0"
137const p2 = new Person('Dave');
138console.log(p2.introduce()); // Should print "Dave is 0"
139const p3 = new Person('Eve', 28);
140console.log(p3.introduce()); // Should print "Eve is 28"
141
142// Test 12: Only last parameters have defaults
143function compute(required, optional = 10) {
144 return required + optional;
145}
146
147console.log("\nTest 12 - Required param then default:");
148console.log(compute(5)); // Should print 15
149console.log(compute(5, 20)); // Should print 25
150
151console.log("\n✓ All default parameter tests completed!");