-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest-int-extend.c
53 lines (43 loc) · 1.33 KB
/
test-int-extend.c
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
#include "./testsuite.h"
struct test {
unsigned long a: 8;
long b: 14;
int pad: 2;
unsigned c: 16;
};
void test_int_extend(void)
{
struct test test;
memset(&test, 0xff, sizeof(test));
ts_output(1, stdout, "Value should be: test.a(%d) test.b(%d) "
"test.c(%d)\n",
(unsigned long)0xff,
(long)-1,
(unsigned)0xffff);
unsigned long v;
int err;
err = clib_int_extend((char *)&v, sizeof(v) * 8, ((char *)&test), 8,
0, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.a 0) result: %lx\n", v);
err = clib_int_extend((char *)&v, sizeof(v) * 8, ((char *)&test), 8,
1, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.a 1) result: %lx\n", v);
err = clib_int_extend((char *)&v, sizeof(v) * 8,
((char *)&test + 1), 14, 0, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.b 0) result: %lx\n", v);
err = clib_int_extend((char *)&v, sizeof(v) * 8,
((char *)&test + 1), 14, 1, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.b 1) result: %lx\n", v);
err = clib_int_extend((char *)&v, sizeof(v) * 8,
((char *)&test + 3), 16, 0, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.c 0) result: %lx\n", v);
err = clib_int_extend((char *)&v, sizeof(v) * 8,
((char *)&test + 3), 16, 1, 1);
(void)err;
ts_output(1, stdout, "clib_int_extend(test.c 1) result: %lx\n", v);
}