diff --git a/modules/shared/bin/int36 b/modules/shared/bin/int36 index 2d2045612..075e7834d 100644 --- a/modules/shared/bin/int36 +++ b/modules/shared/bin/int36 @@ -61,14 +61,18 @@ function test(sCmd, fREPL) var sOp = aTokens[0]; var sNum1 = aTokens[1] && aTokens[1].replace(/,/g, ''); var sNum2 = aTokens[2]; + if (!sNum2) { + sNum2 = sNum1; + sNum1 = undefined; + } - var i36Op = new Int36(+sNum1); + var i36Op = new Int36(+sNum2, +sNum1); - if (sNum1 != null) console.log(sOp + " " + dumpInt36(i36Op)); + if (sNum2 != null) console.log(sOp + " " + dumpInt36(i36Op)); switch(sOp) { case "set": - i36Reg = new Int36(+sNum1, +sNum2); + i36Reg = new Int36(i36Op); break; case "add": @@ -87,19 +91,12 @@ function test(sCmd, fREPL) i36Reg.div(i36Op); break; - case "dec": - console.log("dec " + i36Reg.toDecimal()); - return true; - - case "print": - break; - default: console.log("unrecognized command: " + sCmd); return false; } - if (sOp != "set") console.log(" = " + dumpInt36(i36Reg)); + console.log(" = " + dumpInt36(i36Reg)); return true; } @@ -128,13 +125,11 @@ test("add 0"); for (let i = 0; i <= 12; i++) { test("set 34,000,000,000"); test("mul " + Math.pow(8, i)); - test("dec"); } for (let i = 0; i <= 12; i++) { test("set -34,000,000,000"); test("mul " + Math.pow(8, i)); - test("dec"); } test("set 100"); @@ -143,6 +138,20 @@ test("div 3"); test("set 4001"); test("div -5"); +test("set 0o037777777777 0o777777777777"); + +// test("set 0o047777777777 0o777777777777"); +// test("set 0o057777777777 0o777777777777"); +// test("set 0o067777777777 0o777777777777"); +// test("set 0o077777777777 0o777777777777"); +// test("set 0o177777777777 0o777777777777"); +// test("set 0o277777777777 0o777777777777"); +// test("set 0o377777777777 0o777777777777"); +// test("set 0o477777777777 0o777777777777"); +// test("set 0o577777777777 0o777777777777"); +// test("set 0o677777777777 0o777777777777"); +// test("set 0o777777777777 0o777777777777"); + repl.start({ prompt: "int36> ", input: process.stdin, diff --git a/modules/shared/lib/int36.js b/modules/shared/lib/int36.js index 65085f9ba..2b3f02fd1 100644 --- a/modules/shared/lib/int36.js +++ b/modules/shared/lib/int36.js @@ -151,6 +151,10 @@ class Int36 { } do { var quotient = i36Tmp.div(i36Div); + if (i36Tmp.error) { + s = "error"; + break; + } var nMinDigits = (quotient? 10 : 1); i36Tmp.value = i36Tmp.remainder; do { @@ -158,6 +162,7 @@ class Int36 { s = String.fromCharCode(0x30 + i36Tmp.remainder) + s; } while (--nMinDigits > 0 || i36Tmp.value); i36Tmp.value = quotient; + i36Tmp.extended = 0; } while (i36Tmp.value); if (fNeg) s = '-' + s; return s;