📄 regression.c
字号:
"%o", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "101010", "%..2i", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "0x2a", "%#x", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "052", "%#o", 42); return nerrors;}#endif/************************************************************************* * */#if TRIO_FEATURE_SCANFintVerifyScanningOneFloatTRIO_ARGS5((file, line, expected, format, original), TRIO_CONST char *file, int line, TRIO_CONST char *expected, TRIO_CONST char *format, double original){ double number; char data[512]; trio_snprintf(data, sizeof(data), format, original); trio_sscanf(data, format, &number); return Verify(file, line, expected, format, number);}intVerifyScanningFloats(TRIO_NOARGS){ int nerrors = 0;#if TRIO_FEATURE_FLOAT nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "42.000000", "%f", 42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "-42.000000", "%f", -42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "4.200000e+01", "%e", 42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "4.200000E+01", "%E", 42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "42", "%g", 42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.23457e+06", "%g", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.23457e-06", "%g", 1.234567e-6); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.23457E+06", "%G", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.234567e+06", "%12e", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.234500e+00", "%6e", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.234567e+06", "%.6e", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.2345670000e+06", "%.10e", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.23457e+06", "%.6g", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1234567", "%.10g", 1234567.0);# if TRIO_FEATURE_HEXFLOAT nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "0x2.ap+4", "%a", 42.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "0x1.2d687p+20", "%a", 1234567.0); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "0X1.2D687P+20", "%A", 1234567.0);# endif nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "1.79769e+308", "%g", 1.79769e+308); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "nan", "%f", trio_nan()); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "NAN", "%F", trio_nan()); nerrors += VerifyScanningOneFloat(__FILE__, __LINE__, "-inf", "%f", trio_ninf());#endif return nerrors;}#endif/************************************************************************* * */#if TRIO_FEATURE_SCANFintVerifyScanningOneStringTRIO_ARGS5((file, line, expected, format, original), TRIO_CONST char *file, int line, TRIO_CONST char *expected, TRIO_CONST char *format, char *original){ char string[512]; char data[512]; trio_snprintf(data, sizeof(data), "%s", original); trio_sscanf(data, format, string); return Verify(file, line, expected, "%s", string);}intVerifyScanningStrings(TRIO_NOARGS){ int nerrors = 0; nerrors += VerifyScanningOneString(__FILE__, __LINE__, "hello", "%s", "hello"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "hello", "%s", "hello world"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "hello world", "%[^\n]", "hello world"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "(nil)", "%s", NULL); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "hello", "%20s", "hello"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "he", "%2s", "hello"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "ab", "%[ab]", "abcba"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "abcba", "%[abc]", "abcba"); nerrors += VerifyScanningOneString(__FILE__, __LINE__, "abcba", "%[a-c]", "abcba");#if TRIO_EXTENSION nerrors += VerifyScanningOneString(__FILE__, __LINE__, "abcba", "%[[:alpha:]]", "abcba");#endif nerrors += VerifyScanningOneString(__FILE__, __LINE__, "ba", "%*[ab]c%[^\n]", "abcba"); return nerrors;}#endif/************************************************************************* * */#if TRIO_FEATURE_SCANFintVerifyScanningRegression(TRIO_NOARGS){ int nerrors = 0; int rc;#if TRIO_FEATURE_FLOAT int index; double dnumber;# if defined(TRIO_BREESE) trio_long_double_t ldnumber;# endif#endif long lnumber; int number; char ch;#if TRIO_FEATURE_FLOAT rc = trio_sscanf("1.5", "%lf%n", &dnumber, &index); nerrors += Verify(__FILE__, __LINE__, "1 3 1.500000", "%d %d %f", rc, index, dnumber);#endif rc = trio_sscanf("q 123", "%c%ld", &ch, &lnumber); nerrors += Verify(__FILE__, __LINE__, "q 123", "%c %ld", ch, lnumber); rc = trio_sscanf("abc", "%*s%n", &number); nerrors += Verify(__FILE__, __LINE__, "0 3", "%d %d", rc, number); rc = trio_sscanf("abc def", "%*s%n", &number); nerrors += Verify(__FILE__, __LINE__, "0 3", "%d %d", rc, number);#if TRIO_FEATURE_FLOAT rc = trio_sscanf("0.141882295971771490", "%lf", &dnumber); /* FIXME: Verify */#endif number = 33; rc = trio_sscanf("total 1", "total %d", &number); nerrors += Verify(__FILE__, __LINE__, "1 1", "%d %d", rc, number);#if defined(TRIO_BREESE)# if TRIO_FEATURE_FLOAT nerrors += Verify(__FILE__, __LINE__, "1 0.141882295971771488", "%d %.18f", rc, dnumber); rc = trio_sscanf("0.141882295971771490", "%Lf", &ldnumber); nerrors += Verify(__FILE__, __LINE__, "1 0.141882295971771490", "%d %.18Lf", rc, ldnumber);# endif#endif#if TRIO_FEATURE_FLOAT rc = trio_sscanf("1.e-6", "%g", &dnumber); nerrors += Verify(__FILE__, __LINE__, "1e-06", "%g", dnumber); rc = trio_sscanf("1e-6", "%g", &dnumber); nerrors += Verify(__FILE__, __LINE__, "1e-06", "%g", dnumber);#endif return nerrors;}#endif/************************************************************************* * */intVerifyScanning(TRIO_NOARGS){ int nerrors = 0;#if TRIO_FEATURE_SCANF nerrors += VerifyScanningIntegers(); nerrors += VerifyScanningFloats(); nerrors += VerifyScanningStrings(); nerrors += VerifyScanningRegression();#endif return nerrors;}/************************************************************************* * */intVerifyStrings(TRIO_NOARGS){ int nerrors = 0;#if !defined(TRIO_MINIMAL) char buffer[512];#if TRIO_FEATURE_FLOAT double dnumber; float fnumber;#endif char *end; /* Comparison */ trio_copy(buffer, "Find me now"); if (trio_length(buffer) != sizeof("Find me now") - 1) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_equal(buffer, "Find me now")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_equal_case(buffer, "Find me now")) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_equal_case(buffer, "FIND ME NOW")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_equal_max(buffer, sizeof("Find me") - 1, "Find ME")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_contains(buffer, "me")) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_contains(buffer, "and me")) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_substring(buffer, "me") == NULL) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_substring_max(buffer, 4, "me") != NULL) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_match(buffer, "* me *")) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_match_case(buffer, "* ME *")) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_index(buffer, 'n') == NULL) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_index(buffer, '_') != NULL) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_index_last(buffer, 'n') == NULL) { nerrors++; Report0(__FILE__, __LINE__); } /* Append */ trio_copy(buffer, "Find me now"); if (!trio_append(buffer, " and again")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_equal(buffer, "Find me now and again")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_append_max(buffer, 0, "should not appear")) { nerrors++; Report0(__FILE__, __LINE__); } if (!trio_equal(buffer, "Find me now and again")) { nerrors++; Report0(__FILE__, __LINE__); } /* To upper/lower */ trio_copy(buffer, "Find me now"); trio_upper(buffer); if (!trio_equal_case(buffer, "FIND ME NOW")) { nerrors++; Report0(__FILE__, __LINE__); } trio_lower(buffer); if (!trio_equal_case(buffer, "find me now")) { nerrors++; Report0(__FILE__, __LINE__); }#if TRIO_FEATURE_FLOAT /* Double conversion */ trio_copy(buffer, "3.1415"); dnumber = trio_to_double(buffer, NULL); if (!DOUBLE_EQUAL(dnumber, 3.1415)) { nerrors++; Report0(__FILE__, __LINE__); } fnumber = trio_to_float(buffer, NULL); if (!FLOAT_EQUAL(fnumber, 3.1415)) { nerrors++; Report0(__FILE__, __LINE__); }#endif /* Long conversion */ trio_copy(buffer, "3.1415"); if (trio_to_long(buffer, NULL, 10) != 3L) { nerrors++; Report0(__FILE__, __LINE__); } if (trio_to_long(buffer, NULL, 4) != 3L) { nerrors++; Report0(__FILE__, __LINE__); } trio_to_long(buffer, &end, 2); if (end != buffer) { nerrors++; Report0(__FILE__, __LINE__); } #endif /* !defined(TRIO_MINIMAL) */ return nerrors;}/************************************************************************* * */intVerifyDynamicStrings(TRIO_NOARGS){ int nerrors = 0;#if !defined(TRIO_MINIMAL) trio_string_t *string; string = trio_xstring_duplicate("Find me now"); if (string == NULL) { nerrors++; goto error; } if (!trio_xstring_equal(string, "FIND ME NOW")) nerrors++; if (!trio_xstring_append(string, " and again") || !trio_xstring_equal(string, "FIND ME NOW AND AGAIN")) nerrors++; if (!trio_xstring_contains(string, "me")) nerrors++; if (trio_xstring_contains(string, "ME")) nerrors++; if (!trio_xstring_match(string, "* me *")) nerrors++; if (trio_xstring_match_case(string, "* ME *")) nerrors++; error: if (string) trio_string_destroy(string); #endif /* !defined(TRIO_MINIMAL) */ return nerrors;}/************************************************************************* * */intVerifyNaN(TRIO_NOARGS){ double ninf_number = trio_ninf(); double pinf_number = trio_pinf(); double nan_number = trio_nan(); int nerrors = 0; nerrors += Verify(__FILE__, __LINE__, "-1", "%d", trio_isinf(ninf_number)); nerrors += Verify(__FILE__, __LINE__, "0", "%d", trio_isinf(42.0)); nerrors += Verify(__FILE__, __LINE__, "1", "%d", trio_isinf(pinf_number)); nerrors += Verify(__FILE__, __LINE__, "1", "%d", trio_isnan(nan_number)); nerrors += Verify(__FILE__, __LINE__, "0", "%d", trio_isnan(42.0)); return nerrors;}/************************************************************************* * */intmain(TRIO_NOARGS){ int nerrors = 0; printf("%s\n", rcsid);#if TRIO_EXTENSION /* Override system locale settings */ trio_locale_set_decimal_point("."); trio_locale_set_thousand_separator(","); trio_locale_set_grouping("\3");#endif printf("Verifying strings\n"); nerrors += VerifyStrings(); printf("Verifying dynamic strings\n"); nerrors += VerifyDynamicStrings(); printf("Verifying special quantities\n"); nerrors += VerifyNaN(); printf("Verifying formatting\n"); nerrors += VerifyFormatting(); printf("Verifying scanning\n"); nerrors += VerifyScanning(); printf("Verifying return values\n"); nerrors += VerifyErrors(); nerrors += VerifyReturnValues(); printf("Verifying allocation\n"); nerrors += VerifyAllocate(); if (nerrors == 0) printf("Regression test suceeded\n"); else printf("Regression test failed in %d instance(s)\n", nerrors); return nerrors ? 1 : 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -