Spaces:
Running
Running
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); | |
}); | |
}); | |