==> tests/net.c <==1/* crates/mesh-top/src/net.rs's unit tests, ported: meter rates over the window, wraps, restarts,
2 * the formatting. */
3#include "mesh/check.h"
4#include "mesh/top_net.h"
5
6#include <math.h>
7#include <string.h>
8
9int main(void) {
10 mt_meter m = {0};
11 CHECK(mt_meter_per_s(&m) == 0.0);
12 mt_meter_push(&m, 1000, 0);
13 CHECK(mt_meter_per_s(&m) == 0.0);
14 mt_meter_push(&m, 1500, 500);
15 CHECK(mt_meter_per_s(&m) == 1000.0);
16 for (uint64_t i = 2; i < 10; i++) mt_meter_push(&m, 1000 + 500 * i, 500 * i + 100 * i * i);
17 CHECK(m.n <= 3);
18 CHECK(mt_meter_per_s(&m) > 2000.0);
19 mt_meter_free(&m);
20 mt_meter_push(&m, 0, 0);
21 mt_meter_push(&m, 100, 10);
22 mt_meter_push(&m, 100, 20);
23 CHECK(mt_meter_per_s(&m) == 200.0);
24 mt_meter_free(&m);
25 /* Wraps and restarts. */
26 mt_meter_push(&m, 0, UINT64_MAX - 499);
27 mt_meter_push(&m, 1000, 500);
28 CHECK(mt_meter_per_s(&m) == 1000.0);
29 mt_meter_push(&m, 2000, 10);
30 CHECK(mt_meter_per_s(&m) == 0.0);
31 mt_meter_push(&m, 3000, 1010);
32 CHECK(mt_meter_per_s(&m) == 1000.0);
33 mt_meter_push(&m, 500, 2000);
34 CHECK(mt_meter_per_s(&m) == 0.0);
35 mt_meter_push(&m, 1500, 2400);
36 CHECK(mt_meter_per_s(&m) == 400.0);
37 mt_meter_free(&m);
38 char s[128];
39 mt_human(870.0, s, sizeof s);
40 CHECK_S(s, "870 B/s");
41 mt_human(12345.0, s, sizeof s);
42 CHECK_S(s, "12.3 kB/s");
43 mt_human(1234567.0, s, sizeof s);
44 CHECK_S(s, "1.2 MB/s");
45 mt_human((double)NAN, s, sizeof s);
46 CHECK_S(s, "0 B/s");
47 mt_short(999.0, s, sizeof s);
48 CHECK_S(s, "999");
49 mt_short(154200.0, s, sizeof s);
50 CHECK_S(s, "154k");
51 mt_short(1250000.0, s, sizeof s);
52 CHECK_S(s, "1.2M");
53 uint64_t v[8] = {0, 1, 2, 3, 4, 5, 6, 7};
54 mt_spark(v, 8, 8, s);
55 CHECK_S(s, "▁▂▃▄▅▆▇█");
56 mt_spark(v, 8, 10, s);
57 CHECK_S(s, " ▁▂▃▄▅▆▇█");
58 mt_spark(NULL, 0, 3, s);
59 CHECK_S(s, " ");
60 return mesh_check_done();
61}