Skip to content

Commit c5950f6

Browse files
committed
convert existing test cases
1 parent 724bd07 commit c5950f6

File tree

326 files changed

+5827
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

326 files changed

+5827
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <stdlib.h>
2+
#include <stdbool.h>
3+
typedef int (*myfunc)(int);
4+
int a(int arg) { return arg + 1;}
5+
int b(int arg) { return arg + 2;}
6+
int caller(myfunc fn, int arg) {
7+
return fn(arg);
8+
}
9+
int main() {
10+
myfunc arr[3] = {&a, &b, a};
11+
myfunc foo = a;
12+
myfunc bar = &(a);
13+
if (foo != bar) abort();
14+
if (arr[0] == arr[1]) abort();
15+
if (arr[0] != arr[2]) abort();
16+
if (caller(b, 40) != 42) abort();
17+
if (caller(&b, 40) != 42) abort();
18+
return 0;
19+
}
20+
21+
// run
22+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include <stdlib.h>
2+
int func(char *x) { return x[0]; }
3+
struct S { char *member; };
4+
struct S global_struct = { .member = "global" };
5+
char *g = "global";
6+
int main(void) {
7+
if (g[0] != 'g') abort();
8+
if (global_struct.member[0] != 'g') abort();
9+
char *string = "hello";
10+
if (string[0] != 'h') abort();
11+
struct S s = {.member = "hello"};
12+
if (s.member[0] != 'h') abort();
13+
if (func("foo") != 'f') abort();
14+
return 0;
15+
}
16+
17+
// run
18+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <stdlib.h>
2+
#include <string.h>
3+
extern int foo[];
4+
int global_arr[] = {1, 2, 3};
5+
char global_string[] = "hello";
6+
int main(int argc, char *argv[]) {
7+
if (global_arr[2] != 3) abort();
8+
if (strlen(global_string) != 5) abort();
9+
const char *const_str = "hello";
10+
if (strcmp(const_str, "hello") != 0) abort();
11+
char empty_str[] = "";
12+
if (strlen(empty_str) != 0) abort();
13+
char hello[] = "hello";
14+
if (strlen(hello) != 5 || sizeof(hello) != 6) abort();
15+
int empty[] = {};
16+
if (sizeof(empty) != 0) abort();
17+
int bar[] = {42};
18+
if (bar[0] != 42) abort();
19+
bar[0] = 43;
20+
if (bar[0] != 43) abort();
21+
int baz[] = {1, [42] = 123, 456};
22+
if (baz[42] != 123 || baz[43] != 456) abort();
23+
if (sizeof(baz) != sizeof(int) * 44) abort();
24+
const char *const names[] = {"first", "second", "third"};
25+
if (strcmp(names[2], "third") != 0) abort();
26+
char catted_str[] = "abc" "def";
27+
if (strlen(catted_str) != 6 || sizeof(catted_str) != 7) abort();
28+
char catted_trunc_str[2] = "abc" "def";
29+
if (sizeof(catted_trunc_str) != 2 || catted_trunc_str[0] != 'a' || catted_trunc_str[1] != 'b') abort();
30+
char big_array_utf8lit[10] = "💯";
31+
if (strcmp(big_array_utf8lit, "💯") != 0 || big_array_utf8lit[9] != 0) abort();
32+
return 0;
33+
}
34+
35+
// run
36+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include <stdlib.h>
2+
int sign(int v) {
3+
return -(v < 0);
4+
}
5+
int main(void) {
6+
if (sign(-5) != -1) abort();
7+
if (sign(5) != 0) abort();
8+
if (sign(0) != 0) abort();
9+
return 0;
10+
}
11+
12+
// run
13+
// expect=fail

test/cases/run/C_built-ins.c

+131
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
#include <stdlib.h>
2+
#include <limits.h>
3+
#include <stdbool.h>
4+
#define M_E 2.71828182845904523536
5+
#define M_PI_2 1.57079632679489661923
6+
bool check_clz(unsigned int pos) {
7+
return (__builtin_clz(1 << pos) == (8 * sizeof(unsigned int) - pos - 1));
8+
}
9+
int main(void) {
10+
if (__builtin_bswap16(0x0102) != 0x0201) abort();
11+
if (__builtin_bswap32(0x01020304) != 0x04030201) abort();
12+
if (__builtin_bswap64(0x0102030405060708) != 0x0807060504030201) abort();
13+
14+
if (__builtin_signbit(0.0) != 0) abort();
15+
if (__builtin_signbitf(0.0f) != 0) abort();
16+
if (__builtin_signbit(1.0) != 0) abort();
17+
if (__builtin_signbitf(1.0f) != 0) abort();
18+
if (__builtin_signbit(-1.0) != 1) abort();
19+
if (__builtin_signbitf(-1.0f) != 1) abort();
20+
21+
if (__builtin_popcount(0) != 0) abort();
22+
if (__builtin_popcount(0b1) != 1) abort();
23+
if (__builtin_popcount(0b11) != 2) abort();
24+
if (__builtin_popcount(0b1111) != 4) abort();
25+
if (__builtin_popcount(0b11111111) != 8) abort();
26+
27+
if (__builtin_ctz(0b1) != 0) abort();
28+
if (__builtin_ctz(0b10) != 1) abort();
29+
if (__builtin_ctz(0b100) != 2) abort();
30+
if (__builtin_ctz(0b10000) != 4) abort();
31+
if (__builtin_ctz(0b100000000) != 8) abort();
32+
33+
if (!check_clz(0)) abort();
34+
if (!check_clz(1)) abort();
35+
if (!check_clz(2)) abort();
36+
if (!check_clz(4)) abort();
37+
if (!check_clz(8)) abort();
38+
39+
if (__builtin_sqrt(__builtin_sqrt(__builtin_sqrt(256))) != 2.0) abort();
40+
if (__builtin_sqrt(__builtin_sqrt(__builtin_sqrt(256.0))) != 2.0) abort();
41+
if (__builtin_sqrt(__builtin_sqrt(__builtin_sqrt(256.0f))) != 2.0) abort();
42+
if (__builtin_sqrtf(__builtin_sqrtf(__builtin_sqrtf(256.0f))) != 2.0f) abort();
43+
44+
if (__builtin_sin(1.0) != -__builtin_sin(-1.0)) abort();
45+
if (__builtin_sinf(1.0f) != -__builtin_sinf(-1.0f)) abort();
46+
if (__builtin_sin(M_PI_2) != 1.0) abort();
47+
if (__builtin_sinf(M_PI_2) != 1.0f) abort();
48+
49+
if (__builtin_cos(1.0) != __builtin_cos(-1.0)) abort();
50+
if (__builtin_cosf(1.0f) != __builtin_cosf(-1.0f)) abort();
51+
if (__builtin_cos(0.0) != 1.0) abort();
52+
if (__builtin_cosf(0.0f) != 1.0f) abort();
53+
54+
if (__builtin_exp(0) != 1.0) abort();
55+
if (__builtin_fabs(__builtin_exp(1.0) - M_E) > 0.00000001) abort();
56+
if (__builtin_exp(0.0f) != 1.0f) abort();
57+
58+
if (__builtin_exp2(0) != 1.0) abort();
59+
if (__builtin_exp2(4.0) != 16.0) abort();
60+
if (__builtin_exp2f(0.0f) != 1.0f) abort();
61+
if (__builtin_exp2f(4.0f) != 16.0f) abort();
62+
63+
if (__builtin_log(M_E) != 1.0) abort();
64+
if (__builtin_log(1.0) != 0.0) abort();
65+
if (__builtin_logf(1.0f) != 0.0f) abort();
66+
67+
if (__builtin_log2(8.0) != 3.0) abort();
68+
if (__builtin_log2(1.0) != 0.0) abort();
69+
if (__builtin_log2f(8.0f) != 3.0f) abort();
70+
if (__builtin_log2f(1.0f) != 0.0f) abort();
71+
72+
if (__builtin_log10(1000.0) != 3.0) abort();
73+
if (__builtin_log10(1.0) != 0.0) abort();
74+
if (__builtin_log10f(1000.0f) != 3.0f) abort();
75+
if (__builtin_log10f(1.0f) != 0.0f) abort();
76+
77+
if (__builtin_fabs(-42.0f) != 42.0) abort();
78+
if (__builtin_fabs(-42.0) != 42.0) abort();
79+
if (__builtin_fabs(-42) != 42.0) abort();
80+
if (__builtin_fabsf(-42.0f) != 42.0f) abort();
81+
82+
if (__builtin_fabs(-42.0f) != 42.0) abort();
83+
if (__builtin_fabs(-42.0) != 42.0) abort();
84+
if (__builtin_fabs(-42) != 42.0) abort();
85+
if (__builtin_fabsf(-42.0f) != 42.0f) abort();
86+
87+
if (__builtin_abs(42) != 42) abort();
88+
if (__builtin_abs(-42) != 42) abort();
89+
if (__builtin_abs(INT_MIN) != INT_MIN) abort();
90+
91+
if (__builtin_floor(42.9) != 42.0) abort();
92+
if (__builtin_floor(-42.9) != -43.0) abort();
93+
if (__builtin_floorf(42.9f) != 42.0f) abort();
94+
if (__builtin_floorf(-42.9f) != -43.0f) abort();
95+
96+
if (__builtin_ceil(42.9) != 43.0) abort();
97+
if (__builtin_ceil(-42.9) != -42) abort();
98+
if (__builtin_ceilf(42.9f) != 43.0f) abort();
99+
if (__builtin_ceilf(-42.9f) != -42.0f) abort();
100+
101+
if (__builtin_trunc(42.9) != 42.0) abort();
102+
if (__builtin_truncf(42.9f) != 42.0f) abort();
103+
if (__builtin_trunc(-42.9) != -42.0) abort();
104+
if (__builtin_truncf(-42.9f) != -42.0f) abort();
105+
106+
if (__builtin_round(0.5) != 1.0) abort();
107+
if (__builtin_round(-0.5) != -1.0) abort();
108+
if (__builtin_roundf(0.5f) != 1.0f) abort();
109+
if (__builtin_roundf(-0.5f) != -1.0f) abort();
110+
111+
if (__builtin_strcmp("abc", "abc") != 0) abort();
112+
if (__builtin_strcmp("abc", "def") >= 0 ) abort();
113+
if (__builtin_strcmp("def", "abc") <= 0) abort();
114+
115+
if (__builtin_strlen("this is a string") != 16) abort();
116+
117+
char *s = malloc(6);
118+
__builtin_memcpy(s, "hello", 5);
119+
s[5] = '\0';
120+
if (__builtin_strlen(s) != 5) abort();
121+
122+
__builtin_memset(s, 42, __builtin_strlen(s));
123+
if (s[0] != 42 || s[1] != 42 || s[2] != 42 || s[3] != 42 || s[4] != 42) abort();
124+
125+
free(s);
126+
127+
return 0;
128+
}
129+
130+
// run
131+
// expect=fail

test/cases/run/Cast-to-union.c

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <stdlib.h>
2+
struct S { int x; };
3+
union U {
4+
long l;
5+
double d;
6+
struct S s;
7+
};
8+
union U bar(union U u) { return u; }
9+
int main(void) {
10+
union U u = (union U) 42L;
11+
if (u.l != 42L) abort();
12+
u = (union U) 2.0;
13+
if (u.d != 2.0) abort();
14+
u = bar((union U)4.0);
15+
if (u.d != 4.0) abort();
16+
u = (union U)(struct S){ .x = 5 };
17+
if (u.s.x != 5) abort();
18+
return 0;
19+
}
20+
21+
// run
22+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdlib.h>
2+
char foo(char c) { return c; }
3+
int bar(int i) { return i; }
4+
long baz(long l) { return l; }
5+
int main() {
6+
if (foo(1 == 2)) abort();
7+
if (!foo(1 == 1)) abort();
8+
if (bar(1 == 2)) abort();
9+
if (!bar(1 == 1)) abort();
10+
if (baz(1 == 2)) abort();
11+
if (!baz(1 == 1)) abort();
12+
return 0;
13+
}
14+
15+
// run
16+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include <stdint.h>
2+
#include <stdlib.h>
3+
enum Foo { A, B, C };
4+
static inline enum Foo do_stuff(void) {
5+
int64_t i = 1;
6+
return (enum Foo)i;
7+
}
8+
int main(void) {
9+
if (do_stuff() != B) abort();
10+
return 0;
11+
}
12+
13+
// run
14+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include <stdlib.h>
2+
int main(void) {
3+
int x = 123;
4+
union { typeof(x) val; } u = { x };
5+
if (u.val != 123) abort();
6+
return 0;
7+
}
8+
9+
// run
10+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include <stdlib.h>
2+
#include <stdio.h>
3+
int main(void) {
4+
if (1 || (abort(), 1)) {}
5+
if (0 && (1, printf("do not print\n"))) {}
6+
int x = 0;
7+
x = (x = 3, 4, x + 1);
8+
if (x != 4) abort();
9+
return 0;
10+
}
11+
12+
// run
13+
// expect=fail

test/cases/run/Compound_literals.c

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdlib.h>
2+
struct Foo {
3+
int a;
4+
char b[2];
5+
float c;
6+
};
7+
int main() {
8+
struct Foo foo;
9+
int x = 1, y = 2;
10+
foo = (struct Foo) {x + y, {'a', 'b'}, 42.0f};
11+
if (foo.a != x + y || foo.b[0] != 'a' || foo.b[1] != 'b' || foo.c != 42.0f) abort();
12+
return 0;
13+
}
14+
15+
// run
16+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdlib.h>
2+
int main(void) {
3+
int foo[] = {1, 2, 3, 4};
4+
int *p = foo;
5+
int idx = 1;
6+
if ((++p)[--idx] != 2) abort();
7+
if (p != foo + 1) abort();
8+
if (idx != 0) abort();
9+
if ((p++)[idx++] != 2) abort();
10+
if (p != foo + 2) abort();
11+
if (idx != 1) abort();
12+
return 0;
13+
}
14+
15+
// run
16+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include <stdio.h>
2+
void doWork(int id) { }
3+
int reallyDelete(int id) { printf("deleted %d\n", id); return 1; }
4+
int process(int id, int n, int delete) {
5+
if(!delete)
6+
while(n-- > 0) doWork(id);
7+
else
8+
return reallyDelete(id);
9+
return 0;
10+
}
11+
int main(void) {
12+
process(99, 3, 0);
13+
return 0;
14+
}
15+
16+
// run
17+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <stdlib.h>
2+
enum FOO {
3+
FOO = 1,
4+
BAR = 2,
5+
BAZ = 1,
6+
};
7+
int main(void) {
8+
enum FOO x = BAZ;
9+
if (x != 1) abort();
10+
if (x != BAZ) abort();
11+
if (x != FOO) abort();
12+
}
13+
14+
// run
15+
// expect=fail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
enum A { A0, A1=0xFFFFFFFF };
2+
enum B { B0=-1, B1=0xFFFFFFFF };
3+
enum C { C0=-1, C1=0 };
4+
enum D { D0, D1=0xFFFFFFFFFFL };
5+
enum E { E0=-1, E1=0xFFFFFFFFFFL };
6+
int main(void) {
7+
signed char a0 = A0, a1 = A1;
8+
signed char b0 = B0, b1 = B1;
9+
signed char c0 = C0, c1 = C1;
10+
signed char d0 = D0, d1 = D1;
11+
signed char e0 = E0, e1 = E1;
12+
return 0;
13+
}
14+
15+
// run
16+
// expect=fail

0 commit comments

Comments
 (0)