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
|
#include <criterion/criterion.h>
#include <stddef.h>
#include <stdio.h>
typedef unsigned long long ull;
ull *sum_dig_pow(ull a, ull b, ull *results, size_t *length);
void tester(ull a, ull b, size_t e_len, ull expected[e_len]);
Test(sum_dig_pow, Sample_Tests) {
{
ull a = 1; ull b = 10;
const ull expected[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
tester(a, b, 9, (ull *)expected);
}
{
ull a = 1; ull b = 100;
const ull expected[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 89};
tester(a, b, 10, (ull *)expected);
}
{
ull a = 10; ull b = 100;
const ull expected[1] = {89};
tester(a, b, 1, (ull *)expected);
}
{
ull a = 90; ull b = 100;
const ull *expected = NULL;
tester(a, b, 0, (ull *)expected);
}
{
ull a = 90; ull b = 150;
const ull expected[1] = {135};
tester(a, b, 1, (ull *)expected);
}
{
ull a = 50; ull b = 150;
const ull expected[2] = {89, 135};
tester(a, b, 2, (ull *)expected);
}
{
ull a = 10; ull b = 150;
const ull expected[2] = {89, 135};
tester(a, b, 2, (ull *)expected);
}
}
void tester(ull a, ull b, size_t exp_len, ull expected[exp_len]) {
ull results[exp_len];
for(size_t i=0; i<exp_len; i++) {
results[i] = rand() - rand();
}
size_t sub_len = 0;
ull *submitted = sum_dig_pow(a, b, (ull *)results, &sub_len);
if(sub_len != exp_len) {
cr_assert_fail(
"< Incorrect Output Length >\n \nSubmitted: %zu\nExpected: %zu\n \n",
sub_len, exp_len
);
}
for(size_t i=0; i<exp_len; i++) {
if(submitted[i] != expected[i]) {
char sub_str[7 * sub_len + 1];
size_t s = 0, p = sprintf(sub_str, "{");
while(s < sub_len)
p += sprintf(sub_str + p, "%llu, ", submitted[s++]);
sprintf(sub_str + p - 2, "}");
char exp_str[7 * exp_len + 1];
size_t e = 0, q = sprintf(exp_str, "{");
while(e < exp_len)
q += sprintf(exp_str + q, "%llu, ", expected[e++]);
sprintf(exp_str + q - 2, "}");
cr_assert_fail(
"< Incorrect Value(s) >\n \na = %llu\nb = %llu\n \nSubmitted: %s\nExpected: %s\n \n",
a, b, sub_str, exp_str
);
}
}
cr_assert(1);
}
|