// Any copyright is dedicated to the Public Domain. // http://creativecommons.org/licenses/publicdomain/ //----------------------------------------------------------------------------- var BUGNUMBER = 894026; var summary = "Implement ES6 octal literals"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ var chars = ['o', 'O']; for (var i = 0; i < 8; i++) { if (i === 8) { chars.forEach(function(v) { try { eval('0' + v + i); throw "didn't throw"; } catch (e) { assertEq(e instanceof SyntaxError, true, "no syntax error evaluating 0" + v + i + ", " + "got " + e); } }); continue; } for (var j = 0; j < 8; j++) { if (j === 8) { chars.forEach(function(v) { try { eval('0' + v + i + j); throw "didn't throw"; } catch (e) { assertEq(e instanceof SyntaxError, true, "no syntax error evaluating 0" + v + i + j + ", " + "got " + e); } }); continue; } for (var k = 0; k < 8; k++) { if (k === 8) { chars.forEach(function(v) { try { eval('0' + v + i + j + k); throw "didn't throw"; } catch (e) { assertEq(e instanceof SyntaxError, true, "no syntax error evaluating 0" + v + i + j + k + ", " + "got " + e); } }); continue; } chars.forEach(function(v) { assertEq(eval('0' + v + i + j + k), i * 64 + j * 8 + k); }); } } } // Off-by-one check: '/' immediately precedes '0'. assertEq(0o110/2, 36); assertEq(0O644/2, 210); function strict() { "use strict"; return 0o755; } assertEq(strict(), 7 * 64 + 5 * 8 + 5); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");