···11+// Test: Automatic Semicolon Insertion (ASI)
22+// Tests that statements work correctly without explicit semicolons
33+44+console.log('=== ASI Tests ===')
55+66+// Test 1: const without semicolons
77+console.log('\nTest 1: const ASI')
88+const a = 1
99+const b = 2
1010+const c = a + b
1111+console.log('const a + b:', c)
1212+1313+// Test 2: let without semicolons
1414+console.log('\nTest 2: let ASI')
1515+let x = 10
1616+let y = 20
1717+let z = x * y
1818+console.log('let x * y:', z)
1919+2020+// Test 3: else if without semicolons
2121+console.log('\nTest 3: else if ASI')
2222+let val = 50
2323+if (val < 25) {
2424+ console.log('less than 25')
2525+} else if (val < 75) {
2626+ console.log('between 25 and 75')
2727+} else {
2828+ console.log('75 or more')
2929+}
3030+3131+// Test 4: Chained else if without semicolons
3232+console.log('\nTest 4: Chained else if ASI')
3333+let grade = 85
3434+let letter
3535+if (grade >= 90) {
3636+ letter = 'A'
3737+} else if (grade >= 80) {
3838+ letter = 'B'
3939+} else if (grade >= 70) {
4040+ letter = 'C'
4141+} else if (grade >= 60) {
4242+ letter = 'D'
4343+} else {
4444+ letter = 'F'
4545+}
4646+console.log('Grade:', letter)
4747+4848+// Test 5: Mixed const/let without semicolons
4949+console.log('\nTest 5: Mixed declarations ASI')
5050+const PI = 3.14159
5151+let radius = 5
5252+let area = PI * radius * radius
5353+console.log('Circle area:', area)
5454+5555+// Test 6: Dynamic import without semicolons (expression)
5656+console.log('\nTest 6: Dynamic import ASI')
5757+async function testImport() {
5858+ const mod = await import('./export-test.js')
5959+ mod.hello('asi')
6060+}
6161+6262+// Test 7: Nested if/else if without semicolons
6363+console.log('\nTest 7: Nested conditionals ASI')
6464+let outer = true
6565+let inner = false
6666+if (outer) {
6767+ if (inner) {
6868+ console.log('both true')
6969+ } else if (!inner) {
7070+ console.log('outer true, inner false')
7171+ }
7272+} else if (!outer) {
7373+ console.log('outer false')
7474+}
7575+7676+// Test 8: Return statements without semicolons
7777+console.log('\nTest 8: Return ASI')
7878+function add(a, b) {
7979+ return a + b
8080+}
8181+function multiply(a, b) {
8282+ return a * b
8383+}
8484+console.log('add(3, 4):', add(3, 4))
8585+console.log('multiply(3, 4):', multiply(3, 4))
8686+8787+// Test 9: Object/array literals with const/let
8888+console.log('\nTest 9: Object/array ASI')
8989+const obj = { name: 'test', value: 42 }
9090+let arr = [1, 2, 3]
9191+console.log('obj.name:', obj.name)
9292+console.log('arr[1]:', arr[1])
9393+9494+// Test 10: Arrow functions without semicolons
9595+console.log('\nTest 10: Arrow function ASI')
9696+const double = x => x * 2
9797+const triple = x => x * 3
9898+console.log('double(5):', double(5))
9999+console.log('triple(5):', triple(5))
100100+101101+// Test 11: for loop with let (ASI in body)
102102+console.log('\nTest 11: for loop ASI')
103103+let sum = 0
104104+for (let i = 0; i < 5; i++) {
105105+ sum = sum + i
106106+}
107107+console.log('sum:', sum)
108108+109109+// Test 12: while with else if pattern
110110+console.log('\nTest 12: while + else if ASI')
111111+let counter = 0
112112+while (counter < 3) {
113113+ if (counter === 0) {
114114+ console.log('zero')
115115+ } else if (counter === 1) {
116116+ console.log('one')
117117+ } else if (counter === 2) {
118118+ console.log('two')
119119+ }
120120+ counter = counter + 1
121121+}
122122+123123+// Run async test
124124+testImport()
125125+126126+console.log('\n=== All ASI tests completed ===')