File: test_parse_int64.c

package info (click to toggle)
libfastjson 1.2304.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,144 kB
  • sloc: sh: 4,486; ansic: 4,464; makefile: 114
file content (107 lines) | stat: -rw-r--r-- 2,236 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "config.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>

#include "../json_util.h"

static void checkit(const char *buf)
{
	int64_t cint64 = -666;

	int retval = fjson_parse_int64(buf, &cint64);
	printf("buf=%s parseit=%d, value=%" PRId64 " \n", buf, retval, cint64);
}

/**
 * This test calls fjson_parse_int64 with a variety of different strings.
 * It's purpose is to ensure that the results are consistent across all
 * different environments that it might be executed in.
 *
 * This always exits with a 0 exit value.  The output should be compared
 * against previously saved expected output.
 */
int main(int __attribute__((unused)) argc, char __attribute__((unused)) **argv)
{
	char buf[100];

	checkit("x");

	checkit("0");
	checkit("-0");

	checkit("00000000");
	checkit("-00000000");

	checkit("1");

	strcpy(buf, "2147483647"); // aka INT32_MAX
	checkit(buf);

	strcpy(buf, "-1");
	checkit(buf);

	strcpy(buf, "   -1");
	checkit(buf);

	strcpy(buf, "00001234");
	checkit(buf);

	strcpy(buf, "0001234x");
	checkit(buf);

	strcpy(buf, "-00001234");
	checkit(buf);

	strcpy(buf, "-00001234x");
	checkit(buf);

	strcpy(buf, "4294967295"); // aka UINT32_MAX

	sprintf(buf, "4294967296");  // aka UINT32_MAX + 1

	strcpy(buf, "21474836470"); // INT32_MAX * 10
	checkit(buf);

	strcpy(buf, "31474836470"); // INT32_MAX * 10 + a bunch
	checkit(buf);

	strcpy(buf, "-2147483647"); // INT32_MIN + 1
	checkit(buf);

	strcpy(buf, "-2147483648"); // INT32_MIN
	checkit(buf);

	strcpy(buf, "-2147483649"); // INT32_MIN - 1
	checkit(buf);

	strcpy(buf, "-21474836480"); // INT32_MIN * 10
	checkit(buf);

	strcpy(buf, "9223372036854775806"); // INT64_MAX - 1
	checkit(buf);

	strcpy(buf, "9223372036854775807"); // INT64_MAX
	checkit(buf);

	strcpy(buf, "9223372036854775808"); // INT64_MAX + 1
	checkit(buf);

	strcpy(buf, "-9223372036854775808"); // INT64_MIN
	checkit(buf);

	strcpy(buf, "-9223372036854775809"); // INT64_MIN - 1
	checkit(buf);

	strcpy(buf, "18446744073709551614"); // UINT64_MAX - 1
	checkit(buf);

	strcpy(buf, "18446744073709551615"); // UINT64_MAX
	checkit(buf);

	// Ensure we can still parse valid numbers after parsing out of range ones.
	strcpy(buf, "123");
	checkit(buf);

	return 0;
}