1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-03-11 04:42:20 +00:00
Files
CLK/OSBindings/Mac/Clock SignalTests/NumericTests.mm
2025-08-26 22:54:39 -04:00

83 lines
2.0 KiB
Plaintext

//
// NumericTests.m
// Clock SignalTests
//
// Created by Thomas Harte on 20/02/2025.
// Copyright © 2025 Thomas Harte. All rights reserved.
//
#import <XCTest/XCTest.h>
#include "BitStream.hpp"
@interface NumericTests : XCTestCase
@end
@implementation NumericTests {
}
- (void)testBitStreamLSBFirst {
static constexpr uint8_t testData[] = {
0xa3, 0xf4
};
auto it = std::begin(testData);
Numeric::BitStream<2, true> stream([&]() -> uint8_t {
if(it == std::end(testData)) return 0xff;
return *it++;
});
XCTAssertEqual(stream.next<2>(), 0b11);
XCTAssertEqual(stream.next<2>(), 0b00);
XCTAssertEqual(stream.next<2>(), 0b01);
XCTAssertEqual(stream.next<1>(), 0b0);
XCTAssertEqual(stream.next<2>(), 0b10);
XCTAssertEqual(stream.next<2>(), 0b01);
XCTAssertEqual(stream.next<1>(), 0b0);
XCTAssertEqual(stream.next<1>(), 0b1);
XCTAssertEqual(stream.next<2>(), 0b11);
XCTAssertEqual(stream.next<2>(), 0b11);
}
- (void)testBitStreamMSBFirst {
static constexpr uint8_t testData[] = {
0xa3, 0xf4
};
auto it = std::begin(testData);
Numeric::BitStream<2, false> stream([&]() -> uint8_t {
if(it == std::end(testData)) return 0xff;
return *it++;
});
XCTAssertEqual(stream.next<2>(), 0b10);
XCTAssertEqual(stream.next<2>(), 0b10);
XCTAssertEqual(stream.next<2>(), 0b00);
XCTAssertEqual(stream.next<1>(), 0b1);
XCTAssertEqual(stream.next<2>(), 0b11);
XCTAssertEqual(stream.next<2>(), 0b11);
XCTAssertEqual(stream.next<1>(), 0b1);
XCTAssertEqual(stream.next<1>(), 0b0);
XCTAssertEqual(stream.next<2>(), 0b10);
XCTAssertEqual(stream.next<2>(), 0b01);
}
- (void)testBitStreamMultibyte {
static constexpr uint8_t testData[] = {
0xa3, 0xf4, 0x11
};
auto it = std::begin(testData);
Numeric::BitStream<11, false> stream([&]() -> uint8_t {
if(it == std::end(testData)) return 0xff;
return *it++;
});
XCTAssertEqual(stream.next<2>(), 0b10);
XCTAssertEqual(stream.next<9>(), 0b100011111);
XCTAssertEqual(stream.next<11>(), 0b10100000100);
XCTAssertEqual(stream.next<3>(), 0b011);
}
@end