X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=tests%2Fstrutil.c;h=ec2233329b769c5eecc9597bdeb6d8e7564f4694;hp=a629486de045a58f86948be5a97570854bb575f2;hb=2622b4297fd4cc4bed5c06bb6ae0aaa8b40e0ece;hpb=d9b716fc5fcd9f9e7e663d5c8fcdbada9cbd94d8 diff --git a/tests/strutil.c b/tests/strutil.c index a629486d..ec223332 100644 --- a/tests/strutil.c +++ b/tests/strutil.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include "lib.h" @@ -37,9 +38,10 @@ static void test_vsnprintf(const char *expected, char *format, ...) len = vsnprintf(s, len, format, args); va_end(args); - fail_unless(s != NULL, "len = %i, s = s", len); + fail_unless(s != NULL, + "Invalid result for '%s': len = %i.", expected, len); fail_unless(!strcmp(s, expected), - "Invalid result for '%s': %s.", expected, s); + "Invalid result for '%s': %s.", expected, s); g_free(s); } #endif @@ -57,7 +59,32 @@ static void test_sr_vsnprintf_ascii(const char *expected, char *format, ...) len = sr_vsnprintf_ascii(s, len, format, args); va_end(args); - fail_unless(s != NULL, "len = %i, s = s", len); + fail_unless(s != NULL, + "Invalid result for '%s': len = %i.", expected, len); + fail_unless(!strcmp(s, expected), + "Invalid result for '%s': %s.", expected, s); + g_free(s); +} + +static void test_sr_vsprintf_ascii(const char *expected, char *format, ...) +{ + va_list args, args_copy; + char *s; + int len; + + /* Get length of buffer required. */ + va_start(args, format); + va_copy(args_copy, args); + len = sr_vsnprintf_ascii(NULL, 0, format, args); + va_end(args); + + /* Allocate buffer and write out command. */ + s = g_malloc0(len + 1); + len = sr_vsprintf_ascii(s, format, args_copy); + va_end(args_copy); + + fail_unless(s != NULL, + "Invalid result for '%s': len = %i.", expected, len); fail_unless(!strcmp(s, expected), "Invalid result for '%s': %s.", expected, s); g_free(s); @@ -91,12 +118,22 @@ static void test_rational(const char *input, struct sr_rational expected) struct sr_rational rational; ret = sr_parse_rational(input, &rational); - fail_unless(ret == SR_OK); + fail_unless(ret == SR_OK, "Unexpected rc for '%s': %d, errno %d.", + input, ret, errno); fail_unless((expected.p == rational.p) && (expected.q == rational.q), "Invalid result for '%s': %ld/%ld'.", input, rational.p, rational.q); } +static void test_rational_fail(const char *input) +{ + int ret; + struct sr_rational rational; + + ret = sr_parse_rational(input, &rational); + fail_unless(ret != SR_OK, "Unexpected success for '%s'.", input); +} + static void test_voltage(uint64_t v_p, uint64_t v_q, const char *expected) { char *s; @@ -117,7 +154,7 @@ START_TEST(test_locale) fprintf(stderr, "Old locale = %s\n", old_locale); /* Copy the name so it won’t be clobbered by setlocale. */ saved_locale = g_strdup(old_locale); - ck_assert_msg(saved_locale != NULL); + ck_assert(saved_locale != NULL); #ifdef _WIN32 /* @@ -144,6 +181,13 @@ START_TEST(test_locale) test_sr_vsnprintf_ascii("0.12345", "%.5f", (double)0.12345); test_sr_vsnprintf_ascii("0.123456", "%.6f", (double)0.123456); + test_sr_vsprintf_ascii("0.1", "%.1f", (double)0.1); + test_sr_vsprintf_ascii("0.12", "%.2f", (double)0.12); + test_sr_vsprintf_ascii("0.123", "%.3f", (double)0.123); + test_sr_vsprintf_ascii("0.1234", "%.4f", (double)0.1234); + test_sr_vsprintf_ascii("0.12345", "%.5f", (double)0.12345); + test_sr_vsprintf_ascii("0.123456", "%.6f", (double)0.123456); + #if 0 /* * These tests can be used to tell on which platforms the printf() @@ -353,6 +397,16 @@ START_TEST(test_fractional) test_rational("+.1", (struct sr_rational){1, 10}); test_rational("-0.1", (struct sr_rational){-1, 10}); test_rational("-.1", (struct sr_rational){-1, 10}); + test_rational(".1", (struct sr_rational){1, 10}); + test_rational(".123", (struct sr_rational){123, 1000}); + test_rational("1.", (struct sr_rational){1, 1}); + test_rational("123.", (struct sr_rational){123, 1}); + test_rational("-.1", (struct sr_rational){-1, 10}); + test_rational(" .1", (struct sr_rational){1, 10}); + test_rational("+.1", (struct sr_rational){1, 10}); + test_rational_fail("."); + test_rational_fail(".e"); + test_rational_fail(".e1"); } END_TEST