summaryrefslogtreecommitdiff
path: root/support/regression/tests/checkedint.c.in
blob: 418c9e729315523fe1ec15699e26a22da675f09a (plain)
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
}