LeRobot.js / packages /web /tests /utils /sign-magnitude.test.ts
NERDDISCO's picture
feat(web): added testing structure
cdf7155
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);
});
});