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
|
/** Checked integer arithmetic tests
type: unsigned char, unsigned int, unsigned long
*/
#include <testfwk.h>
#ifdef __SDCC // Todo: Enable for all C23 impl.
#pragma std_c23
#include <stdckdint.h>
#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // Lack of memory
{type} add_func({type} i, {type} j)
{
return(i + j);
}
{type} sub_func({type} i, {type} j)
{
return(i - j);
}
{type} mul_func({type} i, {type} j)
{
return(i * j);
}
#endif
#endif
void
testCkd (void)
{
#ifdef __SDCC // Todo: Enable for all C23 impl.
#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) && !(defined(__SDCC_mcs51) && defined(__SDCC_MODEL_MEDIUM)) // Lack of memory
#ifndef __SDCC_ds390 // Bug #3469
{type} l, r;
{type} result;
l = 1;
r = 2;
ASSERT ((add_func (l, r) != (signed long long)l + r) == ckd_add (&result, l, r));
l = 100;
r = 200;
ASSERT ((add_func (l, r) != (signed long long)l + r) == ckd_add (&result, l, r));
l = 200;
r = 100;
ASSERT ((sub_func (l, r) != (signed long long)l - r) == ckd_sub (&result, l, r));
l = 100;
r = 200;
ASSERT ((sub_func (l, r) != (signed long long)l - r) == ckd_sub (&result, l, r));
l = 1;
r = 2;
ASSERT ((mul_func (l, r) != (signed long long)l * r) == ckd_add (&result, l, r));
l = 100;
r = 200;
ASSERT ((mul_func (l, r) != (signed long long)l * r) == ckd_add (&result, l, r));
#endif
#endif
#endif
}
|