Commit 34f53f56773dfb9ad0a2f535a4b706675085b47a

Thomas de Grivel 2023-04-10T05:59:14

wip buf_parse_u8

diff --git a/libc3/buf_parse.c b/libc3/buf_parse.c
index cfa0f08..7e6519b 100644
--- a/libc3/buf_parse.c
+++ b/libc3/buf_parse.c
@@ -677,8 +677,8 @@ sw buf_parse_digit (s_buf *buf, const s_str *base, u8 *dest)
   sw digit;
   sw r;
   assert(buf);
-  assert(bases);
-  assert(bases_count);
+  assert(base);
+  assert(dest);
   if ((r = buf_peek_character_utf8(buf, &c)) <= 0)
     return r;
   if ((digit = str_character_position(base, c)) >= 0) {
@@ -2224,8 +2224,7 @@ sw buf_parse_tuple (s_buf *buf, s_tuple *tuple)
       if ((r = buf_parse_u ## bits ## _base(buf, g_c3_bases_hex,       \
                                             &tmp)) < 0)                \
         goto restore;                                                  \
-      if ((r1 = buf_parse_u ## bits ## _base(buf,                      \
-                                             g_c3_bases_hex + 1,       \
+      if ((r1 = buf_parse_u ## bits ## _base(buf, g_c3_bases_hex + 1,  \
                                              &tmp1)) < 0) {            \
         r = r1;                                                        \
         goto restore;                                                  \
diff --git a/test/buf_parse_test.c b/test/buf_parse_test.c
index 4a1af65..78e1d0a 100644
--- a/test/buf_parse_test.c
+++ b/test/buf_parse_test.c
@@ -1434,6 +1434,7 @@ void buf_parse_test_tuple ()
 
 void buf_parse_test_u8 ()
 {
+  /* unsigned 8 bits binary positional numbers */
   BUF_PARSE_TEST_U(8, "0b0", 0);
   BUF_PARSE_TEST_U(8, "0b1", 1);
   BUF_PARSE_TEST_U(8, "0b00", 0);
@@ -1452,6 +1453,7 @@ void buf_parse_test_u8 ()
   BUF_PARSE_TEST_U(8, "0b01111111", 127);
   BUF_PARSE_TEST_U(8, "0b11111111", 255);
   BUF_PARSE_TEST_U(8, "0b011111111", 255);
+  /* unsigned 8 bits octal positional numbers */
   BUF_PARSE_TEST_U(8, "0o0", 0);
   BUF_PARSE_TEST_U(8, "0o1", 1);
   BUF_PARSE_TEST_U(8, "0o2", 2);
@@ -1469,31 +1471,191 @@ void buf_parse_test_u8 ()
   BUF_PARSE_TEST_U(8, "0o0177", 127);
   BUF_PARSE_TEST_U(8, "0o377", 255);
   BUF_PARSE_TEST_U(8, "0o0377", 255);
+  /* unsigned 8 bits hexadecimal positional numbers */
   BUF_PARSE_TEST_U(8, "0x0", 0);
+  BUF_PARSE_TEST_U(8, "0x00", 0);
+  BUF_PARSE_TEST_U(8, "0x000", 0);
   BUF_PARSE_TEST_U(8, "0x1", 1);
+  BUF_PARSE_TEST_U(8, "0x01", 1);
   BUF_PARSE_TEST_U(8, "0x2", 2);
+  BUF_PARSE_TEST_U(8, "0x02", 2);
   BUF_PARSE_TEST_U(8, "0x3", 3);
+  BUF_PARSE_TEST_U(8, "0x03", 3);
   BUF_PARSE_TEST_U(8, "0x4", 4);
+  BUF_PARSE_TEST_U(8, "0x04", 4);
   BUF_PARSE_TEST_U(8, "0x5", 5);
+  BUF_PARSE_TEST_U(8, "0x05", 5);
   BUF_PARSE_TEST_U(8, "0x6", 6);
+  BUF_PARSE_TEST_U(8, "0x06", 6);
   BUF_PARSE_TEST_U(8, "0x7", 7);
+  BUF_PARSE_TEST_U(8, "0x07", 7);
   BUF_PARSE_TEST_U(8, "0x8", 8);
+  BUF_PARSE_TEST_U(8, "0x08", 8);
   BUF_PARSE_TEST_U(8, "0x9", 9);
+  BUF_PARSE_TEST_U(8, "0x09", 9);
+  BUF_PARSE_TEST_U(8, "0xa", 10);
+  BUF_PARSE_TEST_U(8, "0x0a", 10);
   BUF_PARSE_TEST_U(8, "0xA", 10);
+  BUF_PARSE_TEST_U(8, "0x0A", 10);
+  BUF_PARSE_TEST_U(8, "0xb", 11);
+  BUF_PARSE_TEST_U(8, "0x0b", 11);
   BUF_PARSE_TEST_U(8, "0xB", 11);
+  BUF_PARSE_TEST_U(8, "0x0B", 11);
+  BUF_PARSE_TEST_U(8, "0xc", 12);
+  BUF_PARSE_TEST_U(8, "0x0c", 12);
   BUF_PARSE_TEST_U(8, "0xC", 12);
+  BUF_PARSE_TEST_U(8, "0x0C", 12);
+  BUF_PARSE_TEST_U(8, "0xd", 13);
+  BUF_PARSE_TEST_U(8, "0x0d", 13);
   BUF_PARSE_TEST_U(8, "0xD", 13);
+  BUF_PARSE_TEST_U(8, "0x0D", 13);
+  BUF_PARSE_TEST_U(8, "0xe", 14);
+  BUF_PARSE_TEST_U(8, "0x0e", 14);
   BUF_PARSE_TEST_U(8, "0xE", 14);
+  BUF_PARSE_TEST_U(8, "0x0E", 14);
+  BUF_PARSE_TEST_U(8, "0xf", 15);
+  BUF_PARSE_TEST_U(8, "0x0f", 15);
   BUF_PARSE_TEST_U(8, "0xF", 15);
-  BUF_PARSE_TEST_U(8, "0x00", 0);
-  BUF_PARSE_TEST_U(8, "0x01", 1);
+  BUF_PARSE_TEST_U(8, "0x0F", 15);
   BUF_PARSE_TEST_U(8, "0x10", 16);
+  BUF_PARSE_TEST_U(8, "0x010", 16);
   BUF_PARSE_TEST_U(8, "0x11", 17);
-  BUF_PARSE_TEST_U(8, "0x000", 0);
+  BUF_PARSE_TEST_U(8, "0x011", 17);
+  BUF_PARSE_TEST_U(8, "0x12", 18);
+  BUF_PARSE_TEST_U(8, "0x012", 18);
+  BUF_PARSE_TEST_U(8, "0x13", 19);
+  BUF_PARSE_TEST_U(8, "0x013", 19);
+  BUF_PARSE_TEST_U(8, "0x14", 20);
+  BUF_PARSE_TEST_U(8, "0x014", 20);
+  BUF_PARSE_TEST_U(8, "0x15", 21);
+  BUF_PARSE_TEST_U(8, "0x015", 21);
+  BUF_PARSE_TEST_U(8, "0x16", 22);
+  BUF_PARSE_TEST_U(8, "0x016", 22);
+  BUF_PARSE_TEST_U(8, "0x17", 23);
+  BUF_PARSE_TEST_U(8, "0x017", 23);
+  BUF_PARSE_TEST_U(8, "0x18", 24);
+  BUF_PARSE_TEST_U(8, "0x018", 24);
+  BUF_PARSE_TEST_U(8, "0x19", 25);
+  BUF_PARSE_TEST_U(8, "0x019", 25);
+  BUF_PARSE_TEST_U(8, "0x1a", 26);
+  BUF_PARSE_TEST_U(8, "0x01a", 26);
+  BUF_PARSE_TEST_U(8, "0x1b", 27);
+  BUF_PARSE_TEST_U(8, "0x01b", 27);
+  BUF_PARSE_TEST_U(8, "0x1c", 28);
+  BUF_PARSE_TEST_U(8, "0x01c", 28);
+  BUF_PARSE_TEST_U(8, "0x1d", 29);
+  BUF_PARSE_TEST_U(8, "0x01d", 29);
+  BUF_PARSE_TEST_U(8, "0x1e", 30);
+  BUF_PARSE_TEST_U(8, "0x01e", 30);
+  BUF_PARSE_TEST_U(8, "0x1f", 31);
+  BUF_PARSE_TEST_U(8, "0x01f", 31);
+  BUF_PARSE_TEST_U(8, "0x1A", 26);
+  BUF_PARSE_TEST_U(8, "0x01A", 26);
+  BUF_PARSE_TEST_U(8, "0x1B", 27);
+  BUF_PARSE_TEST_U(8, "0x01B", 27);
+  BUF_PARSE_TEST_U(8, "0x1C", 28);
+  BUF_PARSE_TEST_U(8, "0x01C", 28);
+  BUF_PARSE_TEST_U(8, "0x1D", 29);
+  BUF_PARSE_TEST_U(8, "0x01D", 29);
+  BUF_PARSE_TEST_U(8, "0x1E", 30);
+  BUF_PARSE_TEST_U(8, "0x01E", 30);
+  BUF_PARSE_TEST_U(8, "0x1F", 31);
+  BUF_PARSE_TEST_U(8, "0x01F", 31);
+  BUF_PARSE_TEST_U(8, "0x20", 32);
+  BUF_PARSE_TEST_U(8, "0x020", 32);
+  BUF_PARSE_TEST_U(8, "0x21", 33);
+  BUF_PARSE_TEST_U(8, "0x021", 33);
+  BUF_PARSE_TEST_U(8, "0x22", 34);
+  BUF_PARSE_TEST_U(8, "0x022", 34);
+  BUF_PARSE_TEST_U(8, "0x23", 35);
+  BUF_PARSE_TEST_U(8, "0x023", 35);
+  BUF_PARSE_TEST_U(8, "0x24", 36);
+  BUF_PARSE_TEST_U(8, "0x024", 36);
+  BUF_PARSE_TEST_U(8, "0x25", 37);
+  BUF_PARSE_TEST_U(8, "0x025", 37);
+  BUF_PARSE_TEST_U(8, "0x26", 38);
+  BUF_PARSE_TEST_U(8, "0x026", 38);
+  BUF_PARSE_TEST_U(8, "0x27", 39);
+  BUF_PARSE_TEST_U(8, "0x027", 39);
+  BUF_PARSE_TEST_U(8, "0x28", 40);
+  BUF_PARSE_TEST_U(8, "0x028", 40);
+  BUF_PARSE_TEST_U(8, "0x29", 41);
+  BUF_PARSE_TEST_U(8, "0x029", 41);
+  BUF_PARSE_TEST_U(8, "0x2a", 42);
+  BUF_PARSE_TEST_U(8, "0x02a", 42);
+  BUF_PARSE_TEST_U(8, "0x2b", 45);
+  BUF_PARSE_TEST_U(8, "0x02b", 45);
+  BUF_PARSE_TEST_U(8, "0x2c", 46);
+  BUF_PARSE_TEST_U(8, "0x02c", 46);
+  BUF_PARSE_TEST_U(8, "0x2d", 47);
+  BUF_PARSE_TEST_U(8, "0x02d", 47);
+  BUF_PARSE_TEST_U(8, "0x2e", 48);
+  BUF_PARSE_TEST_U(8, "0x02e", 48);
+  BUF_PARSE_TEST_U(8, "0x2f", 49);
+  BUF_PARSE_TEST_U(8, "0x02f", 49);
+  BUF_PARSE_TEST_U(8, "0x2A", 42);
+  BUF_PARSE_TEST_U(8, "0x02A", 42);
+  BUF_PARSE_TEST_U(8, "0x2B", 43);
+  BUF_PARSE_TEST_U(8, "0x02B", 43);
+  BUF_PARSE_TEST_U(8, "0x2C", 44);
+  BUF_PARSE_TEST_U(8, "0x02C", 44);
+  BUF_PARSE_TEST_U(8, "0x2D", 45);
+  BUF_PARSE_TEST_U(8, "0x02D", 45);
+  BUF_PARSE_TEST_U(8, "0x2E", 46);
+  BUF_PARSE_TEST_U(8, "0x02E", 46);
+  BUF_PARSE_TEST_U(8, "0x2F", 47);
+  BUF_PARSE_TEST_U(8, "0x02F", 47);
+  BUF_PARSE_TEST_U(8, "0x30", 48);
+  BUF_PARSE_TEST_U(8, "0x030", 48);
+  BUF_PARSE_TEST_U(8, "0x31", 49);
+  BUF_PARSE_TEST_U(8, "0x031", 49);
+  BUF_PARSE_TEST_U(8, "0x32", 50);
+  BUF_PARSE_TEST_U(8, "0x032", 50);
+  BUF_PARSE_TEST_U(8, "0x33", 51);
+  BUF_PARSE_TEST_U(8, "0x033", 51);
+  BUF_PARSE_TEST_U(8, "0x34", 52);
+  BUF_PARSE_TEST_U(8, "0x034", 52);
+  BUF_PARSE_TEST_U(8, "0x35", 53);
+  BUF_PARSE_TEST_U(8, "0x035", 53);
+  BUF_PARSE_TEST_U(8, "0x36", 54);
+  BUF_PARSE_TEST_U(8, "0x036", 54);
+  BUF_PARSE_TEST_U(8, "0x37", 55);
+  BUF_PARSE_TEST_U(8, "0x037", 55);
+  BUF_PARSE_TEST_U(8, "0x38", 56);
+  BUF_PARSE_TEST_U(8, "0x038", 56);
+  BUF_PARSE_TEST_U(8, "0x39", 57);
+  BUF_PARSE_TEST_U(8, "0x039", 57);
+  BUF_PARSE_TEST_U(8, "0x3a", 58);
+  BUF_PARSE_TEST_U(8, "0x03a", 58);
+  BUF_PARSE_TEST_U(8, "0x3b", 59);
+  BUF_PARSE_TEST_U(8, "0x03b", 59);
+  BUF_PARSE_TEST_U(8, "0x3c", 60);
+  BUF_PARSE_TEST_U(8, "0x03c", 60);
+  BUF_PARSE_TEST_U(8, "0x3d", 61);
+  BUF_PARSE_TEST_U(8, "0x03d", 61);
+  BUF_PARSE_TEST_U(8, "0x3e", 62);
+  BUF_PARSE_TEST_U(8, "0x03e", 62);
+  BUF_PARSE_TEST_U(8, "0x3f", 63);
+  BUF_PARSE_TEST_U(8, "0x03f", 63);
+  BUF_PARSE_TEST_U(8, "0x3A", 58);
+  BUF_PARSE_TEST_U(8, "0x03A", 58);
+  BUF_PARSE_TEST_U(8, "0x3B", 59);
+  BUF_PARSE_TEST_U(8, "0x03B", 59);
+  BUF_PARSE_TEST_U(8, "0x3C", 60);
+  BUF_PARSE_TEST_U(8, "0x03C", 60);
+  BUF_PARSE_TEST_U(8, "0x3D", 61);
+  BUF_PARSE_TEST_U(8, "0x03D", 61);
+  BUF_PARSE_TEST_U(8, "0x3E", 62);
+  BUF_PARSE_TEST_U(8, "0x03E", 62);
+  BUF_PARSE_TEST_U(8, "0x3F", 63);
+  BUF_PARSE_TEST_U(8, "0x03F", 63);
   BUF_PARSE_TEST_U(8, "0x7F", 127);
   BUF_PARSE_TEST_U(8, "0x07F", 127);
+  BUF_PARSE_TEST_U(8, "0xff", 255);
+  BUF_PARSE_TEST_U(8, "0x0ff", 255);
   BUF_PARSE_TEST_U(8, "0xFF", 255);
   BUF_PARSE_TEST_U(8, "0x0FF", 255);
+  /* unsigned 8 bits decimal positional numbers */
   BUF_PARSE_TEST_U(8, "0", 0);
   BUF_PARSE_TEST_U(8, "1", 1);
   BUF_PARSE_TEST_U(8, "2", 2);