Explorar o código

add binary const & its test code

hathach %!s(int64=13) %!d(string=hai) anos
pai
achega
0c1d4f705b
Modificáronse 2 ficheiros con 47 adicións e 12 borrados
  1. 38 4
      tests/test/test_binary_const.c
  2. 9 8
      tinyusb/common/binary.h

+ 38 - 4
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_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_IGNORE();
+  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));
 }

+ 9 - 8
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