diff --git a/tests/test/test_binary_const.c b/tests/test/test_binary_const.c index 2724bac44..09d27acac 100644 --- a/tests/test/test_binary_const.c +++ b/tests/test/test_binary_const.c @@ -39,8 +39,6 @@ #include "unity.h" #include "common/binary.h" -#define TT(a, ...) printf(a, ##__VA_ARGS__) - void setUp(void) { } @@ -49,7 +47,43 @@ void tearDown(void) { } -void test_binary_byte() +void test_binary_8() { - TEST_IGNORE(); + TEST_ASSERT_EQUAL_HEX8(0x00, BIN8(00000000)); + TEST_ASSERT_EQUAL_HEX8(0x01, BIN8(00000001)); + TEST_ASSERT_EQUAL_HEX8(0x02, BIN8(00000010)); + TEST_ASSERT_EQUAL_HEX8(0x04, BIN8(00000100)); + TEST_ASSERT_EQUAL_HEX8(0x08, BIN8(00001000)); + TEST_ASSERT_EQUAL_HEX8(0x10, BIN8(00010000)); + TEST_ASSERT_EQUAL_HEX8(0x20, BIN8(00100000)); + TEST_ASSERT_EQUAL_HEX8(0x40, BIN8(01000000)); + TEST_ASSERT_EQUAL_HEX8(0x80, BIN8(10000000)); + + TEST_ASSERT_EQUAL_HEX8(0x0f, BIN8(00001111)); + TEST_ASSERT_EQUAL_HEX8(0xf0, BIN8(11110000)); + TEST_ASSERT_EQUAL_HEX8(0xff, BIN8(11111111)); +} + +void test_binary_16() +{ + TEST_ASSERT_EQUAL_HEX16(0x0000, BIN16(00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX16(0x000f, BIN16(00000000, 00001111)); + TEST_ASSERT_EQUAL_HEX16(0x00f0, BIN16(00000000, 11110000)); + TEST_ASSERT_EQUAL_HEX16(0x0f00, BIN16(00001111, 00000000)); + TEST_ASSERT_EQUAL_HEX16(0xf000, BIN16(11110000, 00000000)); + TEST_ASSERT_EQUAL_HEX16(0xffff, BIN16(11111111, 11111111)); +} + +void test_binary_32() +{ + TEST_ASSERT_EQUAL_HEX32(0x00000000, BIN32(00000000, 00000000, 00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0x0000000f, BIN32(00000000, 00000000, 00000000, 00001111)); + TEST_ASSERT_EQUAL_HEX32(0x000000f0, BIN32(00000000, 00000000, 00000000, 11110000)); + TEST_ASSERT_EQUAL_HEX32(0x00000f00, BIN32(00000000, 00000000, 00001111, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0x0000f000, BIN32(00000000, 00000000, 11110000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0x000f0000, BIN32(00000000, 00001111, 00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0x00f00000, BIN32(00000000, 11110000, 00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0x0f000000, BIN32(00001111, 00000000, 00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0xf0000000, BIN32(11110000, 00000000, 00000000, 00000000)); + TEST_ASSERT_EQUAL_HEX32(0xffffffff, BIN32(11111111, 11111111, 11111111, 11111111)); } diff --git a/tinyusb/common/binary.h b/tinyusb/common/binary.h index e46bd92e0..94648486e 100644 --- a/tinyusb/common/binary.h +++ b/tinyusb/common/binary.h @@ -66,11 +66,12 @@ /// clear n-th bit of x #define BIT_CLR_(x, n) ( (x) & (~BIT_(n)) ) + #if defined(__GNUC__) -#define BIN8(x) (0b##x) -#define BIN16 BIN8 -#define BIN32 BIN8 +#define BIN8(x) (0b##x) +#define BIN16(b1, b2) (0b##b1##b2) +#define BIN32(b1, b2, b3, b4) (0b##b1##b2##b3##b4) #else @@ -85,12 +86,12 @@ +((x&0xF0000000LU)?128:0) #define BIN8(d) ((uint8_t)_B8__(0x##d##LU)) -#define BIN16(dmsb,dlsb) (((uint16_t)B8(dmsb)<<8) + B8(dlsb)) +#define BIN16(dmsb,dlsb) (((uint16_t)BIN8(dmsb)<<8) + BIN8(dlsb)) #define BIN32(dmsb,db2,db3,dlsb) \ - (((uint32_t)B8(dmsb)<<24) \ - + ((uint32_t)B8(db2)<<16) \ - + ((uint32_t)B8(db3)<<8) \ - + B8(dlsb)) + (((uint32_t)BIN8(dmsb)<<24) \ + + ((uint32_t)BIN8(db2)<<16) \ + + ((uint32_t)BIN8(db3)<<8) \ + + BIN8(dlsb)) #endif #ifdef __cplusplus