summaryrefslogtreecommitdiff
path: root/support/regression/tests/bool.c
blob: 862f9408f47d596428895493e8c8f79ddc9e1ef3 (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
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
/* bool.c
 */

#include <testfwk.h>

#ifdef __SDCC
#pragma std_c99
#endif

#include <stdbool.h>
#include <stdint.h>

bool ret_true(void)
{
  return(true);
}

bool ret_false(void)
{
  return(false);
}

volatile bool E;

bool (* const pa[])(void) = {&ret_true, &ret_false};

struct s
{
  bool b;
};

struct
{
  bool b : 1;
  bool b1 : 1;
} s2;

void fieldassign(void)
{
	s2.b1 = s2.b;
}

void
testBug2233(void)
{
#ifndef __SDCC_pic16
	bool result;
	volatile char test = 0;

	result = ret_true();

	if (result == 1)
		test = 1;
	ASSERT(test);
#endif
}


void
testBool(void)
{
#ifndef __SDCC_pic16
	volatile unsigned char z = 2;

	const char *BOOL = "George Boole";

	ASSERT(true);
	ASSERT((*(pa[0]))() == true);
	ASSERT((*(pa[1]))() == false);

	s2.b = (z & 2);
	ASSERT(s2.b);
	s2.b = (bool)(z & 2);
	ASSERT(s2.b);

	E = true;
	ASSERT((E ? 1 : 0) == (!(!E)));
	ASSERT((E += 2) == 1);
	ASSERT((--E, --E, E) == E);

	E = false;
	ASSERT((E ? 1 : 0) == (!(!E)));
	ASSERT((E += 2) == 1);
	ASSERT((--E, --E, E) == E);

	E = 0;   ASSERT(!E); // sets E to 0
	E = 1;   ASSERT(E);  // sets E to 1
	E = 4;   ASSERT(E);  // sets E to 1
	E = 0.5; ASSERT(E);  // sets E to 1
	E = false;
	E++;     ASSERT(E);  // sets E to 1
	E = true;
	E++;     ASSERT(E);  // sets E to 1
	E = false;
	E--;     ASSERT(E);  // sets E to 1-E
	E = true;
	E--;     ASSERT(!E); // sets E to 1-E

	ASSERT(!s2.b1);
	s2.b = true;
	fieldassign();
	ASSERT(s2.b1);
#endif
}