MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 211 lines 6.1 kB view raw
1function addNums(a, b) { 2 return a + b; 3} 4for (let i = 0; i < 200; i++) addNums(i, i + 1); 5let r1 = addNums(100, 42); 6console.log('[fb_num_only ADD]', r1, 'ok:', r1 === 142); 7 8function subNums(a, b) { 9 return a - b; 10} 11for (let i = 0; i < 200; i++) subNums(i * 2, i); 12let r2 = subNums(100, 58); 13console.log('[fb_num_only SUB]', r2, 'ok:', r2 === 42); 14 15function mulNums(a, b) { 16 return a * b; 17} 18for (let i = 0; i < 200; i++) mulNums(i, 2); 19let r3 = mulNums(21, 2); 20console.log('[fb_num_only MUL]', r3, 'ok:', r3 === 42); 21 22function divNums(a, b) { 23 return a / b; 24} 25for (let i = 0; i < 200; i++) divNums(i * 3, 3); 26let r4 = divNums(84, 2); 27console.log('[fb_num_only DIV]', r4, 'ok:', r4 === 42); 28 29function ltNums(a, b) { 30 return a < b; 31} 32for (let i = 0; i < 200; i++) ltNums(i, 100); 33console.log('[fb_num_only LT] 3<5:', ltNums(3, 5), 'ok:', ltNums(3, 5) === true); 34console.log('[fb_num_only LT] 5<3:', ltNums(5, 3), 'ok:', ltNums(5, 3) === false); 35 36function leNums(a, b) { 37 return a <= b; 38} 39for (let i = 0; i < 200; i++) leNums(i, 100); 40console.log('[fb_num_only LE] 3<=3:', leNums(3, 3), 'ok:', leNums(3, 3) === true); 41console.log('[fb_num_only LE] 4<=3:', leNums(4, 3), 'ok:', leNums(4, 3) === false); 42 43function gtNums(a, b) { 44 return a > b; 45} 46for (let i = 0; i < 200; i++) gtNums(i, 100); 47console.log('[fb_num_only GT] 5>3:', gtNums(5, 3), 'ok:', gtNums(5, 3) === true); 48console.log('[fb_num_only GT] 3>3:', gtNums(3, 3), 'ok:', gtNums(3, 3) === false); 49 50function geNums(a, b) { 51 return a >= b; 52} 53for (let i = 0; i < 200; i++) geNums(i, 100); 54console.log('[fb_num_only GE] 3>=3:', geNums(3, 3), 'ok:', geNums(3, 3) === true); 55console.log('[fb_num_only GE] 2>=3:', geNums(2, 3), 'ok:', geNums(2, 3) === false); 56 57function addStrs(a, b) { 58 return a + b; 59} 60for (let i = 0; i < 200; i++) addStrs('x', 'y'); 61let r5 = addStrs('hello', ' world'); 62console.log('[fb_never_num ADD]', r5, 'ok:', r5 === 'hello world'); 63 64function ltStrs(a, b) { 65 return a < b; 66} 67for (let i = 0; i < 200; i++) ltStrs('abc', 'def'); 68console.log("[fb_never_num LT] 'a'<'b':", ltStrs('a', 'b'), 'ok:', ltStrs('a', 'b') === true); 69console.log("[fb_never_num LT] 'b'<'a':", ltStrs('b', 'a'), 'ok:', ltStrs('b', 'a') === false); 70console.log("[fb_never_num LT] 'z'<'a':", ltStrs('z', 'a'), 'ok:', ltStrs('z', 'a') === false); 71 72function addMixed(a, b) { 73 return a + b; 74} 75for (let i = 0; i < 100; i++) addMixed(i, i); 76for (let i = 0; i < 100; i++) addMixed('a', 'b'); 77let r6 = addMixed(20, 22); 78let r7 = addMixed('foo', 'bar'); 79console.log('[mixed ADD] num:', r6, 'ok:', r6 === 42); 80console.log('[mixed ADD] str:', r7, 'ok:', r7 === 'foobar'); 81 82function addTrainedNum(a, b) { 83 return a + b; 84} 85for (let i = 0; i < 200; i++) addTrainedNum(i, i); 86 87let r8 = addTrainedNum('bail', 'out'); 88console.log('[fb_num_only bailout]', r8, 'ok:', r8 === 'bailout'); 89 90let r9 = addTrainedNum(10, 32); 91console.log('[post-bailout num]', r9, 'ok:', r9 === 42); 92 93function numericLoop(n) { 94 let sum = 0; 95 for (let i = 0; i < n; i++) { 96 sum = sum + i; 97 } 98 return sum; 99} 100for (let i = 0; i < 200; i++) numericLoop(10); 101let r10 = numericLoop(10000); 102let expected = (9999 * 10000) / 2; 103console.log('[numeric loop]', r10, 'ok:', r10 === expected); 104 105function mathChain(a, b, c) { 106 let x = a + b; 107 let y = x * c; 108 let z = y - a; 109 return z / b; 110} 111for (let i = 1; i < 200; i++) mathChain(i, i + 1, 2); 112let r11 = mathChain(10, 5, 3); 113console.log('[math chain]', r11, 'ok:', r11 === 7); 114 115function countAbove(arr, threshold) { 116 let count = 0; 117 for (let i = 0; i < arr.length; i++) { 118 if (arr[i] > threshold) count = count + 1; 119 } 120 return count; 121} 122let nums = []; 123for (let i = 0; i < 100; i++) nums[i] = i; 124for (let i = 0; i < 200; i++) countAbove(nums, 50); 125let r12 = countAbove(nums, 50); 126console.log('[comparison loop]', r12, 'ok:', r12 === 49); 127 128function concatLoop(prefix, n) { 129 let s = prefix; 130 for (let i = 0; i < n; i++) { 131 s = s + '.'; 132 } 133 return s; 134} 135for (let i = 0; i < 200; i++) concatLoop('x', 3); 136let r13 = concatLoop('start', 5); 137console.log('[string concat loop]', r13, 'ok:', r13 === 'start.....'); 138 139function numericInitThenString() { 140 let x = 0; 141 x = 'safe'; 142 return x; 143} 144for (let i = 0; i < 200; i++) numericInitThenString(); 145let r14 = numericInitThenString(); 146console.log('[numeric init then string]', r14, 'ok:', r14 === 'safe'); 147 148function numericInitBranchString(flag) { 149 let x = 0; 150 if (flag) x = 's'; 151 return x + 1; 152} 153for (let i = 0; i < 200; i++) numericInitBranchString(false); 154let r15 = numericInitBranchString(true); 155let r16 = numericInitBranchString(false); 156console.log('[numeric init branch string]', r15, 'ok:', r15 === 's1'); 157console.log('[numeric init branch number]', r16, 'ok:', r16 === 1); 158 159function conditionalLocalAdd(flag) { 160 let x = flag ? 'p' : 2; 161 return x + 1; 162} 163for (let i = 0; i < 200; i++) conditionalLocalAdd(false); 164let r17 = conditionalLocalAdd(true); 165let r18 = conditionalLocalAdd(false); 166console.log('[conditional local add bailout]', r17, 'ok:', r17 === 'p1'); 167console.log('[conditional local add warm]', r18, 'ok:', r18 === 3); 168 169function conditionalLocalMul(flag) { 170 let x = flag ? 'p' : 2; 171 return x * 2; 172} 173for (let i = 0; i < 200; i++) conditionalLocalMul(false); 174let r19 = conditionalLocalMul(true); 175let r20 = conditionalLocalMul(false); 176console.log('[conditional local mul bailout]', r19, 'ok:', Number.isNaN(r19)); 177console.log('[conditional local mul warm]', r20, 'ok:', r20 === 4); 178 179let allOk = 180 r1 === 142 && 181 r2 === 42 && 182 r3 === 42 && 183 r4 === 42 && 184 ltNums(3, 5) === true && 185 ltNums(5, 3) === false && 186 leNums(3, 3) === true && 187 leNums(4, 3) === false && 188 gtNums(5, 3) === true && 189 gtNums(3, 3) === false && 190 geNums(3, 3) === true && 191 geNums(2, 3) === false && 192 r5 === 'hello world' && 193 ltStrs('a', 'b') === true && 194 r6 === 42 && 195 r7 === 'foobar' && 196 r8 === 'bailout' && 197 r9 === 42 && 198 r10 === expected && 199 r11 === 7 && 200 r12 === 49 && 201 r13 === 'start.....' && 202 r14 === 'safe' && 203 r15 === 's1' && 204 r16 === 1 && 205 r17 === 'p1' && 206 r18 === 3 && 207 Number.isNaN(r19) && 208 r20 === 4; 209 210console.log(''); 211console.log('all type feedback tests passed:', allOk);