Skip to content

Commit

Permalink
Test macros
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderOMara committed Nov 15, 2024
1 parent d9b5587 commit 8128a6b
Show file tree
Hide file tree
Showing 9 changed files with 321 additions and 87 deletions.
26 changes: 20 additions & 6 deletions member/f32.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { assertEquals } from '@std/assert';

import { Struct } from '../struct.ts';
import { memberF32 } from './f32.ts';
import { byteLength, byteOffset, littleEndian } from '../macro.ts';

Deno.test('memberF32', () => {
const v = new DataView(new ArrayBuffer(4));
Expand Down Expand Up @@ -45,7 +46,20 @@ Deno.test('memberF32', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
};

assertEquals(Test.BYTE_LENGTH, 12);
assertEquals(byteLength(Test), 12);
assertEquals(byteLength(Test, 'alpha'), 4);
assertEquals(byteLength(Test, 'beta'), 4);
assertEquals(byteLength(Test, 'gamma'), 4);
assertEquals(littleEndian(Test, 'alpha'), true);
assertEquals(littleEndian(Test, 'beta'), false);
assertEquals(littleEndian(Test, 'gamma'), null);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -58,9 +72,9 @@ Deno.test('memberF32', () => {
assertEquals(test.alpha, f32);
assertEquals(test.beta, f32);
assertEquals(test.gamma, f32);
assertEquals(view.getFloat32(0, true), f32);
assertEquals(view.getFloat32(4, false), f32);
assertEquals(view.getFloat32(8, false), f32);
assertEquals(view.getFloat32(off.alpha, true), f32);
assertEquals(view.getFloat32(off.beta, false), f32);
assertEquals(view.getFloat32(off.gamma, false), f32);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -71,9 +85,9 @@ Deno.test('memberF32', () => {
assertEquals(test.alpha, f32);
assertEquals(test.beta, f32);
assertEquals(test.gamma, f32);
assertEquals(view.getFloat32(0, true), f32);
assertEquals(view.getFloat32(4, false), f32);
assertEquals(view.getFloat32(8, true), f32);
assertEquals(view.getFloat32(off.alpha, true), f32);
assertEquals(view.getFloat32(off.beta, false), f32);
assertEquals(view.getFloat32(off.gamma, true), f32);
}
}
});
26 changes: 20 additions & 6 deletions member/f64.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { assertEquals } from '@std/assert';

import { Struct } from '../struct.ts';
import { memberF64 } from './f64.ts';
import { byteLength, byteOffset, littleEndian } from '../macro.ts';

Deno.test('memberF64', () => {
for (
Expand Down Expand Up @@ -41,7 +42,20 @@ Deno.test('memberF64', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
};

assertEquals(Test.BYTE_LENGTH, 24);
assertEquals(byteLength(Test), 24);
assertEquals(byteLength(Test, 'alpha'), 8);
assertEquals(byteLength(Test, 'beta'), 8);
assertEquals(byteLength(Test, 'gamma'), 8);
assertEquals(littleEndian(Test, 'alpha'), true);
assertEquals(littleEndian(Test, 'beta'), false);
assertEquals(littleEndian(Test, 'gamma'), null);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -54,9 +68,9 @@ Deno.test('memberF64', () => {
assertEquals(test.alpha, f64);
assertEquals(test.beta, f64);
assertEquals(test.gamma, f64);
assertEquals(view.getFloat64(0, true), f64);
assertEquals(view.getFloat64(8, false), f64);
assertEquals(view.getFloat64(16, false), f64);
assertEquals(view.getFloat64(off.alpha, true), f64);
assertEquals(view.getFloat64(off.beta, false), f64);
assertEquals(view.getFloat64(off.gamma, false), f64);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -67,9 +81,9 @@ Deno.test('memberF64', () => {
assertEquals(test.alpha, f64);
assertEquals(test.beta, f64);
assertEquals(test.gamma, f64);
assertEquals(view.getFloat64(0, true), f64);
assertEquals(view.getFloat64(8, false), f64);
assertEquals(view.getFloat64(16, true), f64);
assertEquals(view.getFloat64(off.alpha, true), f64);
assertEquals(view.getFloat64(off.beta, false), f64);
assertEquals(view.getFloat64(off.gamma, true), f64);
}
}
});
65 changes: 49 additions & 16 deletions member/i16.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { assertEquals } from '@std/assert';

import { Struct } from '../struct.ts';
import { memberI16, memberU16 } from './i16.ts';
import { byteLength, byteOffset, littleEndian } from '../macro.ts';

Deno.test('memberI16', () => {
class Test extends Struct {
Expand All @@ -24,7 +25,23 @@ Deno.test('memberI16', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
delta: byteOffset(Test, 'delta'),
};

assertEquals(Test.BYTE_LENGTH, 8);
assertEquals(byteLength(Test), 8);
assertEquals(byteLength(Test, 'alpha'), 2);
assertEquals(byteLength(Test, 'beta'), 2);
assertEquals(byteLength(Test, 'gamma'), 2);
assertEquals(byteLength(Test, 'delta'), 2);
assertEquals(littleEndian(Test, 'alpha'), null);
assertEquals(littleEndian(Test, 'beta'), null);
assertEquals(littleEndian(Test, 'gamma'), true);
assertEquals(littleEndian(Test, 'delta'), false);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -39,10 +56,10 @@ Deno.test('memberI16', () => {
assertEquals(test.beta, -2);
assertEquals(test.gamma, -3);
assertEquals(test.delta, -4);
assertEquals(view.getInt16(0, false), 0x7fff);
assertEquals(view.getInt16(2, false), -2);
assertEquals(view.getInt16(4, true), -3);
assertEquals(view.getInt16(6, false), -4);
assertEquals(view.getInt16(off.alpha, false), 0x7fff);
assertEquals(view.getInt16(off.beta, false), -2);
assertEquals(view.getInt16(off.gamma, true), -3);
assertEquals(view.getInt16(off.delta, false), -4);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -55,10 +72,10 @@ Deno.test('memberI16', () => {
assertEquals(test.beta, -2);
assertEquals(test.gamma, -3);
assertEquals(test.delta, -4);
assertEquals(view.getInt16(0, true), 0x7fff);
assertEquals(view.getInt16(2, true), -2);
assertEquals(view.getInt16(4, true), -3);
assertEquals(view.getInt16(6, false), -4);
assertEquals(view.getInt16(off.alpha, true), 0x7fff);
assertEquals(view.getInt16(off.beta, true), -2);
assertEquals(view.getInt16(off.gamma, true), -3);
assertEquals(view.getInt16(off.delta, false), -4);
}
});

Expand All @@ -83,7 +100,23 @@ Deno.test('memberU16', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
delta: byteOffset(Test, 'delta'),
};

assertEquals(Test.BYTE_LENGTH, 8);
assertEquals(byteLength(Test), 8);
assertEquals(byteLength(Test, 'alpha'), 2);
assertEquals(byteLength(Test, 'beta'), 2);
assertEquals(byteLength(Test, 'gamma'), 2);
assertEquals(byteLength(Test, 'delta'), 2);
assertEquals(littleEndian(Test, 'alpha'), null);
assertEquals(littleEndian(Test, 'beta'), null);
assertEquals(littleEndian(Test, 'gamma'), true);
assertEquals(littleEndian(Test, 'delta'), false);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -98,10 +131,10 @@ Deno.test('memberU16', () => {
assertEquals(test.beta, 0xfffe);
assertEquals(test.gamma, 0xfffd);
assertEquals(test.delta, 0xfffc);
assertEquals(view.getUint16(0, false), 0x7fff);
assertEquals(view.getUint16(2, false), 0xfffe);
assertEquals(view.getUint16(4, true), 0xfffd);
assertEquals(view.getUint16(6, false), 0xfffc);
assertEquals(view.getUint16(off.alpha, false), 0x7fff);
assertEquals(view.getUint16(off.beta, false), 0xfffe);
assertEquals(view.getUint16(off.gamma, true), 0xfffd);
assertEquals(view.getUint16(off.delta, false), 0xfffc);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -114,9 +147,9 @@ Deno.test('memberU16', () => {
assertEquals(test.beta, 0xfffe);
assertEquals(test.gamma, 0xfffd);
assertEquals(test.delta, 0xfffc);
assertEquals(view.getUint16(0, true), 0x7fff);
assertEquals(view.getUint16(2, true), 0xfffe);
assertEquals(view.getUint16(4, true), 0xfffd);
assertEquals(view.getUint16(6, false), 0xfffc);
assertEquals(view.getUint16(off.alpha, true), 0x7fff);
assertEquals(view.getUint16(off.beta, true), 0xfffe);
assertEquals(view.getUint16(off.gamma, true), 0xfffd);
assertEquals(view.getUint16(off.delta, false), 0xfffc);
}
});
65 changes: 49 additions & 16 deletions member/i24.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { assertEquals } from '@std/assert';
import { Struct } from '../struct.ts';
import { memberI24, memberU24 } from './i24.ts';
import { getInt24, getUint24 } from '../dataview.ts';
import { byteLength, byteOffset, littleEndian } from '../macro.ts';

Deno.test('memberI24', () => {
class Test extends Struct {
Expand All @@ -25,7 +26,23 @@ Deno.test('memberI24', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
delta: byteOffset(Test, 'delta'),
};

assertEquals(Test.BYTE_LENGTH, 12);
assertEquals(byteLength(Test), 12);
assertEquals(byteLength(Test, 'alpha'), 3);
assertEquals(byteLength(Test, 'beta'), 3);
assertEquals(byteLength(Test, 'gamma'), 3);
assertEquals(byteLength(Test, 'delta'), 3);
assertEquals(littleEndian(Test, 'alpha'), null);
assertEquals(littleEndian(Test, 'beta'), null);
assertEquals(littleEndian(Test, 'gamma'), true);
assertEquals(littleEndian(Test, 'delta'), false);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -40,10 +57,10 @@ Deno.test('memberI24', () => {
assertEquals(test.beta, -2);
assertEquals(test.gamma, -3);
assertEquals(test.delta, -4);
assertEquals(getInt24(view, 0, false), 0x7fffff);
assertEquals(getInt24(view, 3, false), -2);
assertEquals(getInt24(view, 6, true), -3);
assertEquals(getInt24(view, 9, false), -4);
assertEquals(getInt24(view, off.alpha, false), 0x7fffff);
assertEquals(getInt24(view, off.beta, false), -2);
assertEquals(getInt24(view, off.gamma, true), -3);
assertEquals(getInt24(view, off.delta, false), -4);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -56,10 +73,10 @@ Deno.test('memberI24', () => {
assertEquals(test.beta, -2);
assertEquals(test.gamma, -3);
assertEquals(test.delta, -4);
assertEquals(getInt24(view, 0, true), 0x7fffff);
assertEquals(getInt24(view, 3, true), -2);
assertEquals(getInt24(view, 6, true), -3);
assertEquals(getInt24(view, 9, false), -4);
assertEquals(getInt24(view, off.alpha, true), 0x7fffff);
assertEquals(getInt24(view, off.beta, true), -2);
assertEquals(getInt24(view, off.gamma, true), -3);
assertEquals(getInt24(view, off.delta, false), -4);
}
});

Expand All @@ -84,7 +101,23 @@ Deno.test('memberU24', () => {
})(super.BYTE_LENGTH);
}

const off = {
alpha: byteOffset(Test, 'alpha'),
beta: byteOffset(Test, 'beta'),
gamma: byteOffset(Test, 'gamma'),
delta: byteOffset(Test, 'delta'),
};

assertEquals(Test.BYTE_LENGTH, 12);
assertEquals(byteLength(Test), 12);
assertEquals(byteLength(Test, 'alpha'), 3);
assertEquals(byteLength(Test, 'beta'), 3);
assertEquals(byteLength(Test, 'gamma'), 3);
assertEquals(byteLength(Test, 'delta'), 3);
assertEquals(littleEndian(Test, 'alpha'), null);
assertEquals(littleEndian(Test, 'beta'), null);
assertEquals(littleEndian(Test, 'gamma'), true);
assertEquals(littleEndian(Test, 'delta'), false);

const data = new Uint8Array(Test.BYTE_LENGTH);
const view = new DataView(data.buffer);
Expand All @@ -99,10 +132,10 @@ Deno.test('memberU24', () => {
assertEquals(test.beta, 0xfffffe);
assertEquals(test.gamma, 0xfffffd);
assertEquals(test.delta, 0xfffffc);
assertEquals(getUint24(view, 0, false), 0x7fffff);
assertEquals(getUint24(view, 3, false), 0xfffffe);
assertEquals(getUint24(view, 6, true), 0xfffffd);
assertEquals(getUint24(view, 9, false), 0xfffffc);
assertEquals(getUint24(view, off.alpha, false), 0x7fffff);
assertEquals(getUint24(view, off.beta, false), 0xfffffe);
assertEquals(getUint24(view, off.gamma, true), 0xfffffd);
assertEquals(getUint24(view, off.delta, false), 0xfffffc);
}
{
const test = new Test(data.buffer, 0, true);
Expand All @@ -115,9 +148,9 @@ Deno.test('memberU24', () => {
assertEquals(test.beta, 0xfffffe);
assertEquals(test.gamma, 0xfffffd);
assertEquals(test.delta, 0xfffffc);
assertEquals(getUint24(view, 0, true), 0x7fffff);
assertEquals(getUint24(view, 3, true), 0xfffffe);
assertEquals(getUint24(view, 6, true), 0xfffffd);
assertEquals(getUint24(view, 9, false), 0xfffffc);
assertEquals(getUint24(view, off.alpha, true), 0x7fffff);
assertEquals(getUint24(view, off.beta, true), 0xfffffe);
assertEquals(getUint24(view, off.gamma, true), 0xfffffd);
assertEquals(getUint24(view, off.delta, false), 0xfffffc);
}
});
Loading

0 comments on commit 8128a6b

Please sign in to comment.