📄 regression.c
字号:
nerrors += Verify(__FILE__, __LINE__, " 0.0001", "%11.5g", 1e-4); nerrors += Verify(__FILE__, __LINE__, " 0.001", "%11.5g", 1e-3); nerrors += Verify(__FILE__, __LINE__, " 0.01", "%11.5g", 1e-2); nerrors += Verify(__FILE__, __LINE__, " 0.1", "%11.5g", 1e-1); nerrors += Verify(__FILE__, __LINE__, " 1", "%11.5g", 1e0); nerrors += Verify(__FILE__, __LINE__, " 10", "%11.5g", 1e1); nerrors += Verify(__FILE__, __LINE__, " 100", "%11.5g", 1e2); nerrors += Verify(__FILE__, __LINE__, " 1000", "%11.5g", 1e3); nerrors += Verify(__FILE__, __LINE__, " 10000", "%11.5g", 1e4); nerrors += Verify(__FILE__, __LINE__, " 1e+05", "%11.5g", 1e5); nerrors += Verify(__FILE__, __LINE__, " 9.9e-05", "%11.2g", 0.99e-4); nerrors += Verify(__FILE__, __LINE__, " 0.00099", "%11.2g", 0.99e-3); nerrors += Verify(__FILE__, __LINE__, " 0.0099", "%11.2g", 0.99e-2); nerrors += Verify(__FILE__, __LINE__, " 0.099", "%11.2g", 0.99e-1); nerrors += Verify(__FILE__, __LINE__, " 0.99", "%11.2g", 0.99e0); nerrors += Verify(__FILE__, __LINE__, " 9.9", "%11.2g", 0.99e1); nerrors += Verify(__FILE__, __LINE__, " 99", "%11.2g", 0.99e2); nerrors += Verify(__FILE__, __LINE__, " 9.9e+02", "%11.2g", 0.99e3); nerrors += Verify(__FILE__, __LINE__, " 9.9e+03", "%11.2g", 0.99e4); nerrors += Verify(__FILE__, __LINE__, " 9.9e+04", "%11.2g", 0.99e5); /* Double width, precision, and alternative */ nerrors += Verify(__FILE__, __LINE__, " 1.0000e-05", "%#11.5g", 1e-5); nerrors += Verify(__FILE__, __LINE__, " 0.00010000", "%#11.5g", 1e-4); nerrors += Verify(__FILE__, __LINE__, " 0.0010000", "%#11.5g", 1e-3); nerrors += Verify(__FILE__, __LINE__, " 0.010000", "%#11.5g", 1e-2); nerrors += Verify(__FILE__, __LINE__, " 0.10000", "%#11.5g", 1e-1); nerrors += Verify(__FILE__, __LINE__, " 1.0000", "%#11.5g", 1e0); nerrors += Verify(__FILE__, __LINE__, " 10.000", "%#11.5g", 1e1); nerrors += Verify(__FILE__, __LINE__, " 100.00", "%#11.5g", 1e2); nerrors += Verify(__FILE__, __LINE__, " 1000.0", "%#11.5g", 1e3); nerrors += Verify(__FILE__, __LINE__, " 10000.", "%#11.5g", 1e4); nerrors += Verify(__FILE__, __LINE__, " 1.0000e+05", "%#11.5g", 1e5); nerrors += Verify(__FILE__, __LINE__, " 9.9e-05", "%#11.2g", 0.99e-4); nerrors += Verify(__FILE__, __LINE__, " 0.00099", "%#11.2g", 0.99e-3); nerrors += Verify(__FILE__, __LINE__, " 0.0099", "%#11.2g", 0.99e-2); nerrors += Verify(__FILE__, __LINE__, " 0.099", "%#11.2g", 0.99e-1); nerrors += Verify(__FILE__, __LINE__, " 0.99", "%#11.2g", 0.99e0); nerrors += Verify(__FILE__, __LINE__, " 9.9", "%#11.2g", 0.99e1); nerrors += Verify(__FILE__, __LINE__, " 99.", "%#11.2g", 0.99e2); nerrors += Verify(__FILE__, __LINE__, " 9.9e+02", "%#11.2g", 0.99e3); nerrors += Verify(__FILE__, __LINE__, " 9.9e+03", "%#11.2g", 0.99e4); nerrors += Verify(__FILE__, __LINE__, " 9.9e+04", "%#11.2g", 0.99e5); /* Double width, precision, and zero padding */ nerrors += Verify(__FILE__, __LINE__, "00003.141500e+03", "%016e", 3141.5); nerrors += Verify(__FILE__, __LINE__, " 3.141500e+03", "%16e", 3141.5); nerrors += Verify(__FILE__, __LINE__, "3.141500e+03 ", "%-16e", 3141.5); nerrors += Verify(__FILE__, __LINE__, "03.142e+03", "%010.3e", 3141.5);#if !defined(TRIO_COMPILER_ANCIENT) /* Long double */ nerrors += Verify(__FILE__, __LINE__, "1.400000", "%Lf", 1.4L);#endif /* Special cases */ nerrors += Verify(__FILE__, __LINE__, "1.00", "%.2f", 0.999); nerrors += Verify(__FILE__, __LINE__, "100", "%.0f", 99.9); nerrors += Verify(__FILE__, __LINE__, "inf", "%f", trio_pinf()); nerrors += Verify(__FILE__, __LINE__, "-inf", "%f", trio_ninf()); nerrors += Verify(__FILE__, __LINE__, "INF", "%F", trio_pinf()); nerrors += Verify(__FILE__, __LINE__, "-INF", "%F", trio_ninf()); /* May fail if NaN is unsupported */ nerrors += Verify(__FILE__, __LINE__, "nan", "%f", trio_nan()); nerrors += Verify(__FILE__, __LINE__, "NAN", "%F", trio_nan());#endif /* TRIO_FEATURE_FLOAT */ /* Char width alignment */ nerrors += Verify(__FILE__, __LINE__, "Char X .", "Char %-4c.", 'X'); /* String width / precision */ nerrors += Verify(__FILE__, __LINE__, " testing", "%8s", "testing"); nerrors += Verify(__FILE__, __LINE__, "testing ", "%-8s", "testing"); nerrors += Verify(__FILE__, __LINE__, " testing", "%*s", 8, "testing"); nerrors += Verify(__FILE__, __LINE__, "testing ", "%*s", -8, "testing"); nerrors += Verify(__FILE__, __LINE__, "test", "%.4s", "testing"); nerrors += Verify(__FILE__, __LINE__, "test", "%.*s", 4, "testing"); nerrors += Verify(__FILE__, __LINE__, "testing", "%.*s", -4, "testing");#if TRIO_FEATURE_POSITIONAL /* Positional */ nerrors += Verify(__FILE__, __LINE__, "222 111", "%2$s %1$s", "111", "222"); nerrors += Verify(__FILE__, __LINE__, "123456 12345 0001234 00123", "%4$d %3$*8$d %2$.*7$d %1$*6$.*5$d", 123, 1234, 12345, 123456, 5, 6, 7, 8);#endif #if TRIO_FEATURE_SIZE_T_UPPER nerrors += Verify(__FILE__, __LINE__, "256", "%Zd", sizeof(buffer));#endif#if TRIO_FEATURE_ERRNO errno = EINTR; nerrors += Verify(__FILE__, __LINE__, "Interrupted system call", "%m");#endif #if TRIO_FEATURE_QUAD# if defined(TRIO_COMPILER_SUPPORTS_LL) /* This may fail if the preprocessor does not recognize LL */ nerrors += Verify(__FILE__, __LINE__, "42", "%qd", 42LL);# endif#endif #if TRIO_FEATURE_FLOAT# if TRIO_FEATURE_HEXFLOAT nerrors += Verify(__FILE__, __LINE__, "0x2.ap+4", "%a", 42.0); nerrors += Verify(__FILE__, __LINE__, "-0x2.ap+4", "%a", -42.0); nerrors += Verify(__FILE__, __LINE__, "0x1.8p+0", "%a", 1.5); nerrors += Verify(__FILE__, __LINE__, "0x1.6666666666666p+0", "%a", 1.4); nerrors += Verify(__FILE__, __LINE__, "0xc.45p+8", "%a", 3141.0); nerrors += Verify(__FILE__, __LINE__, "0XC.45P+8", "%A", 3141.0); nerrors += Verify(__FILE__, __LINE__, "0xb.351c434a98fa8p-148", "%a", 3.141e-44);# endif#endif#if TRIO_FEATURE_SIZE_T nerrors += Verify(__FILE__, __LINE__, "256", "%zd", sizeof(buffer));#endif#if TRIO_FEATURE_PTRDIFF_T nerrors += Verify(__FILE__, __LINE__, "42", "%td", 42);#endif#if TRIO_FEATURE_INTMAX_T# if defined(TRIO_COMPILER_SUPPORTS_LL) /* Some compilers may not handle the LL suffix correctly */ nerrors += Verify(__FILE__, __LINE__, "42", "%jd", 42LL);# endif#endif#if TRIO_FEATURE_WIDECHAR nerrors += Verify(__FILE__, __LINE__, "Hello World", "%ls", L"Hello World"); nerrors += Verify(__FILE__, __LINE__, "\\aHello World", "%#ls", L"\aHello World"); nerrors += Verify(__FILE__, __LINE__, "A", "%lc", L'A'); nerrors += Verify(__FILE__, __LINE__, "\\a", "%#lc", L'\a');#endif#if TRIO_FEATURE_FIXED_SIZE nerrors += Verify(__FILE__, __LINE__, "42", "%I8d", 42); nerrors += Verify(__FILE__, __LINE__, "ffffffff", "%I16x", -1);#endif #if TRIO_EXTENSION nerrors += Verify(__FILE__, __LINE__, " 42 86", "%!4d %d", 42, 86); nerrors += Verify(__FILE__, __LINE__, "0042 0086", "%!04d %d", 42, 86); nerrors += Verify(__FILE__, __LINE__, "42", "%&d", sizeof(long), 42L); /* Non-printable string */ nerrors += Verify(__FILE__, __LINE__, "NonPrintable \\x01 \\a \\\\", "NonPrintable %#s", "\01 \07 \\"); nerrors += Verify(__FILE__, __LINE__, "\\a \\b \\t \\n \\v \\f \\r", "%#s", "\007 \010 \011 \012 \013 \014 \015"); /* Quote flag */ nerrors += Verify(__FILE__, __LINE__, "Another \"quoted\" string", "Another %'s string", "quoted"); /* Integer base */ nerrors += Verify(__FILE__, __LINE__, "Number 42 == 1120 (base 3)", "Number %d == %..3i (base 3)", 42, 42); /* Integer base (specifier base must be used instead of base modifier) */ nerrors += Verify(__FILE__, __LINE__, "42", "%..3d", 42); nerrors += Verify(__FILE__, __LINE__, "52", "%..3o", 42); nerrors += Verify(__FILE__, __LINE__, "2a", "%..3x", 42); /* Integer thousand separator */ nerrors += Verify(__FILE__, __LINE__, "Number 100", "Number %'d", 100); nerrors += Verify(__FILE__, __LINE__, "Number 1,000,000", "Number %'d", 1000000);# if TRIO_FEATURE_FLOAT /* Float thousand separator */ nerrors += Verify(__FILE__, __LINE__, "31,415.200000", "%'f", 31415.2); nerrors += Verify(__FILE__, __LINE__, "1,000,000.000000", "%'f", 1000000.0); /* Rounding modifier */ nerrors += Verify(__FILE__, __LINE__, "1.4", "%.32Rf", 1.4); nerrors += Verify(__FILE__, __LINE__, "1.4", "%.17Rf", 1.4); nerrors += Verify(__FILE__, __LINE__, "39413.8", "%.30Rf", 39413.80);# if !defined(TRIO_COMPILER_ANCIENT) /* Long double */ nerrors += Verify(__FILE__, __LINE__, "1.4", "%RLf", 1.4L); nerrors += Verify(__FILE__, __LINE__, "1.4", "%.30RLf", 1.4L);# endif# endif#endif#if defined(TRIO_BREESE) /* * These results depends on issues beyond our control. For example, * the accuracy of floating-point numbers depends on the underlying * floating-point hardware (e.g. whether IEEE 754 double or extended- * double format is used). * * These tests are therefore not part of the normal regression test, * but we keep them here for development purposes. */ nerrors += Verify(__FILE__, __LINE__, "123456789012345680868.000000", "%f", 1.234567890123456789e20); nerrors += Verify(__FILE__, __LINE__, "1.23456789012345677901e-20", "%.20e", 1.2345678901234567e-20); nerrors += Verify(__FILE__, __LINE__, "0.666666666666666629659233", "%.*g", DBL_DIG + 10, 2.0/3.0); nerrors += Verify(__FILE__, __LINE__, "123456789012345700000", "%Rf", 1.234567890123456789e20);# if !defined(TRIO_COMPILER_ANCIENT) nerrors += Verify(__FILE__, __LINE__, "0.666666666666666667", "%RLf", (2.0L/3.0L)); nerrors += Verify(__FILE__, __LINE__, "0.666666666666666667", "%.30RLf", (2.0L/3.0L));# endif#endif return nerrors;}/************************************************************************* * */intVerifyErrors(TRIO_NOARGS){ char buffer[512]; int rc; int nerrors = 0; /* Error: Invalid argument 1 */ rc = trio_snprintf(buffer, sizeof(buffer), "%d %r", 42, "text");#if TRIO_FEATURE_ERRORCODE# if TRIO_FEATURE_STRERR trio_snprintf(buffer, sizeof(buffer), "Err = %d (%s), Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_NAME(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2 (Invalid argument), Pos = 5", "%s", buffer);# else trio_snprintf(buffer, sizeof(buffer), "Err = %d, Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2, Pos = 5", "%s", buffer);# endif#else nerrors += (rc != -1);#endif /* Error: Invalid argument 2 */ rc = trio_snprintf(buffer, sizeof(buffer), "%#");#if TRIO_FEATURE_ERRORCODE# if TRIO_FEATRUE_STRERR trio_snprintf(buffer, sizeof(buffer), "Err = %d (%s), Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_NAME(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2 (Invalid argument), Pos = 3", "%s", buffer);# else trio_snprintf(buffer, sizeof(buffer), "Err = %d, Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2, Pos = 3", "%s", buffer);# endif#else nerrors += (rc != -1);#endif /* Error: Invalid argument 3 */ rc = trio_snprintf(buffer, sizeof(buffer), "%hhhd", 42);#if TRIO_FEATURE_ERRORCODE# if TRIO_FEATRUE_STRERR trio_snprintf(buffer, sizeof(buffer), "Err = %d (%s), Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_NAME(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2 (Invalid argument), Pos = 4", "%s", buffer);# else trio_snprintf(buffer, sizeof(buffer), "Err = %d, Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_POSITION(rc)); nerrors += Verify(__FILE__, __LINE__, "Err = 2, Pos = 4", "%s", buffer);# endif#else nerrors += (rc != -1);#endif /* Error: Double reference */ rc = trio_snprintf(buffer, sizeof(buffer), "hello %1$d %1$d", 31, 32);#if TRIO_FEATURE_ERRORCODE# if TRIO_FEATRUE_STRERR trio_snprintf(buffer, sizeof(buffer), "Err = %d (%s), Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_NAME(rc), TRIO_ERROR_POSITION(rc));# if TRIO_UNIX98 nerrors += Verify(__FILE__, __LINE__, "Err = 4 (Double reference), Pos = 0", "%s", buffer);# else nerrors += Verify(__FILE__, __LINE__, "Err = 2 (Invalid argument), Pos = 9", "%s", buffer);# endif# else trio_snprintf(buffer, sizeof(buffer), "Err = %d, Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_POSITION(rc));# if TRIO_UNIX98 nerrors += Verify(__FILE__, __LINE__, "Err = 4, Pos = 0", "%s", buffer);# else nerrors += Verify(__FILE__, __LINE__, "Err = 2, Pos = 9", "%s", buffer);# endif# endif#else nerrors += (rc != -1);#endif /* Error: Reference gap */ rc = trio_snprintf(buffer, sizeof(buffer), "%3$d %1$d", 31, 32, 33);#if TRIO_FEATURE_ERRORCODE# if TRIO_FEATRUE_STRERR trio_snprintf(buffer, sizeof(buffer), "Err = %d (%s), Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_NAME(rc), TRIO_ERROR_POSITION(rc));# if TRIO_UNIX98 nerrors += Verify(__FILE__, __LINE__, "Err = 5 (Reference gap), Pos = 1", "%s", buffer);# else nerrors += Verify(__FILE__, __LINE__, "Err = 2 (Invalid argument), Pos = 3", "%s", buffer);# endif# else trio_snprintf(buffer, sizeof(buffer), "Err = %d, Pos = %d", TRIO_ERROR_CODE(rc), TRIO_ERROR_POSITION(rc));# if TRIO_UNIX98 nerrors += Verify(__FILE__, __LINE__, "Err = 5, Pos = 1", "%s", buffer);# else nerrors += Verify(__FILE__, __LINE__, "Err = 2, Pos = 3", "%s", buffer);# endif# endif#else nerrors += (rc != -1);#endif return nerrors;}/************************************************************************* * */#if TRIO_FEATURE_SCANFintVerifyScanningOneIntegerTRIO_ARGS5((file, line, expected, format, original), TRIO_CONST char *file, int line, TRIO_CONST char *expected, TRIO_CONST char *format, int original){ int number; char data[512]; trio_snprintf(data, sizeof(data), format, original); trio_sscanf(data, format, &number); return Verify(file, line, expected, format, number);}intVerifyScanningIntegers(TRIO_NOARGS){ int nerrors = 0; nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "42", "%i", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "42", "%d", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "-42", "%d", -42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "2147483647", "%d", 2147483647); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "42", "%u", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "2a", "%x", 42); nerrors += VerifyScanningOneInteger(__FILE__, __LINE__, "52",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -