equal/hKis/test/testformat.c
2022-10-25 18:36:19 +08:00

140 lines
3.9 KiB
C

#include "test.h"
#include <string.h>
#include <strings.h>
#include "../src/arena.h"
#include "../src/vector.h"
static void
test_format (void)
{
format format;
memset (&format, 0, sizeof format);
(void) kissat_next_format_string (&format); // coverage ...
#define FORMAT(TYPE,EXPR,EXPECTED) \
do { \
const char * RES = kissat_format_ ## TYPE (&format, EXPR); \
if (strcmp (RES, EXPECTED)) \
FATAL ("kissat_format_" #TYPE " (.., " #EXPR ") = \"%s\" but expected \"%s\"", RES, EXPECTED); \
printf ("kissat_format_" #TYPE " (.., " #EXPR ") = \"%s\" as expected\n", RES); \
} while (0)
#define FORMAT_signs(SIZE,SIGNS,EXPECTED) \
do { \
const char * RES = kissat_format_signs (&format, SIZE, SIGNS); \
if (strcmp (RES, EXPECTED)) \
FATAL ("kissat_format_signs (.., " #SIZE ", " #SIGNS ") = \"%s\" but expected \"%s\"", RES, EXPECTED); \
printf ("kissat_format_signs (.., " #SIZE ", " #SIGNS ") = \"%s\" as expected\n", RES); \
} while (0)
FORMAT (count, 0, "0");
FORMAT (count, 1, "1");
FORMAT (count, 42, "42");
FORMAT (count, 64, "64");
FORMAT (count, 128, "2^7");
FORMAT (count, 1024, "2^10");
FORMAT (count, 1073741824, "2^30");
char expected[80];
sprintf (expected, "2^%u", LD_MAX_ARENA);
FORMAT (count, MAX_ARENA, expected);
sprintf (expected, "2^%u", LD_MAX_VECTORS);
FORMAT (count, MAX_VECTORS, expected);
FORMAT (count, 10, "10");
FORMAT (count, 100, "100");
FORMAT (count, 1e3, "1e3");
FORMAT (count, 1e4, "1e4");
FORMAT (count, 1e6, "1e6");
FORMAT (count, 1e9, "1e9");
FORMAT (bytes, 999, "999 bytes");
FORMAT (bytes, 2050, "2050 bytes (2 KB)");
FORMAT (bytes, 2150400, "2150400 bytes (2 MB)");
FORMAT (bytes, 175000000, "175000000 bytes (167 MB)");
FORMAT (bytes, 4000000000u, "4000000000 bytes (4 GB)");
FORMAT (time, 0, "0s");
FORMAT (time, 1, "1s");
FORMAT (time, 61, "1m 1s");
FORMAT (time, 3600, "1h");
FORMAT (time, 3601, "1h 1s");
FORMAT (time, 3661, "1h 1m 1s");
FORMAT (time, 86400, "1d");
FORMAT (time, 86405, "1d 5s");
FORMAT (time, 86476, "1d 1m 16s");
FORMAT (time, 108000, "1d 6h");
FORMAT (time, 108001, "1d 6h 1s");
FORMAT (time, 108180, "1d 6h 3m");
FORMAT (time, 108127, "1d 6h 2m 7s");
FORMAT (time, (uint64_t) 86400 * 30, "30d");
FORMAT (time, (uint64_t) 86400 * 365, "365d");
FORMAT_signs (0, 0, "");
FORMAT_signs (1, 0, "0");
FORMAT_signs (4, 0, "0000");
FORMAT_signs (1, 1, "1");
FORMAT_signs (4, 1, "1000");
FORMAT_signs (4, 2, "0100");
FORMAT_signs (4, 4, "0010");
FORMAT_signs (4, 8, "0001");
FORMAT_signs (4, 3, "1100");
FORMAT_signs (4, 9, "1001");
FORMAT_signs (4, 6, "0110");
FORMAT_signs (4, 12, "0011");
FORMAT_signs (8, 255, "11111111");
FORMAT (ordinal, 0, "0th");
FORMAT (ordinal, 1, "1st");
FORMAT (ordinal, 2, "2nd");
FORMAT (ordinal, 3, "3rd");
FORMAT (ordinal, 4, "4th");
FORMAT (ordinal, 9, "9th");
FORMAT (ordinal, 10, "10th");
FORMAT (ordinal, 11, "11th");
FORMAT (ordinal, 21, "21st");
FORMAT (ordinal, 22, "22nd");
FORMAT (ordinal, 23, "23rd");
FORMAT (ordinal, 24, "24th");
FORMAT (ordinal, 2011, "2011th");
FORMAT (ordinal, 2021, "2021st");
#undef FORMAT
#define FORMAT(EXPR,BOOLEAN,EXPECTED) \
do { \
const char * res = kissat_format_value (&format, BOOLEAN, EXPR); \
if (strcmp (res, EXPECTED)) \
FATAL ("kissat_format_value (.., " #BOOLEAN ", " #EXPR ") = \"%s\" but expected \"%s\"", res, EXPECTED); \
printf ("kissat_format_value (.., " #BOOLEAN ", " #EXPR ") = \"%s\" as expected\n", res); \
} while (0)
FORMAT (0, true, "false");
FORMAT (1, true, "true");
FORMAT (2, true, "true");
FORMAT (-1, true, "true");
FORMAT (0, false, "0");
FORMAT (1, false, "1");
FORMAT (INT_MIN, false, "INT_MIN");
FORMAT (INT_MAX, false, "INT_MAX");
FORMAT (1e5, false, "1e5");
FORMAT (-1e3, false, "-1e3");
FORMAT (512, false, "2^9");
FORMAT (-512, false, "-2^9");
#undef FORMAT
}
void
tissat_schedule_format (void)
{
SCHEDULE_FUNCTION (test_format);
}