Update doc revision and pdf cover.
[apps/low-level-can-service.git] / CAN-binder / libs / bitfield-c / tests / write_tests.c
1 #include <canutil/write.h>
2 #include <check.h>
3 #include <stdint.h>
4
5 START_TEST (test_eightbyte_encode_float_precision)
6 {
7     uint64_t value = eightbyte_encode_float(50, 2, 19, 0.001, 0);
8     ck_assert_int_eq(value, 0x061a800000000000LLU);
9 }
10 END_TEST
11
12 START_TEST (test_eightbyte_encode_float)
13 {
14     uint64_t value = eightbyte_encode_float(0, 1, 3, 1, 0);
15     ck_assert_int_eq(value, 0);
16
17     value = eightbyte_encode_float(1, 1, 3, 1, 0);
18     ck_assert_int_eq(value, 0x1000000000000000LLU);
19 }
20 END_TEST
21
22 START_TEST (test_eightbyte_encode_bool)
23 {
24     uint64_t value = eightbyte_encode_bool(true, 1, 3);
25     ck_assert_int_eq(value, 0x1000000000000000LLU);
26     value = eightbyte_encode_bool(false, 1, 3);
27     ck_assert_int_eq(value, 0x0000000000000000LLU);
28 }
29 END_TEST
30
31 START_TEST (test_bitfield_encode_float)
32 {
33     uint8_t data[8] = {0};
34     bitfield_encode_float(0, 1, 3, 1, 0, data, sizeof(data));
35     ck_assert_int_eq(data[0], 0);
36     ck_assert_int_eq(data[1], 0);
37     ck_assert_int_eq(data[2], 0);
38     ck_assert_int_eq(data[3], 0);
39     ck_assert_int_eq(data[4], 0);
40     ck_assert_int_eq(data[5], 0);
41     ck_assert_int_eq(data[6], 0);
42     ck_assert_int_eq(data[7], 0);
43
44     bitfield_encode_float(1, 1, 3, 1, 0, data, sizeof(data));
45     ck_assert_int_eq(data[0], 0x10);
46     ck_assert_int_eq(data[1], 0);
47     ck_assert_int_eq(data[2], 0);
48     ck_assert_int_eq(data[3], 0);
49     ck_assert_int_eq(data[4], 0);
50     ck_assert_int_eq(data[5], 0);
51     ck_assert_int_eq(data[6], 0);
52     ck_assert_int_eq(data[7], 0);
53 }
54 END_TEST
55
56 START_TEST (test_bitfield_encode_bool)
57 {
58     uint8_t data[8] = {0};
59     bitfield_encode_bool(true, 1, 3, data, sizeof(data));
60     ck_assert_int_eq(data[0], 0x10);
61     ck_assert_int_eq(data[1], 0);
62     ck_assert_int_eq(data[2], 0);
63     ck_assert_int_eq(data[3], 0);
64     ck_assert_int_eq(data[4], 0);
65     ck_assert_int_eq(data[5], 0);
66     ck_assert_int_eq(data[6], 0);
67     ck_assert_int_eq(data[7], 0);
68
69     bitfield_encode_bool(false, 1, 3, data, sizeof(data));
70     ck_assert_int_eq(data[0], 0);
71     ck_assert_int_eq(data[1], 0);
72     ck_assert_int_eq(data[2], 0);
73     ck_assert_int_eq(data[3], 0);
74     ck_assert_int_eq(data[4], 0);
75     ck_assert_int_eq(data[5], 0);
76     ck_assert_int_eq(data[6], 0);
77     ck_assert_int_eq(data[7], 0);
78 }
79 END_TEST
80
81 Suite* canwriteSuite(void) {
82     Suite* s = suite_create("write");
83     TCase *tc_core = tcase_create("core");
84     tcase_add_checked_fixture(tc_core, NULL, NULL);
85     tcase_add_test(tc_core, test_eightbyte_encode_float);
86     tcase_add_test(tc_core, test_eightbyte_encode_bool);
87     tcase_add_test(tc_core, test_eightbyte_encode_float_precision);
88     tcase_add_test(tc_core, test_bitfield_encode_float);
89     tcase_add_test(tc_core, test_bitfield_encode_bool);
90     suite_add_tcase(s, tc_core);
91
92     return s;
93 }
94
95 int main(void) {
96     int numberFailed;
97     Suite* s = canwriteSuite();
98     SRunner *sr = srunner_create(s);
99     // Don't fork so we can actually use gdb
100     srunner_set_fork_status(sr, CK_NOFORK);
101     srunner_run_all(sr, CK_NORMAL);
102     numberFailed = srunner_ntests_failed(sr);
103     srunner_free(sr);
104     return (numberFailed == 0) ? 0 : 1;
105 }