MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1import { test, testDeep, summary } from './helpers.js';
2
3console.log('Loop Tests\n');
4
5let sum = 0;
6for (let i = 0; i < 5; i++) sum += i;
7test('for loop sum', sum, 10);
8
9let nested = 0;
10for (let i = 0; i < 3; i++) {
11 for (let j = 0; j < 3; j++) {
12 nested++;
13 }
14}
15test('nested for loops', nested, 9);
16
17function findFirst(arr, target) {
18 for (let i = 0; i < arr.length; i++) {
19 if (arr[i] === target) return i;
20 }
21 return -1;
22}
23test('for loop return', findFirst([10, 20, 30], 20), 1);
24test('for loop return not found', findFirst([10, 20, 30], 99), -1);
25
26let breakSum = 0;
27for (let i = 0; i < 10; i++) {
28 if (i === 5) break;
29 breakSum += i;
30}
31test('for loop break', breakSum, 10);
32
33let evenSum = 0;
34for (let i = 0; i < 10; i++) {
35 if (i % 2 === 1) continue;
36 evenSum += i;
37}
38test('for loop continue', evenSum, 20);
39
40let k = 0;
41let extCount = 0;
42for (; k < 5; k++) extCount++;
43test('for loop external init', extCount, 5);
44
45let countdown = 0;
46for (let i = 5; i > 0; i--) countdown += i;
47test('for loop decrement', countdown, 15);
48
49let arr = [1, 2, 3, 4, 5];
50for (let i = 0; i < arr.length; i++) arr[i] *= 2;
51testDeep('for loop modify array', arr, [2, 4, 6, 8, 10]);
52
53let str = 'hello';
54let chars = '';
55for (let i = 0; i < str.length; i++) chars += str[i];
56test('for loop string', chars, 'hello');
57
58let whileSum = 0;
59let j = 0;
60while (j < 5) {
61 whileSum += j;
62 j++;
63}
64test('while loop', whileSum, 10);
65
66let doSum = 0;
67let d = 0;
68do {
69 doSum += d;
70 d++;
71} while (d < 5);
72test('do-while loop', doSum, 10);
73
74const obj = { a: 1, b: 2, c: 3 };
75let keys = [];
76for (let key in obj) keys.push(key);
77test('for-in keys length', keys.length, 3);
78test('for-in has a', keys.includes('a'), true);
79
80const items = [10, 20, 30];
81let forOfSum = 0;
82for (let item of items) forOfSum += item;
83test('for-of sum', forOfSum, 60);
84
85let forOfChars = '';
86for (let c of 'abc') forOfChars += c;
87test('for-of string', forOfChars, 'abc');
88
89let largeSum = 0;
90for (let i = 0; i < 1000; i++) largeSum += i;
91test('large loop', largeSum, 499500);
92
93summary();