UNPKG

friscjs

Version:

FRISC processor simulator in JavaScript

118 lines (107 loc) 5.67 kB
console.log("Running " + __filename + "..."); var T = require("./node-test-framework.js"); var code = require("./../lib/index.js").util; var tests = [ new T.Test("convertIntToBinary values", function() { T.assertEquals(code.convertIntToBinary(0x5, 4), "0101"); T.assertEquals(code.convertIntToBinary(0xf, 5), "01111"); T.assertEquals(code.convertIntToBinary(0x0, 6), "000000"); T.assertEquals(code.convertIntToBinary(0x5, 8), "00000101"); T.assertEquals(code.convertIntToBinary(0xab, 8), "10101011"); T.assertEquals(code.convertIntToBinary(0xdeadbeef, 32), "11011110101011011011111011101111"); }), new T.Test("convertIntToBinary high bits truncated", function() { T.assertEquals(code.convertIntToBinary(0x1234, 4), "0100"); T.assertEquals(code.convertIntToBinary(0x1234, 6), "110100"); T.assertEquals(code.convertIntToBinary(0x1234, 8), "00110100"); }), new T.Test("convertIntToBinary negative numbers => two's complement", function() { T.assertEquals(code.convertIntToBinary(-1, 4), "1111"); T.assertEquals(code.convertIntToBinary(-33, 8), "11011111"); T.assertEquals(code.convertIntToBinary(-32, 16), "1111111111100000"); }), new T.Test("convertBinaryToInt unsigned", function() { T.assertEquals(code.convertBinaryToInt("0"), 0); T.assertEquals(code.convertBinaryToInt("1"), 1); T.assertEquals(code.convertBinaryToInt("101"), 5); T.assertEquals(code.convertBinaryToInt("10100101"), 0xa5); }), new T.Test("convertBinaryToInt signed nonegative", function() { T.assertEquals(code.convertBinaryToInt("00", true), 0); T.assertEquals(code.convertBinaryToInt("01", true), 1); T.assertEquals(code.convertBinaryToInt("0101", true), 5); T.assertEquals(code.convertBinaryToInt("010100101", true), 0xa5); }), new T.Test("convertBinaryToInt signed negative", function() { T.assertEquals(code.convertBinaryToInt("10", true), -2); T.assertEquals(code.convertBinaryToInt("111", true), -1); T.assertEquals(code.convertBinaryToInt("111111111111111", true), -1); T.assertEquals(code.convertBinaryToInt("1111111111100000", true), -32); }), new T.Test("convertBinaryToInt error conditions", function() { T.assertThrows(function() { code.convertBinaryToInt(""); }); T.assertThrows(function() { code.convertBinaryToInt("10", 2); }); T.assertThrows(function() { code.convertBinaryToInt("12"); }); }), new T.Test("getBitString strings", function() { T.assertEquals(code.getBitString("11000110", 0, 2), "110"); T.assertEquals(code.getBitString("11000110", 2, 4), "001"); T.assertEquals(code.getBitString("11000110", 4, 4), "0"); T.assertEquals(code.getBitString("11000110", 5, 7), "110"); }), new T.Test("getBitString numbers", function() { T.assertEquals(code.getBitString(0xc6, 0, 2), "110"); T.assertEquals(code.getBitString(0xc6, 2, 4), "001"); T.assertEquals(code.getBitString(0xc6, 4, 4), "0"); T.assertEquals(code.getBitString(0xc6, 5, 7), "110"); }), new T.Test("getBitString null on non-number", function() { T.assertEquals(code.getBitString({}, 0, 0), null); T.assertEquals(code.getBitString(undefined, 0, 0), null); T.assertEquals(code.getBitString(true, 0, 0), null); }), new T.Test("extend unsigned", function() { T.assertEquals(code.extend("0", 2), "00"); T.assertEquals(code.extend("00", 3), "000"); T.assertEquals(code.extend("100", 4), "0100"); T.assertEquals(code.extend("100", 32), "00000000000000000000000000000100"); // 20 one-bits unsigned-extended = 2^20 - 1 T.assertEquals(code.extend("11111111111111111111", 32), "00000000000011111111111111111111"); }), new T.Test("extend signed", function() { T.assertEquals(code.extend("0", 2, true), "00"); T.assertEquals(code.extend("00", 3, true), "000"); T.assertEquals(code.extend("100", 4, true), "1100"); T.assertEquals(code.extend("100", 32, true), "11111111111111111111111111111100"); // 20 one-bits sign extended = -1 T.assertEquals(code.extend("11111111111111111111", 32, true), "11111111111111111111111111111111"); }), new T.Test("extend to smaller returns unchanged argument", function() { T.assertEquals(code.extend("11100111", 0), "11100111"); T.assertEquals(code.extend("11100111", 0, true), "11100111"); T.assertEquals(code.extend("11100111", 7), "11100111"); T.assertEquals(code.extend("11100111", 7, true), "11100111"); T.assertEquals(code.extend("11100111", 8), "11100111"); T.assertEquals(code.extend("11100111", 8, true), "11100111"); }), new T.Test("twosComplement negative numbers", function() { T.assertEquals(code.twosComplement(-123, 0xFFFFFFFF), 123); T.assertEquals(code.twosComplement(-435, 0xFFFFFFFF), 435); T.assertEquals(code.twosComplement(-345678, 0xFFFFFFFF), 345678); }), new T.Test("twosComplement zero", function() { T.assertEquals(code.twosComplement(0, 0xFFFFFFFF), 0); }), new T.Test("twosComplement positive numbers", function() { T.assertEquals(code.twosComplement(123, 0xFFFFFFFF), -123); T.assertEquals(code.twosComplement(435, 0xFFFFFFFF), -435); T.assertEquals(code.twosComplement(345678, 0xFFFFFFFF), -345678); }), new T.Test("generateStringOfCharacters zero", function() { T.assertEquals(code.generateStringOfCharacters("1", 0), ""); }), new T.Test("generateStringOfCharacters non-zero", function() { T.assertEquals(code.generateStringOfCharacters("1", 9), "111111111"); }), ]; module.exports.stats = T.runTests(tests);