skip to content
==> 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}