From def92ab029c027af7d9c0f90699e39fff3b48794 Mon Sep 17 00:00:00 2001 From: Maxim Biro Date: Sun, 26 Feb 2017 12:56:55 -0500 Subject: [PATCH] Add test for tox_strncasecmp() --- CMakeLists.txt | 1 + auto_tests/Makefile.inc | 11 +- auto_tests/tox_strncasecmp_test.c | 193 ++++++++++++++++++++++++++++++ 3 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 auto_tests/tox_strncasecmp_test.c diff --git a/CMakeLists.txt b/CMakeLists.txt index ded86010..e7f49313 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -423,6 +423,7 @@ auto_test(tox) auto_test(tox_many) auto_test(tox_many_tcp) auto_test(tox_one) +auto_test(tox_strncasecmp) auto_test(version) if(BUILD_TOXAV) diff --git a/auto_tests/Makefile.inc b/auto_tests/Makefile.inc index dc1dc9f7..698064c4 100644 --- a/auto_tests/Makefile.inc +++ b/auto_tests/Makefile.inc @@ -1,7 +1,7 @@ if BUILD_TESTS -TESTS = encryptsave_test messenger_autotest crypto_test network_test onion_test TCP_test tox_test dht_autotest -check_PROGRAMS = encryptsave_test messenger_autotest crypto_test network_test onion_test TCP_test tox_test dht_autotest +TESTS = encryptsave_test messenger_autotest crypto_test network_test onion_test TCP_test tox_test dht_autotest tox_strncasecmp_test +check_PROGRAMS = encryptsave_test messenger_autotest crypto_test network_test onion_test TCP_test tox_test dht_autotest tox_strncasecmp_test AUTOTEST_CFLAGS = \ $(LIBSODIUM_CFLAGS) \ @@ -100,4 +100,11 @@ encryptsave_test_CFLAGS = $(AUTOTEST_CFLAGS) encryptsave_test_LDADD = $(AUTOTEST_LDADD) +tox_strncasecmp_test_SOURCES = ../auto_tests/tox_strncasecmp_test.c + +tox_strncasecmp_test_CFLAGS = $(AUTOTEST_CFLAGS) + +tox_strncasecmp_test_LDADD = $(AUTOTEST_LDADD) + + EXTRA_DIST += $(top_srcdir)/auto_tests/helpers.h diff --git a/auto_tests/tox_strncasecmp_test.c b/auto_tests/tox_strncasecmp_test.c new file mode 100644 index 00000000..0acc85fe --- /dev/null +++ b/auto_tests/tox_strncasecmp_test.c @@ -0,0 +1,193 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include "helpers.h" + +#include "../testing/misc_tools.c" + +typedef enum { + NEGATIVE, + ZERO, + POSITIVE +} Comparison; + +static const char *Comparison_Str[] = { "NEGATIVE", "ZERO", "POSITIVE" }; + +void verify(const char *s1, const char *s2, size_t n, Comparison expected) +{ + int r = tox_strncasecmp(s1, s2, n); + Comparison actual = r < 0 ? NEGATIVE : r == 0 ? ZERO : POSITIVE; + + ck_assert_msg(actual == expected, + "tox_strncasecmp(\"%s\", \"%s\", %u) == %s, but expected %s.", + s1, s2, n, Comparison_Str[actual], Comparison_Str[expected]); +} + +START_TEST(test_general) +{ + // empty strings are equal + verify("", "", 100, ZERO); + verify("", "", -1, ZERO); + + // ====== Same Case Test Cases ====== + + // equal strings with n=0 are equal + verify("", "", 0, ZERO); + verify("AAA", "AAA", 0, ZERO); + + // unequal strings with n=0 are equal + verify("A", "B", 0, ZERO); + verify("AAA", "BBB", 0, ZERO); + verify("AAA", "BBBBBB", 0 , ZERO); + verify("AAAAAA", "BBB", 0, ZERO); + + // equal strings are equal + verify("AAA", "AAA", 0, ZERO); + verify("AAA", "AAA", 1, ZERO); + verify("AAA", "AAA", 2, ZERO); + verify("AAA", "AAA", 3, ZERO); + verify("AAA", "AAA", 4, ZERO); + verify("AAA", "AAA", 5, ZERO); + verify("AAA", "AAA", -1, ZERO); + + verify("AAA", "AAAAAA", 0, ZERO); + verify("AAA", "AAAAAA", 1, ZERO); + verify("AAA", "AAAAAA", 2, ZERO); + verify("AAA", "AAAAAA", 3, ZERO); + verify("AAA", "AAAAAA", 4, NEGATIVE); + verify("AAA", "AAAAAA", 5, NEGATIVE); + verify("AAA", "AAAAAA", -1, NEGATIVE); + + verify("AAAAAA", "AAA", 0, ZERO); + verify("AAAAAA", "AAA", 1, ZERO); + verify("AAAAAA", "AAA", 2, ZERO); + verify("AAAAAA", "AAA", 3, ZERO); + verify("AAAAAA", "AAA", 4, POSITIVE); + verify("AAAAAA", "AAA", 5, POSITIVE); + verify("AAAAAA", "AAA", -1, POSITIVE); + + verify("I'm eating wafers and drinking tea.", "I'm eating wafers and drinking tea.", -1, ZERO); + + // unequal strings are equal only up to n + verify("AAAB", "AAAA", 0, ZERO); + verify("AAAB", "AAAA", 1, ZERO); + verify("AAAB", "AAAA", 2, ZERO); + verify("AAAB", "AAAA", 3, ZERO); + verify("AAAB", "AAAA", 4, POSITIVE); + verify("AAAB", "AAAA", 5, POSITIVE); + verify("AAAB", "AAAA", -1, POSITIVE); + + verify("AAAA", "AAAB", 0, ZERO); + verify("AAAA", "AAAB", 1, ZERO); + verify("AAAA", "AAAB", 2, ZERO); + verify("AAAA", "AAAB", 3, ZERO); + verify("AAAA", "AAAB", 4, NEGATIVE); + verify("AAAA", "AAAB", 5, NEGATIVE); + verify("AAAA", "AAAB", -1, NEGATIVE); + + verify("The wafers are salty.", "The wafers are sweet.", 16, ZERO); + verify("The wafers are salty.", "The wafers are sweet.", 17, NEGATIVE); + verify("The wafers are salty.", "The wafers are sweet.", -1, NEGATIVE); + + // the comparison should stop at first mismatch + verify("AAABA", "AAAAB", -1, POSITIVE); + verify("AAAAB", "AAABA", -1, NEGATIVE); + + // ====== Different Case Test Cases ====== + + // equal strings with n=0 are equal + verify("", "", 0, ZERO); + verify("aaa", "AAA", 0, ZERO); + + // unequal strings with n=0 are equal + verify("a", "B", 0, ZERO); + verify("aaa", "BBB", 0, ZERO); + verify("aaa", "BBBBBB", 0 , ZERO); + verify("aaaaaa", "BBB", 0, ZERO); + + // equal strings are equal + verify("aaa", "AAA", 0, ZERO); + verify("AAA", "aaa", 1, ZERO); + verify("aaa", "AAA", 2, ZERO); + verify("aaa", "AAA", 3, ZERO); + verify("AAA", "aaa", 4, ZERO); + verify("AAA", "aaa", 5, ZERO); + verify("AAA", "aaa", -1, ZERO); + + verify("aaa", "AAAAAA", 0, ZERO); + verify("AAA", "AAAaaa", 1, ZERO); + verify("aaA", "aaaAAA", 2, ZERO); + verify("AaA", "aAAAAA", 3, ZERO); + verify("AAA", "AAAAAA", 4, NEGATIVE); + verify("Aaa", "AAaaAA", 5, NEGATIVE); + verify("AAA", "AAAAAa", -1, NEGATIVE); + + verify("AAAAAA", "aaa", 0, ZERO); + verify("AAAaaa", "AAA", 1, ZERO); + verify("aaaAAA", "aaA", 2, ZERO); + verify("aAAAAA", "AaA", 3, ZERO); + verify("AAAAAA", "AAA", 4, POSITIVE); + verify("AAaaAA", "Aaa", 5, POSITIVE); + verify("AAAAAa", "AAA", -1, POSITIVE); + + verify("I'm Eating Wafers And Drinking Tea.", "I'm eating wafers and drinking tea.", -1, ZERO); + + // unequal strings are equal only up to n + verify("aaaB", "AAAA", 0, ZERO); + verify("AaAB", "aAAA", 1, ZERO); + verify("aAAB", "AaAA", 2, ZERO); + verify("AAAB", "AAaA", 3, ZERO); + verify("AAAB", "AAAA", 4, POSITIVE); + verify("AAAb", "AAAA", 5, POSITIVE); + verify("AAAB", "AAAa", -1, POSITIVE); + + verify("AAAA", "aaaB", 0, ZERO); + verify("aAAA", "AaAB", 1, ZERO); + verify("AaAA", "aAAB", 2, ZERO); + verify("AAaA", "AAAB", 3, ZERO); + verify("AAAA", "AAAB", 4, NEGATIVE); + verify("AAAA", "AAAb", 5, NEGATIVE); + verify("AAAa", "AAAB", -1, NEGATIVE); + + verify("The Wafers Are Salty.", "The wafers are sweet.", 16, ZERO); + verify("The Wafers Are Salty.", "The wafers are sweet.", 17, NEGATIVE); + verify("The Wafers Are Salty.", "The wafers are sweet.", -1, NEGATIVE); + + // the comparison should stop at first mismatch + verify("aAaBA", "AAAAb", -1, POSITIVE); + verify("AAAAb", "aAaBA", -1, NEGATIVE); +} +END_TEST + +static Suite *tox_strncasecmp_suite(void) +{ + Suite *s = suite_create("tox_strncasecmp"); + + DEFTESTCASE(general); + + return s; +} + +int main(int argc, char *argv[]) +{ + srand((unsigned int) time(NULL)); + + Suite *s = tox_strncasecmp_suite(); + SRunner *test_runner = srunner_create(s); + + int number_failed = 0; + srunner_run_all(test_runner, CK_NORMAL); + number_failed = srunner_ntests_failed(test_runner); + + srunner_free(test_runner); + + return number_failed; +}