]> granicus.if.org Git - neomutt/commitdiff
test: mutt_str_atos()
authorRichard Russon <rich@flatcap.org>
Mon, 22 Apr 2019 23:05:39 +0000 (00:05 +0100)
committerRichard Russon <rich@flatcap.org>
Wed, 24 Apr 2019 19:28:06 +0000 (20:28 +0100)
test/string/mutt_str_atos.c

index e25dc4a745f859c89910e4ccb18bd261e97040b7..dea7cb3aaf6236b9aeb5231178a5fc93bf4a6d50 100644 (file)
 #include "config.h"
 #include "mutt/mutt.h"
 
+struct TestValue
+{
+  const char *str; ///< String to test
+  int retval;      ///< Expected return value
+  int 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 },
+
+  { "32765",  0,  32765 },
+  { "32766",  0,  32766 },
+  { "32767",  0,  32767 },
+
+  { "-1",     0,  -1 },
+  { "-2",     0,  -2 },
+  { "-3",     0,  -3 },
+  { " -3",    0,  -3 },
+  { "  -3",   0,  -3 },
+
+  { "-32766", 0,  -32766 },
+  { "-32767", 0,  -32767 },
+  { "-32768", 0,  -32768 },
+
+  // Out of range tests
+  { "32768",  -2, 0 },
+  { "32769",  -2, 0 },
+  { "32770",  -2, 0 },
+
+  { "-32769", -2, 0 },
+  { "-32770", -2, 0 },
+  { "-32771", -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_atos(void)
 {
   // int mutt_str_atos(const char *str, short *dst);
 
+  short result = UNEXPECTED;
+  int retval = 0;
+
+  // Degenerate tests
+  TEST_CHECK(mutt_str_atos(NULL, &result) == 0);
+  TEST_CHECK(mutt_str_atos("42", NULL) == 0);
+
+  // Normal tests
+  for (size_t i = 0; i < mutt_array_size(tests); i++)
   {
-    TEST_CHECK(mutt_str_atos(NULL, NULL) == 0);
+    result = UNEXPECTED;
+    retval = mutt_str_atos(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: %d, Got: %d\n", tests[i].result, result);
+    }
   }
 }