Spaces:
Running
Running
File size: 1,464 Bytes
cdf7155 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import { describe, it, expect } from "vitest";
import {
encodeSignMagnitude,
decodeSignMagnitude,
} from "../../src/utils/sign-magnitude.js";
describe("sign-magnitude encoding", () => {
it("should encode positive values correctly", () => {
expect(encodeSignMagnitude(100)).toBe(100);
expect(encodeSignMagnitude(2047)).toBe(2047);
expect(encodeSignMagnitude(0)).toBe(0);
});
it("should encode negative values correctly", () => {
expect(encodeSignMagnitude(-100)).toBe(0x800 | 100); // Set sign bit (bit 11)
expect(encodeSignMagnitude(-2047)).toBe(0x800 | 2047);
expect(encodeSignMagnitude(-1)).toBe(0x800 | 1);
});
it("should decode back to original values", () => {
const testValues = [0, 1, 100, -100, 2047, -2047, -1];
testValues.forEach((value) => {
const encoded = encodeSignMagnitude(value);
const decoded = decodeSignMagnitude(encoded);
expect(decoded).toBe(value);
});
});
it("should throw on magnitude overflow", () => {
expect(() => encodeSignMagnitude(2048)).toThrow();
expect(() => encodeSignMagnitude(-2048)).toThrow();
});
it("should handle edge cases", () => {
// Test maximum positive value
expect(encodeSignMagnitude(2047)).toBe(2047);
expect(decodeSignMagnitude(2047)).toBe(2047);
// Test maximum negative value
expect(encodeSignMagnitude(-2047)).toBe(0x800 | 2047);
expect(decodeSignMagnitude(0x800 | 2047)).toBe(-2047);
});
});
|