source: mainline/uspace/lib/c/test/capa.c@ d7f7a4a

Last change on this file since d7f7a4a was d7f7a4a, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 3 years ago

Replace some license headers with SPDX identifier

Headers are replaced using tools/transorm-copyright.sh only
when it can be matched verbatim with the license header used
throughout most of the codebase.

  • Property mode set to 100644
File size: 3.5 KB
RevLine 
[88e7dc5]1/*
[d7f7a4a]2 * SPDX-FileCopyrightText: 2019 Matthieu Riolo
[88e7dc5]3 *
[d7f7a4a]4 * SPDX-License-Identifier: BSD-3-Clause
[88e7dc5]5 */
6
7#include <pcut/pcut.h>
[c24b0dcb]8#include <capa.h>
[88e7dc5]9
10PCUT_INIT;
11
[c24b0dcb]12PCUT_TEST_SUITE(capa);
[88e7dc5]13
[c24b0dcb]14PCUT_TEST(capa_format)
[88e7dc5]15{
16 int block_size = 4;
17 size_t block[] = {
18 0,
19 1,
20 2,
21 10,
22 };
23
24 int input_size = 5;
25 size_t input[] = {
26 0,
27 10,
28 100,
29 1000,
30 1000000,
31 1000000000,
32 };
33
34 const char *out[] = {
35 "0 B",
36 "0 B",
37 "0 B",
38 "0 B",
39
40 "0 B",
41 "10 B",
42 "20 B",
43 "100 B",
44
45 "0 B",
46 "100 B",
47 "200 B",
48 "1.000 kB",
49
50 "0 B",
51 "1.000 kB",
52 "2.000 kB",
53 "10.00 kB",
54
55 "0 B",
56 "1.000 MB",
57 "2.000 MB",
58 "10.00 MB",
59
60 "0 B",
61 "1.000 GB",
62 "2.000 GB",
63 "10.00 GB",
64 };
65
[c24b0dcb]66 capa_spec_t capa;
[88e7dc5]67 char *str;
68 errno_t rc;
69
70 int x, i;
71 for (i = 0; i < input_size; i++) {
72 for (x = 0; x < block_size; x++) {
[c24b0dcb]73 capa_from_blocks(input[i], block[x], &capa);
74 capa_simplify(&capa);
[88e7dc5]75
[c24b0dcb]76 rc = capa_format(&capa, &str);
[88e7dc5]77
78 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
79 PCUT_ASSERT_STR_EQUALS(out[x + (block_size * i)], str);
80 free(str);
81
[c24b0dcb]82 capa_from_blocks(block[x], input[i], &capa);
83 capa_simplify(&capa);
[88e7dc5]84
[c24b0dcb]85 rc = capa_format(&capa, &str);
[88e7dc5]86
87 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
88 PCUT_ASSERT_STR_EQUALS(out[x + (block_size * i)], str);
89 free(str);
90 }
91 }
92}
93
[c24b0dcb]94PCUT_TEST(capa_format_rounding)
[88e7dc5]95{
96 int input_size = 8;
97 uint64_t input[] = {
98 555,
99 5555,
100 55555,
101 555555555,
102 5555555555,
103 555999999,
104 5999999,
105 999999
106 };
107
108 const char *out[] = {
109 "555 B",
110 "5.555 kB",
111 "55.56 kB",
112 "555.6 MB",
113 "5.556 GB",
114 "556.0 MB",
115 "6.000 MB",
116 "1.000 MB",
117 };
118
[c24b0dcb]119 capa_spec_t capa;
[88e7dc5]120 char *str;
121 errno_t rc;
122
123 int i;
124 for (i = 0; i < input_size; i++) {
[c24b0dcb]125 capa_from_blocks(input[i], 1, &capa);
126 capa_simplify(&capa);
[88e7dc5]127
[c24b0dcb]128 rc = capa_format(&capa, &str);
[88e7dc5]129
130 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
131 PCUT_ASSERT_STR_EQUALS(out[i], str);
132 free(str);
133
[c24b0dcb]134 capa_from_blocks(1, input[i], &capa);
135 capa_simplify(&capa);
[88e7dc5]136
[c24b0dcb]137 rc = capa_format(&capa, &str);
[88e7dc5]138
139 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
140 PCUT_ASSERT_STR_EQUALS(out[i], str);
141 free(str);
142 }
143}
144
[c24b0dcb]145PCUT_TEST(capa_parse)
[88e7dc5]146{
147 int input_size = 4;
148 const char *input[] = {
149 "0 B",
150 "100 B",
151 "1 kB",
152 "1.555 kB",
153 };
154
155 int out_cunit[] = {
156 cu_byte,
157 cu_byte,
158 cu_kbyte,
159 cu_kbyte,
160 };
161
162 int out_dp[] = {
163 0,
164 0,
165 0,
166 3,
167 };
168
169 int out_m[] = {
170 0,
171 100,
172 1,
173 1555,
174 };
175
[c24b0dcb]176 capa_spec_t capa;
[88e7dc5]177 errno_t rc;
178 int i;
179
180 for (i = 0; i < input_size; i++) {
[c24b0dcb]181 rc = capa_parse(input[i], &capa);
[88e7dc5]182
183 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
[c24b0dcb]184 PCUT_ASSERT_INT_EQUALS(out_cunit[i], capa.cunit);
185 PCUT_ASSERT_INT_EQUALS(out_dp[i], capa.dp);
186 PCUT_ASSERT_INT_EQUALS(out_m[i], capa.m);
[88e7dc5]187 }
188}
189
[c24b0dcb]190PCUT_TEST(capa_to_blocks)
[88e7dc5]191{
192 int input_size = 0;
193 int input_m[] = {
194 0,
195 1,
196 1000,
197 5555,
198 7777,
199 };
200
201 int input_dp[] = {
202 0,
203 0,
204 3,
205 3,
206 2,
207 };
208
209 int block[] = {
210 1,
211 1,
212 1,
213 2,
214 3,
215 };
216
217 int out_nom[] = {
218 0,
219 1000,
220 1000,
221 2778,
222 25923,
223 };
224
225 int out_min[] = {
226 0,
227 1000,
228 1000,
229 2777,
230 25923,
231 };
232
233 int out_max[] = {
234 0,
235 1000,
236 1000,
237 2778,
238 25924,
239 };
240
[c24b0dcb]241 capa_spec_t capa;
[88e7dc5]242 errno_t rc;
243 int i;
244 uint64_t ret;
245
246 for (i = 0; i < input_size; i++) {
[c24b0dcb]247 capa.m = input_m[i];
248 capa.dp = input_dp[i];
249 capa.cunit = cu_kbyte;
[88e7dc5]250
[c24b0dcb]251 rc = capa_to_blocks(&capa, cv_nom, block[i], &ret);
[88e7dc5]252 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
253 PCUT_ASSERT_INT_EQUALS(out_nom[i], ret);
254
[c24b0dcb]255 rc = capa_to_blocks(&capa, cv_min, block[i], &ret);
[88e7dc5]256 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
257 PCUT_ASSERT_INT_EQUALS(out_min[i], ret);
258
[c24b0dcb]259 rc = capa_to_blocks(&capa, cv_max, block[i], &ret);
[88e7dc5]260 PCUT_ASSERT_ERRNO_VAL(EOK, rc);
261 PCUT_ASSERT_INT_EQUALS(out_max[i], ret);
262 }
263}
264
[c24b0dcb]265PCUT_EXPORT(capa);
Note: See TracBrowser for help on using the repository browser.