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);
  });
});