author | alfadur |
Tue, 19 May 2020 02:25:24 +0300 | |
changeset 15575 | a2e78f5907cc |
parent 14185 | 801dc57371c3 |
permissions | -rw-r--r-- |
7983 | 1 |
#include <check.h> |
2 |
#include <stdlib.h> |
|
3 |
#include <stdio.h> |
|
4 |
#include "check_check.h" |
|
5 |
#include "../src/system.h" |
|
6 |
||
7 |
void check_string(string255 str) |
|
8 |
{ |
|
10015 | 9 |
fail_unless(strlen(str.str) == str.len, "String internal inconsistency error"); |
7983 | 10 |
} |
11 |
||
12 |
static string255 make_string(const char* str) |
|
13 |
{ |
|
10015 | 14 |
string255 s; |
15 |
s.len = strlen(str); |
|
16 |
memcpy(s.str, str, s.len + 1); |
|
17 |
return s; |
|
7983 | 18 |
} |
19 |
||
20 |
START_TEST (test_copy) |
|
10015 | 21 |
{ |
22 |
string255 s = STRINIT("1234567"); |
|
23 |
string255 t; |
|
7983 | 24 |
|
10015 | 25 |
t = fpcrtl_copy(s, 1, 1); |
26 |
fail_if(strcmp(t.str, "1"), "Test copy fail 1"); |
|
7983 | 27 |
|
10015 | 28 |
t = fpcrtl_copy(s, 7, 1); |
29 |
fail_if(strcmp(t.str, "7"), "Test copy fail 2"); |
|
7983 | 30 |
|
10015 | 31 |
t = fpcrtl_copy(s, 8, 1); |
32 |
fail_if(t.len != 0, "Test copy fail 3"); |
|
7983 | 33 |
|
10015 | 34 |
t = fpcrtl_copy(s, 8, 100); |
35 |
fail_if(t.len != 0, "Test copy fail 4"); |
|
36 |
check_string(t); |
|
7983 | 37 |
|
10015 | 38 |
t = fpcrtl_copy(s, 0, 100); |
39 |
fail_if(strcmp(t.str, "1234567"), "Test copy fail 5"); |
|
7983 | 40 |
|
10015 | 41 |
t = fpcrtl_copy(s, 0, 5); |
42 |
fail_if(strcmp(t.str, "12345"), "Test copy fail 6"); |
|
7983 | 43 |
|
10015 | 44 |
t = fpcrtl_copy(s, 4, 100); |
45 |
fail_if(strcmp(t.str, "4567"), "Test copy fail 7"); |
|
7983 | 46 |
|
10015 | 47 |
t = fpcrtl_copy(s, 4, 2); |
48 |
fail_if(strcmp(t.str, "45"), "Test copy fail 8"); |
|
49 |
}END_TEST |
|
7983 | 50 |
|
51 |
START_TEST (test_delete) |
|
10015 | 52 |
{ |
53 |
string255 s = STRINIT("1234567"); |
|
54 |
string255 s2 = STRINIT("1234567"); |
|
55 |
string255 s3 = STRINIT("1234567"); |
|
7983 | 56 |
|
10015 | 57 |
fpcrtl_delete(s, 0, 10); |
58 |
fail_if(strcmp(s.str, "1234567"), "delete(\"1234567\", 0, 10)"); |
|
59 |
check_string(s); |
|
7983 | 60 |
|
10015 | 61 |
fpcrtl_delete(s, 1, 1); |
62 |
fail_if(strcmp(s.str, "234567"), "delete(\"1234567\", 1, 1)"); |
|
63 |
check_string(s); |
|
7983 | 64 |
|
10015 | 65 |
fpcrtl_delete(s, 1, 100); |
66 |
fail_if(strcmp(s.str, ""), "delete(\"234567\", 1, 100)"); |
|
67 |
check_string(s); |
|
7983 | 68 |
|
10015 | 69 |
fpcrtl_delete(s2, 3, 2); |
70 |
fail_if(strcmp(s2.str, "12567"), "delete(\"1234567\", 3, 2)"); |
|
71 |
check_string(s2); |
|
7983 | 72 |
|
10015 | 73 |
fpcrtl_delete(s3, 3, 100); |
74 |
fail_if(strcmp(s3.str, "12"), "delete(\"1234567\", 3, 100)"); |
|
75 |
check_string(s3); |
|
7983 | 76 |
|
10015 | 77 |
} |
7983 | 78 |
END_TEST |
79 |
||
80 |
START_TEST (test_FloatToStr) |
|
10015 | 81 |
{ |
82 |
double s = 1.2345; |
|
83 |
string255 t = fpcrtl_floatToStr(s); |
|
84 |
printf("-----Entering test floatToStr-----\n"); |
|
85 |
printf("FloatToStr(%f) = %s\n", s, t.str); |
|
86 |
printf("-----Leaving test floatToStr-----\n"); |
|
87 |
} |
|
7983 | 88 |
END_TEST |
89 |
||
90 |
START_TEST (test_random) |
|
10015 | 91 |
{ |
92 |
fpcrtl_randomize(); |
|
93 |
printf("-----Entering test random-----\n"); |
|
94 |
printf("random(5000) = %d\n", fpcrtl_random(5000)); |
|
95 |
printf("random(1) = %d\n", fpcrtl_random(1)); |
|
96 |
printf("random(2) = %d\n", fpcrtl_random(2)); |
|
97 |
printf("-----Leaving test random-----\n"); |
|
7983 | 98 |
|
10015 | 99 |
} |
7983 | 100 |
END_TEST |
101 |
||
102 |
START_TEST (test_posS) |
|
10015 | 103 |
{ |
104 |
string255 substr1 = STRINIT("123"); |
|
105 |
string255 str1 = STRINIT("12345"); |
|
7983 | 106 |
|
10015 | 107 |
string255 substr2 = STRINIT("45"); |
108 |
string255 str2 = STRINIT("12345"); |
|
7983 | 109 |
|
10015 | 110 |
string255 substr3 = STRINIT(""); |
111 |
string255 str3 = STRINIT("12345"); |
|
7983 | 112 |
|
10015 | 113 |
string255 substr4 = STRINIT("123"); |
114 |
string255 str4 = STRINIT(""); |
|
7983 | 115 |
|
10015 | 116 |
string255 substr5 = STRINIT("123"); |
117 |
string255 str5 = STRINIT("456"); |
|
7983 | 118 |
|
10015 | 119 |
fail_unless(fpcrtl_posS(substr1, str1) == 1, "pos(123, 12345)"); |
120 |
fail_unless(fpcrtl_posS(substr2, str2) == 4, "pos(45, 12345)"); |
|
121 |
fail_unless(fpcrtl_posS(substr3, str3) == 0, "pos(, 12345)"); |
|
122 |
fail_unless(fpcrtl_posS(substr4, str4) == 0, "pos(123, )"); |
|
123 |
fail_unless(fpcrtl_posS(substr5, str5) == 0, "pos(123, 456)"); |
|
124 |
} |
|
7983 | 125 |
END_TEST |
126 |
||
127 |
START_TEST (test_trunc) |
|
10015 | 128 |
{ |
129 |
fail_unless(fpcrtl_trunc(123.456) == 123, "trunc(123.456)"); |
|
130 |
fail_unless(fpcrtl_trunc(-123.456) == -123, "trunc(-123.456)"); |
|
131 |
fail_unless(fpcrtl_trunc(12.3456) == 12, "trunc(12.3456)"); |
|
132 |
fail_unless(fpcrtl_trunc(-12.3456) == -12, "trunc(-12.3456)"); |
|
14185
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
133 |
fail_unless(fpcrtl_trunc(0.3) == 0, "trunc(0.3)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
134 |
fail_unless(fpcrtl_trunc(0.5) == 0, "trunc(0.5)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
135 |
fail_unless(fpcrtl_trunc(99.9999999) == 99, "trunc(99.9999999)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
136 |
fail_unless(fpcrtl_trunc(0x01000000.0) == 0x01000000, "trunc(0x01000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
137 |
fail_unless(fpcrtl_trunc(0x01000001.0) == 0x01000001, "trunc(0x01000001.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
138 |
fail_unless(fpcrtl_trunc(0x02000000.0) == 0x02000000, "trunc(0x02000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
139 |
fail_unless(fpcrtl_trunc(0x04000000.0) == 0x04000000, "trunc(0x04000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
140 |
fail_unless(fpcrtl_trunc(0x08000000.0) == 0x08000000, "trunc(0x08000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
141 |
fail_unless(fpcrtl_trunc(0x10000000.0) == 0x10000000, "trunc(0x10000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
142 |
fail_unless(fpcrtl_trunc(0x10000001.0) == 0x10000001, "trunc(0x10000001.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
143 |
fail_unless(fpcrtl_trunc(0x20000000.0) == 0x20000000, "trunc(0x20000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
144 |
fail_unless(fpcrtl_trunc(0x40000000.0) == 0x40000000, "trunc(0x40000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
145 |
fail_unless(fpcrtl_trunc(0x80000000.0) == 0x80000000, "trunc(0x80000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
146 |
fail_unless(fpcrtl_trunc(0xF0000000.0) == 0xF0000000, "trunc(0xF0000000.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
147 |
fail_unless(fpcrtl_trunc(0xF0000001.0) == 0xF0000001, "trunc(0xF0000001.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
148 |
fail_unless(fpcrtl_trunc(0x01010101.0) == 0x01010101, "trunc(0x01010101.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
149 |
fail_unless(fpcrtl_trunc(0xFFFFFFFF.0) == 0xFFFFFFFF, "trunc(0xFFFFFFFF.0)"); |
801dc57371c3
Pas2C: Fix bad C typedefs for Pascal data types Extended and Real
Wuzzy <Wuzzy2@mail.ru>
parents:
10015
diff
changeset
|
150 |
fail_unless(fpcrtl_trunc(0x8943FE39.0) == 0x8943FE39, "trunc(0x01000000.0)"); |
10015 | 151 |
} |
7983 | 152 |
END_TEST |
153 |
||
154 |
START_TEST (test_odd) |
|
155 |
{ |
|
10015 | 156 |
fail_unless(fpcrtl_odd(123) != 0, "odd(123)"); |
157 |
fail_unless(fpcrtl_odd(124) == 0, "odd(124)"); |
|
158 |
fail_unless(fpcrtl_odd(0) == 0, "odd(0)"); |
|
159 |
fail_unless(fpcrtl_odd(-1) != 0, "odd(-1)"); |
|
160 |
fail_unless(fpcrtl_odd(-2) == 0, "odd(-2)"); |
|
7983 | 161 |
} |
162 |
END_TEST |
|
163 |
||
164 |
START_TEST (test_sqr) |
|
165 |
{ |
|
10015 | 166 |
fail_unless(fpcrtl_sqr(0) == 0, "sqr(0)"); |
167 |
fail_unless(fpcrtl_sqr(5) == 25, "sqr(5)"); |
|
168 |
fail_unless(fpcrtl_sqr(-5) == 25, "sqr(-5)"); |
|
7983 | 169 |
} |
170 |
END_TEST |
|
171 |
||
172 |
START_TEST (test_lowercase) |
|
173 |
{ |
|
10015 | 174 |
string255 s1 = STRINIT(""); |
175 |
string255 s2 = STRINIT("a"); |
|
176 |
string255 s3 = STRINIT("abc"); |
|
177 |
string255 t; |
|
7983 | 178 |
|
10015 | 179 |
t = fpcrtl_lowerCase(make_string("")); |
180 |
fail_if(strcmp(t.str, s1.str), "lowerCase(\"\")"); |
|
7983 | 181 |
|
10015 | 182 |
t = fpcrtl_lowerCase(make_string("a")); |
183 |
fail_if(strcmp(t.str, s2.str), "lowerCase(\"a\")"); |
|
7983 | 184 |
|
10015 | 185 |
t = fpcrtl_lowerCase(make_string("A")); |
186 |
fail_if(strcmp(t.str, s2.str), "lowerCase(\"A\")"); |
|
7983 | 187 |
|
10015 | 188 |
t = fpcrtl_lowerCase(make_string("AbC")); |
189 |
fail_if(strcmp(t.str, s3.str), "lowerCase(\"AbC\")"); |
|
7983 | 190 |
|
10015 | 191 |
t = fpcrtl_lowerCase(make_string("abc")); |
192 |
fail_if(strcmp(t.str, s3.str), "lowerCase(\"abc\")"); |
|
7983 | 193 |
} |
194 |
END_TEST |
|
195 |
||
196 |
START_TEST (test_str) |
|
197 |
{ |
|
10015 | 198 |
int8_t a1 = -8; |
199 |
uint8_t a2 = 8; |
|
200 |
int16_t a3 = -13; |
|
201 |
uint16_t a4 = 13; |
|
202 |
int32_t a5 = -19; |
|
203 |
uint32_t a6 = 22; |
|
204 |
int64_t a7 = -199999999999999; |
|
205 |
uint64_t a8 = 200000000000000; |
|
7983 | 206 |
|
10015 | 207 |
float a9 = 12345.6789; |
208 |
double a10 = -9876.54321; |
|
7983 | 209 |
|
10015 | 210 |
string255 s; |
7983 | 211 |
|
10015 | 212 |
printf("-----Entering test str-----\n"); |
7983 | 213 |
|
10015 | 214 |
fpcrtl_str(a1, s); |
215 |
printf("%d == %s\n", a1, s.str); |
|
7983 | 216 |
|
10015 | 217 |
fpcrtl_str(a2, s); |
218 |
printf("%u == %s\n", a2, s.str); |
|
7983 | 219 |
|
10015 | 220 |
fpcrtl_str(a3, s); |
221 |
printf("%d == %s\n", a3, s.str); |
|
7983 | 222 |
|
10015 | 223 |
fpcrtl_str(a4, s); |
224 |
printf("%u == %s\n", a4, s.str); |
|
7983 | 225 |
|
10015 | 226 |
fpcrtl_str(a5, s); |
227 |
printf("%d == %s\n", a5, s.str); |
|
7983 | 228 |
|
10015 | 229 |
fpcrtl_str(a6, s); |
230 |
printf("%u == %s\n", a6, s.str); |
|
7983 | 231 |
|
10015 | 232 |
fpcrtl_str(a7, s); |
233 |
printf("%lld == %s\n", a7, s.str); |
|
7983 | 234 |
|
10015 | 235 |
fpcrtl_str(a8, s); |
236 |
printf("%llu == %s\n", a8, s.str); |
|
7983 | 237 |
|
10015 | 238 |
fpcrtl_str(a9, s); |
239 |
printf("%f == %s\n", a9, s.str); |
|
7983 | 240 |
|
10015 | 241 |
fpcrtl_str(a10, s); |
242 |
printf("%f == %s\n", a10, s.str); |
|
7983 | 243 |
|
10015 | 244 |
printf("-----Leaving test str------\n"); |
7983 | 245 |
} |
246 |
END_TEST |
|
247 |
||
248 |
Suite* system_suite(void) |
|
249 |
{ |
|
10015 | 250 |
Suite *s = suite_create("system"); |
7983 | 251 |
|
10015 | 252 |
TCase *tc_core = tcase_create("Core"); |
7983 | 253 |
|
10015 | 254 |
tcase_add_test(tc_core, test_copy); |
255 |
tcase_add_test(tc_core, test_FloatToStr); |
|
256 |
tcase_add_test(tc_core, test_random); |
|
257 |
tcase_add_test(tc_core, test_posS); |
|
258 |
tcase_add_test(tc_core, test_trunc); |
|
259 |
tcase_add_test(tc_core, test_delete); |
|
260 |
tcase_add_test(tc_core, test_odd); |
|
261 |
tcase_add_test(tc_core, test_sqr); |
|
262 |
tcase_add_test(tc_core, test_lowercase); |
|
263 |
tcase_add_test(tc_core, test_str); |
|
7983 | 264 |
|
10015 | 265 |
suite_add_tcase(s, tc_core); |
7983 | 266 |
|
10015 | 267 |
return s; |
7983 | 268 |
} |
269 |