From 8a2061f2cfb4ec390188b222a176e62fc5d53623 Mon Sep 17 00:00:00 2001 From: Jordan Lee Date: Sun, 9 Dec 2012 05:32:52 +0000 Subject: [PATCH] move bitfield tests to their own file --- libtransmission/Makefile.am | 5 + libtransmission/bitfield-test.c | 128 +++++++ libtransmission/utils-test.c | 581 +++++++++++++------------------- 3 files changed, 366 insertions(+), 348 deletions(-) create mode 100644 libtransmission/bitfield-test.c diff --git a/libtransmission/Makefile.am b/libtransmission/Makefile.am index a66367dcc..8278ed669 100644 --- a/libtransmission/Makefile.am +++ b/libtransmission/Makefile.am @@ -122,6 +122,7 @@ noinst_HEADERS = \ webseed.h TESTS = \ + bitfield-test \ blocklist-test \ bencode-test \ clients-test \ @@ -156,6 +157,10 @@ bencode_test_SOURCES = bencode-test.c bencode_test_LDADD = ${apps_ldadd} bencode_test_LDFLAGS = ${apps_ldflags} +bitfield_test_SOURCES = bitfield-test.c +bitfield_test_LDADD = ${apps_ldadd} +bitfield_test_LDFLAGS = ${apps_ldflags} + blocklist_test_SOURCES = blocklist-test.c blocklist_test_LDADD = ${apps_ldadd} blocklist_test_LDFLAGS = ${apps_ldflags} diff --git a/libtransmission/bitfield-test.c b/libtransmission/bitfield-test.c new file mode 100644 index 000000000..c5c5adaee --- /dev/null +++ b/libtransmission/bitfield-test.c @@ -0,0 +1,128 @@ +#include /* strlen () */ +#include "transmission.h" +#include "crypto.h" +#include "bitfield.h" +#include "utils.h" /* tr_free */ + +#undef VERBOSE +#include "libtransmission-test.h" + +static int +test_bitfield_count_range (void) +{ + int i; + int n; + int begin; + int end; + int count1; + int count2; + const int bitCount = 100 + tr_cryptoWeakRandInt (1000); + tr_bitfield bf; + + /* generate a random bitfield */ + tr_bitfieldConstruct (&bf, bitCount); + for (i=0, n=tr_cryptoWeakRandInt (bitCount); i= 21))); + + /* test tr_bitfieldRemRange on the boundaries */ + tr_bitfieldAddRange (&field, 0, 64); + tr_bitfieldRemRange (&field, 8, 24); + for (i=0; i<64; i++) + check (tr_bitfieldHas (&field, i) == ((i < 8) || (i >= 24))); + + /* test tr_bitfieldRemRange when begin & end is on the same word */ + tr_bitfieldAddRange (&field, 0, 64); + tr_bitfieldRemRange (&field, 4, 5); + for (i=0; i<64; i++) + check (tr_bitfieldHas (&field, i) == ((i < 4) || (i >= 5))); + + /* test tr_bitfieldAddRange */ + tr_bitfieldRemRange (&field, 0, 64); + tr_bitfieldAddRange (&field, 4, 21); + for (i=0; i<64; i++) + check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 21))); + + /* test tr_bitfieldAddRange on the boundaries */ + tr_bitfieldRemRange (&field, 0, 64); + tr_bitfieldAddRange (&field, 8, 24); + for (i=0; i<64; i++) + check (tr_bitfieldHas (&field, i) == ((8 <= i) && (i < 24))); + + /* test tr_bitfieldAddRange when begin & end is on the same word */ + tr_bitfieldRemRange (&field, 0, 64); + tr_bitfieldAddRange (&field, 4, 5); + for (i=0; i<64; i++) + check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 5))); + + tr_bitfieldDestruct (&field); + return 0; +} + +int +main (void) +{ + int l; + int ret; + const testFunc tests[] = { test_bitfields }; + + if ((ret = runTests (tests, NUM_TESTS (tests)))) + return ret; + + /* bitfield count range */ + for (l=0; l<10000; ++l) + if ((ret = test_bitfield_count_range ())) + return ret; + + return 0; +} diff --git a/libtransmission/utils-test.c b/libtransmission/utils-test.c index 18c3d7b90..669792f5f 100644 --- a/libtransmission/utils-test.c +++ b/libtransmission/utils-test.c @@ -2,7 +2,6 @@ #include /* strlen () */ #include "transmission.h" -#include "bitfield.h" #include "ConvertUTF.h" /* tr_utf8_validate*/ #include "platform.h" #include "crypto.h" @@ -25,479 +24,365 @@ static int test_base64 (void) { - char *in, *out; - int len; + int len; + char *in, *out; - /* base64 */ - out = tr_base64_encode ("YOYO!", -1, &len); - check_streq ("WU9ZTyE=", out); - check_int_eq (8, len); - in = tr_base64_decode (out, -1, &len); - check_streq ("YOYO!", in); - check_int_eq (5, len); - tr_free (in); - tr_free (out); - out = tr_base64_encode (NULL, 0, &len); - check (out == NULL); - check_int_eq (0, len); + /* base64 */ + out = tr_base64_encode ("YOYO!", -1, &len); + check_streq ("WU9ZTyE=", out); + check_int_eq (8, len); + in = tr_base64_decode (out, -1, &len); + check_streq ("YOYO!", in); + check_int_eq (5, len); + tr_free (in); + tr_free (out); + out = tr_base64_encode (NULL, 0, &len); + check (out == NULL); + check_int_eq (0, len); - return 0; -} - -static int -test_bitfield_count_range (void) -{ - int i; - int n; - int begin; - int end; - int count1; - int count2; - const int bitCount = 100 + tr_cryptoWeakRandInt (1000); - tr_bitfield bf; - - /* generate a random bitfield */ - tr_bitfieldConstruct (&bf, bitCount); - for (i=0, n=tr_cryptoWeakRandInt (bitCount); i= 21))); - - /* test tr_bitfieldRemRange on the boundaries */ - tr_bitfieldAddRange (&field, 0, 64); - tr_bitfieldRemRange (&field, 8, 24); - for (i = 0; i < 64; ++i) - check (tr_bitfieldHas (&field, i) == ((i < 8) || (i >= 24))); - - /* test tr_bitfieldRemRange when begin & end is on the same word */ - tr_bitfieldAddRange (&field, 0, 64); - tr_bitfieldRemRange (&field, 4, 5); - for (i = 0; i < 64; ++i) - check (tr_bitfieldHas (&field, i) == ((i < 4) || (i >= 5))); - - /* test tr_bitfieldAddRange */ - tr_bitfieldRemRange (&field, 0, 64); - tr_bitfieldAddRange (&field, 4, 21); - for (i = 0; i < 64; ++i) - check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 21))); - - /* test tr_bitfieldAddRange on the boundaries */ - tr_bitfieldRemRange (&field, 0, 64); - tr_bitfieldAddRange (&field, 8, 24); - for (i = 0; i < 64; ++i) - check (tr_bitfieldHas (&field, i) == ((8 <= i) && (i < 24))); - - /* test tr_bitfieldAddRange when begin & end is on the same word */ - tr_bitfieldRemRange (&field, 0, 64); - tr_bitfieldAddRange (&field, 4, 5); - for (i = 0; i < 64; ++i) - check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 5))); - - tr_bitfieldDestruct (&field); - return 0; + return 0; } static int test_strip_positional_args (void) { - const char * in; - const char * out; - const char * expected; + const char * in; + const char * out; + const char * expected; - in = "Hello %1$s foo %2$.*f"; - expected = "Hello %s foo %.*f"; - out = tr_strip_positional_args (in); - check_streq (expected, out); + in = "Hello %1$s foo %2$.*f"; + expected = "Hello %s foo %.*f"; + out = tr_strip_positional_args (in); + check_streq (expected, out); - in = "Hello %1$'d foo %2$'f"; - expected = "Hello %d foo %f"; - out = tr_strip_positional_args (in); - check_streq (expected, out); + in = "Hello %1$'d foo %2$'f"; + expected = "Hello %d foo %f"; + out = tr_strip_positional_args (in); + check_streq (expected, out); - return 0; + return 0; } static int test_strstrip (void) { - char *in, *out; + char *in, *out; - /* strstrip */ - in = tr_strdup (" test "); - out = tr_strstrip (in); - check (in == out); - check_streq ("test", out); - tr_free (in); + /* strstrip */ + in = tr_strdup (" test "); + out = tr_strstrip (in); + check (in == out); + check_streq ("test", out); + tr_free (in); - /* strstrip */ - in = tr_strdup (" test test "); - out = tr_strstrip (in); - check (in == out); - check_streq ("test test", out); - tr_free (in); + /* strstrip */ + in = tr_strdup (" test test "); + out = tr_strstrip (in); + check (in == out); + check_streq ("test test", out); + tr_free (in); - /* strstrip */ - in = tr_strdup ("test"); - out = tr_strstrip (in); - check (in == out); - check_streq ("test", out); - tr_free (in); + /* strstrip */ + in = tr_strdup ("test"); + out = tr_strstrip (in); + check (in == out); + check_streq ("test", out); + tr_free (in); - return 0; + return 0; } static int test_buildpath (void) { - char * out; + char * out; - out = tr_buildPath ("foo", "bar", NULL); - check_streq ("foo" TR_PATH_DELIMITER_STR "bar", out); - tr_free (out); + out = tr_buildPath ("foo", "bar", NULL); + check_streq ("foo" TR_PATH_DELIMITER_STR "bar", out); + tr_free (out); - out = tr_buildPath ("", "foo", "bar", NULL); - check_streq (TR_PATH_DELIMITER_STR "foo" TR_PATH_DELIMITER_STR "bar", out); - tr_free (out); + out = tr_buildPath ("", "foo", "bar", NULL); + check_streq (TR_PATH_DELIMITER_STR "foo" TR_PATH_DELIMITER_STR "bar", out); + tr_free (out); - return 0; + return 0; } static int test_utf8 (void) { - const char * in; - char * out; + const char * in; + char * out; - in = "hello world"; - out = tr_utf8clean (in, -1); - check_streq (in, out); - tr_free (out); + in = "hello world"; + out = tr_utf8clean (in, -1); + check_streq (in, out); + tr_free (out); - in = "hello world"; - out = tr_utf8clean (in, 5); - check_streq ("hello", out); - tr_free (out); + in = "hello world"; + out = tr_utf8clean (in, 5); + check_streq ("hello", out); + tr_free (out); - /* this version is not utf-8 */ - in = "Òðóäíî áûòü Áîãîì"; - out = tr_utf8clean (in, 17); - check (out != NULL); - check ((strlen (out) == 17) || (strlen (out) == 32)); - check (tr_utf8_validate (out, -1, NULL)); - tr_free (out); + /* this version is not utf-8 */ + in = "Òðóäíî áûòü Áîãîì"; + out = tr_utf8clean (in, 17); + check (out != NULL); + check ((strlen (out) == 17) || (strlen (out) == 32)); + check (tr_utf8_validate (out, -1, NULL)); + tr_free (out); - /* same string, but utf-8 clean */ - in = "Òðóäíî áûòü Ãîãîì"; - out = tr_utf8clean (in, -1); - check (out != NULL); - check (tr_utf8_validate (out, -1, NULL)); - check_streq (in, out); - tr_free (out); + /* same string, but utf-8 clean */ + in = "Òðóäíî áûòü Ãîãîì"; + out = tr_utf8clean (in, -1); + check (out != NULL); + check (tr_utf8_validate (out, -1, NULL)); + check_streq (in, out); + tr_free (out); - return 0; + return 0; } static int test_numbers (void) { - int i; - int count; - int * numbers; + int i; + int count; + int * numbers; - numbers = tr_parseNumberRange ("1-10,13,16-19", -1, &count); - check_int_eq (15, count); - check_int_eq (1, numbers[0]); - check_int_eq (6, numbers[5]); - check_int_eq (10, numbers[9]); - check_int_eq (13, numbers[10]); - check_int_eq (16, numbers[11]); - check_int_eq (19, numbers[14]); - tr_free (numbers); + numbers = tr_parseNumberRange ("1-10,13,16-19", -1, &count); + check_int_eq (15, count); + check_int_eq (1, numbers[0]); + check_int_eq (6, numbers[5]); + check_int_eq (10, numbers[9]); + check_int_eq (13, numbers[10]); + check_int_eq (16, numbers[11]); + check_int_eq (19, numbers[14]); + tr_free (numbers); - numbers = tr_parseNumberRange ("1-5,3-7,2-6", -1, &count); - check (count == 7); - check (numbers != NULL); - for (i=0; i= 0); - check (val < 100); + const int val = tr_cryptoRandInt (100); + check (val >= 0); + check (val < 100); } - return 0; + return 0; } -struct blah -{ - uint8_t hash[SHA_DIGEST_LENGTH]; /* pieces hash */ - int8_t priority; /* TR_PRI_HIGH, _NORMAL, or _LOW */ - int8_t dnd; /* "do not download" flag */ - time_t timeChecked; /* the last time we tested this piece */ -}; - int main (void) { - const testFunc tests[] = { - test_base64, test_hex, test_lowerbound, test_strip_positional_args, - test_strstrip, test_buildpath, test_utf8, test_numbers, test_memmem, - test_array, test_url, test_truncd, test_cryptoRand, - }; - int ret; - int l; + const testFunc tests[] = { test_array, + test_base64, + test_buildpath, + test_cryptoRand, + test_hex, + test_lowerbound, + test_memmem, + test_numbers, + test_strip_positional_args, + test_strstrip, + test_truncd, + test_url, + test_utf8 }; - if ((ret = runTests (tests, NUM_TESTS (tests)))) - return ret; - - /* simple bitfield tests */ - for (l = 0; l < NUM_LOOPS; ++l) - if ((ret = test_bitfields ())) - return ret; - - /* bitfield count range */ - for (l=0; l<10000; ++l) - if ((ret = test_bitfield_count_range ())) - return ret; - - return 0; + return runTests (tests, NUM_TESTS (tests)); }