mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2026-10-22 07:02:37 +00:00
82 lines
3.5 KiB
C++
82 lines
3.5 KiB
C++
#include "pch.h"
|
|
#include <Chip.h>
|
|
|
|
BOOST_AUTO_TEST_SUITE(Chip)
|
|
|
|
BOOST_AUTO_TEST_CASE(bit_returns_correct_bit_mask) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::bit(0), 0x01);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::bit(1), 0x02);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::bit(7), 0x80);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::bit(3), 0x08);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(setBit_sets_bits_correctly) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::setBit((uint8_t)0b00001001, 0b00000100), 0b00001101);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::setBit((uint8_t)0b00001101, 0b00000100), 0b00001101);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::setBit((uint8_t)0b00001101, 0b00000100, true), 0b00001101);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::setBit((uint8_t)0b00001101, 0b00000100, false), 0b00001001);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(clearBit_clears_bits_correctly) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::clearBit((uint8_t)0b00001101, 0b00000100), 0b00001001);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::clearBit((uint8_t)0b00001101, 0b00000100, false), 0b00001101);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::clearBit((uint8_t)0b00001101, 0b00000100, true), 0b00001001);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(highByte_and_lowByte_work_correctly) {
|
|
const uint16_t u16 = 0xABCD;
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::highByte(u16), 0xAB);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::lowByte(u16), 0xCD);
|
|
|
|
const int i32 = 0x1234;
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::highByte(i32), 0x12);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::lowByte(i32), 0x34);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(promoteByte_and_demoteByte_work_correctly) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::promoteByte((uint8_t)0x34), 0x3400);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::demoteByte((uint16_t)0x1234), 0x12);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(higherPart_and_lowerPart_work_correctly) {
|
|
const uint16_t value = 0xABCD;
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::higherPart(value), 0xAB00);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::lowerPart(value), 0xCD);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(makeWord_creates_correct_word) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::makeWord((uint8_t)0x34, (uint8_t)0x12), 0x1234);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(nibble_methods_work_correctly) {
|
|
const uint8_t value = 0xAB;
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::highNibble(value), 0x0A);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::lowNibble(value), 0x0B);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::higherNibble(value), 0xA0);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::lowerNibble(value), 0x0B);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::promoteNibble(value), 0xB0);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::demoteNibble(value), 0x0A);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(countBits_returns_correct_count) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::countBits(0U), 0);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::countBits(1U), 1);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::countBits(0xFFU), 8);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(evenParity_returns_correct_parity) {
|
|
BOOST_CHECK( EightBit::Chip::evenParity(0U)); // 0 bits set — even
|
|
BOOST_CHECK(!EightBit::Chip::evenParity(1U)); // 1 bit set — odd
|
|
BOOST_CHECK( EightBit::Chip::evenParity(3U)); // 2 bits set — even
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(findFirstSet_returns_correct_index) {
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::findFirstSet(0UL), 0);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::findFirstSet(1UL), 1);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::findFirstSet(2UL), 2);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::findFirstSet(4UL), 3);
|
|
BOOST_CHECK_EQUAL(EightBit::Chip::findFirstSet(0b10000UL), 5);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|