1 // Copyright 2011 Juri Glass, Mathias Runge, Nadim El Sayed
2 // DAI-Labor, TU-Berlin
3 //
4 // This file is part of libSML.
5 //
6 // libSML is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // libSML is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with libSML.  If not, see <http://www.gnu.org/licenses/>.
18 
19 #include "../unity/unity_fixture.h"
20 #include "../unity/unity.h"
21 #include "test_helper.h"
22 #include <sml/sml_number.h>
23 
24 TEST_GROUP(sml_number);
25 
26 extern sml_buffer *buf;
27 
TEST_SETUP(sml_number)28 TEST_SETUP(sml_number) {
29 	buf = sml_buffer_init(512);
30 }
31 
TEST_TEAR_DOWN(sml_number)32 TEST_TEAR_DOWN(sml_number) {
33 	sml_buffer_free(buf);
34 }
35 
TEST(sml_number,init_unsigned8)36 TEST(sml_number, init_unsigned8) {
37 	u8 *n = sml_u8_init(1);
38 	TEST_ASSERT_NOT_NULL(n);
39 	TEST_ASSERT_EQUAL(1, *n);
40 	sml_u8_free( n );
41 }
42 
TEST(sml_number,init_integer16)43 TEST(sml_number, init_integer16) {
44 	i16 *n = sml_i16_init(-1);
45 	TEST_ASSERT_NOT_NULL(n);
46 	TEST_ASSERT_EQUAL(-1, *n);
47 	sml_i16_free( n );
48 }
49 
TEST(sml_number,parse_unsigned8)50 TEST(sml_number, parse_unsigned8) {
51 	hex2binary("6201", sml_buf_get_current_buf(buf));
52 	u8 *n = sml_u8_parse(buf);
53 	TEST_ASSERT_EQUAL(1, *n);
54 	TEST_ASSERT_EQUAL(2, buf->cursor);
55 	sml_u8_free( n );
56 }
57 
TEST(sml_number,parse_unsigned16)58 TEST(sml_number, parse_unsigned16) {
59 	hex2binary("630101", sml_buf_get_current_buf(buf));
60 	u16 *n = sml_u16_parse(buf);
61 	TEST_ASSERT_EQUAL(257, *n);
62 	sml_u16_free( n );
63 }
64 
TEST(sml_number,parse_unsigned32)65 TEST(sml_number, parse_unsigned32) {
66 	hex2binary("6500000001", sml_buf_get_current_buf(buf));
67 	u32 *n = sml_u32_parse(buf);
68 	TEST_ASSERT_EQUAL(1, *n);
69 	sml_u32_free( n );
70 }
71 
TEST(sml_number,parse_unsigned32_fewer_bytes)72 TEST(sml_number, parse_unsigned32_fewer_bytes) {
73 	hex2binary("64010001", sml_buf_get_current_buf(buf));
74 	u32 *n = sml_u32_parse(buf);
75 	TEST_ASSERT_EQUAL(65537, *n);
76 	sml_u32_free( n );
77 }
78 
TEST(sml_number,parse_unsigned32_optional)79 TEST(sml_number, parse_unsigned32_optional) {
80 	hex2binary("01", sml_buf_get_current_buf(buf));
81 	u32 *n = sml_u32_parse(buf);
82 	TEST_ASSERT_NULL(n);
83 	TEST_ASSERT_EQUAL(1, buf->cursor);
84 	sml_u32_free( n );
85 }
86 
TEST(sml_number,parse_unsigned64)87 TEST(sml_number, parse_unsigned64) {
88 	hex2binary("690000000000000001", sml_buf_get_current_buf(buf));
89 	u64 *n = sml_u64_parse(buf);
90 	TEST_ASSERT_EQUAL(1, *n);
91 	sml_u64_free( n );
92 }
93 
TEST(sml_number,parse_unsigned64_fewer_bytes)94 TEST(sml_number, parse_unsigned64_fewer_bytes) {
95 	hex2binary("67000000000001", sml_buf_get_current_buf(buf));
96 	u64 *n = sml_u64_parse(buf);
97 	TEST_ASSERT_EQUAL(1, *n);
98 	sml_u64_free( n );
99 }
100 
TEST(sml_number,parse_int8)101 TEST(sml_number, parse_int8) {
102 	hex2binary("52FF", sml_buf_get_current_buf(buf));
103 	i8 *n = sml_i8_parse(buf);
104 	TEST_ASSERT_EQUAL(-1, *n);
105 	sml_i8_free( n );
106 }
107 
TEST(sml_number,parse_int16)108 TEST(sml_number, parse_int16) {
109 	hex2binary("53EC78", sml_buf_get_current_buf(buf));
110 	i16 *n = sml_i16_parse(buf);
111 	TEST_ASSERT_EQUAL(-5000, *n);
112 	sml_i16_free( n );
113 }
114 
TEST(sml_number,parse_int32)115 TEST(sml_number, parse_int32) {
116 	hex2binary("55FFFFEC78", sml_buf_get_current_buf(buf));
117 	i32 *n = sml_i32_parse(buf);
118 	TEST_ASSERT_EQUAL(-5000, *n);
119 	sml_i32_free( n );
120 }
121 
TEST(sml_number,parse_int64)122 TEST(sml_number, parse_int64) {
123 	hex2binary("59FFFFFFFFFFFFFFFF", sml_buf_get_current_buf(buf));
124 	i64 *n = sml_i64_parse(buf);
125 	TEST_ASSERT_EQUAL(-1, *n);
126 	sml_i64_free( n );
127 }
128 
TEST(sml_number,parse_int64_fewer_bytes)129 TEST(sml_number, parse_int64_fewer_bytes) {
130 	hex2binary("58FFFFFFFFFFEC78", sml_buf_get_current_buf(buf));
131 	i64 *n = sml_i64_parse(buf);
132 	TEST_ASSERT_EQUAL(-5000, *n);
133 	sml_i64_free( n );
134 }
135 
TEST(sml_number,write_unsigned8)136 TEST(sml_number, write_unsigned8) {
137 	u8 *n = sml_u8_init(1);
138 	sml_u8_write(n, buf);
139 	expected_buf(buf, "6201", 2);
140 	sml_u8_free( n );
141 }
142 
TEST(sml_number,write_integer32)143 TEST(sml_number, write_integer32) {
144 	i32 *n = sml_i32_init(-5000);
145 	sml_i32_write(n, buf);
146 	expected_buf(buf, "55FFFFEC78", 5);
147 	sml_i32_free( n );
148 }
149 
TEST(sml_number,write_integer8_optional)150 TEST(sml_number, write_integer8_optional) {
151 	sml_i8_write(0, buf);
152 	expected_buf(buf, "01", 1);
153 }
154 
TEST_GROUP_RUNNER(sml_number)155 TEST_GROUP_RUNNER(sml_number) {
156 	RUN_TEST_CASE(sml_number, init_unsigned8);
157 	RUN_TEST_CASE(sml_number, init_integer16);
158 
159 	RUN_TEST_CASE(sml_number, parse_unsigned8);
160 	RUN_TEST_CASE(sml_number, parse_unsigned16);
161 	RUN_TEST_CASE(sml_number, parse_unsigned32);
162 	RUN_TEST_CASE(sml_number, parse_unsigned64);
163 	RUN_TEST_CASE(sml_number, parse_unsigned32_fewer_bytes);
164 	RUN_TEST_CASE(sml_number, parse_unsigned64_fewer_bytes);
165 	RUN_TEST_CASE(sml_number, parse_unsigned32_optional);
166 	RUN_TEST_CASE(sml_number, parse_int8);
167 	RUN_TEST_CASE(sml_number, parse_int16);
168 	RUN_TEST_CASE(sml_number, parse_int32);
169 	RUN_TEST_CASE(sml_number, parse_int64);
170 	RUN_TEST_CASE(sml_number, parse_int64_fewer_bytes);
171 
172 	RUN_TEST_CASE(sml_number, write_unsigned8);
173 	RUN_TEST_CASE(sml_number, write_integer32);
174 	RUN_TEST_CASE(sml_number, write_integer8_optional);
175 }
176 
177