]> granicus.if.org Git - neomutt/commitdiff
test: mutt_str_atoi()
authorRichard Russon <rich@flatcap.org>
Tue, 23 Apr 2019 01:26:55 +0000 (02:26 +0100)
committerRichard Russon <rich@flatcap.org>
Wed, 24 Apr 2019 19:28:19 +0000 (20:28 +0100)
test/string/mutt_str_atoi.c

index 25c906a7e0b31435954a5c3904af8c44edcd05ee..7be65328a4845122da826e958460fe1c18952de7 100644 (file)
 #include "config.h"
 #include "mutt/mutt.h"
 
+struct TestValue
+{
+  const char *str; ///< String to test
+  int retval;      ///< Expected return value
+  long result;     ///< Expected result (outparam)
+};
+
+// clang-format off
+static const struct TestValue tests[] = {
+  // Valid tests
+  { "0",           0,    0 },
+  { "1",           0,    1 },
+  { "2",           0,    2 },
+  { "3",           0,    3 },
+  { " 3",          0,    3 },
+  { "  3",         0,    3 },
+
+  { "2147483645",  0,    2147483645 },
+  { "2147483646",  0,    2147483646 },
+  { "2147483647",  0,    2147483647 },
+
+  { "-1",          0,    -1 },
+  { "-2",          0,    -2 },
+  { "-3",          0,    -3 },
+  { " -3",         0,    -3 },
+  { "  -3",        0,    -3 },
+
+  { "-2147483646", 0,    -2147483646 },
+  { "-2147483647", 0,    -2147483647 },
+  { "-2147483648", 0,    -2147483648 },
+
+  // Out of range tests
+  { "2147483648",  -2,   0 },
+  { "2147483649",  -2,   0 },
+  { "2147483650",  -2,   0 },
+
+  { "-2147483649", -2,   0 },
+  { "-2147483650", -2,   0 },
+  { "-2147483651", -2,   0 },
+
+  // Invalid tests
+  { "abc",         -1,   0 },
+  { "a123",        -1,   0 },
+  { "a-123",       -1,   0 },
+  { "0a",          -1,   0 },
+  { "123a",        -1,   0 },
+  { "-123a",       -1,   0 },
+  { "1,234",       -1,   0 },
+  { "-1,234",      -1,   0 },
+  { "1.234",       -1,   0 },
+  { "-1.234",      -1,   0 },
+  { ".123",        -1,   0 },
+  { "-.123",       -1,   0 },
+  { "3 ",          -1,   0 },
+  { "-3 ",         -1,   0 },
+};
+// clang-format on
+
+static const int UNEXPECTED = -9999;
+
 void test_mutt_str_atoi(void)
 {
   // int mutt_str_atoi(const char *str, int *dst);
 
+  int result = UNEXPECTED;
+  int retval = 0;
+
+  // Degenerate tests
+  TEST_CHECK(mutt_str_atoi(NULL, &result) == 0);
+  TEST_CHECK(mutt_str_atoi("42", NULL) == 0);
+
+  // Normal tests
+  for (size_t i = 0; i < mutt_array_size(tests); i++)
   {
-    TEST_CHECK(mutt_str_atoi(NULL, NULL) == 0);
+    result = UNEXPECTED;
+    retval = mutt_str_atoi(tests[i].str, &result);
+
+    const bool success = (retval == tests[i].retval) && (result == tests[i].result);
+    if (!TEST_CHECK_(success, "Testing '%s'\n", tests[i].str))
+    {
+      TEST_MSG("retval: Expected: %d, Got: %d\n", tests[i].retval, retval);
+      TEST_MSG("result: Expected: %ld, Got: %ld\n", tests[i].result, result);
+    }
   }
 }