Commit | Line | Data |
---|---|---|
7010c033 | 1 | /* |
21cf9b6b | 2 | * Copyright (C) 2015 EfficiOS Inc. |
7010c033 | 3 | * |
9d16b343 | 4 | * SPDX-License-Identifier: GPL-2.0-only |
7010c033 | 5 | * |
7010c033 SM |
6 | */ |
7 | ||
28ab034a | 8 | #include <common/utils.hpp> |
7010c033 | 9 | |
28ab034a JG |
10 | #include <inttypes.h> |
11 | #include <stdio.h> | |
12 | #include <string.h> | |
7010c033 SM |
13 | #include <tap/tap.h> |
14 | ||
7010c033 SM |
15 | /* For error.h */ |
16 | int lttng_opt_quiet = 1; | |
17 | int lttng_opt_verbose = 3; | |
18 | int lttng_opt_mi; | |
19 | ||
f1494934 | 20 | namespace { |
7010c033 | 21 | struct valid_test_input { |
b53d4e59 | 22 | const char *input; |
7010c033 SM |
23 | uint64_t expected_result; |
24 | }; | |
25 | ||
26 | /* Valid test cases */ | |
f1494934 | 27 | struct valid_test_input valid_tests_inputs[] = { |
28ab034a JG |
28 | { "0", 0 }, { "1234", 1234 }, { "1234us", 1234 }, { "16ms", 16000 }, |
29 | { "128ms", 128000 }, { "32s", 32000000 }, { "1m", 60000000 }, { "20m", 1200000000 }, | |
30 | { "1h", 3600000000 }, { "5h", 18000000000 }, { "00", 0 }, { "0us", 0 }, | |
31 | { "0ms", 0 }, { "0s", 0 }, { "0m", 0 }, { "0h", 0 }, | |
32 | { "00us", 0 }, { "00ms", 0 }, { "00s", 0 }, { "00m", 0 }, | |
33 | { "00h", 0 }, { "12ms", 12000 }, { "3597us", 3597 }, { "+5", 5 }, | |
34 | { "08", 8 }, { "0145us", 145 }, | |
7010c033 | 35 | }; |
f1494934 | 36 | const int num_valid_tests = sizeof(valid_tests_inputs) / sizeof(valid_tests_inputs[0]); |
7010c033 SM |
37 | |
38 | /* Invalid test cases */ | |
f1494934 | 39 | const char *invalid_tests_inputs[] = { |
28ab034a JG |
40 | "", |
41 | " ", | |
42 | "-1", | |
43 | "m", | |
44 | "4611686018427387904s", | |
45 | "0x40M", | |
46 | "0x", | |
47 | "x0", | |
48 | "0xx0", | |
49 | "07mm", | |
50 | "0xm", | |
51 | "0Xs", | |
52 | "0x0ss", | |
53 | "0a", | |
54 | "0B", | |
55 | "0x3 s", | |
56 | "0xbs ", | |
57 | "14ns", | |
58 | "0xbs", | |
59 | "14ns", | |
60 | "14ms garbage after value", | |
61 | "0x14s", | |
62 | "0u", | |
63 | "5mS", | |
64 | "5Ms", | |
65 | "12ussr", | |
66 | "67msrp", | |
67 | "14si", | |
68 | "12mo", | |
69 | "53hi", | |
7010c033 | 70 | }; |
f1494934 JG |
71 | const int num_invalid_tests = sizeof(invalid_tests_inputs) / sizeof(invalid_tests_inputs[0]); |
72 | } /* namespace */ | |
7010c033 | 73 | |
cd9adb8b | 74 | static void test_utils_parse_time_suffix() |
7010c033 SM |
75 | { |
76 | uint64_t result; | |
77 | int ret; | |
78 | int i; | |
79 | ||
80 | /* Test valid cases */ | |
81 | for (i = 0; i < num_valid_tests; i++) { | |
81684730 | 82 | char name[256]; |
7010c033 SM |
83 | |
84 | ret = utils_parse_time_suffix(valid_tests_inputs[i].input, &result); | |
28ab034a JG |
85 | sprintf(name, |
86 | "valid test case: %s expected %" PRIu64, | |
87 | valid_tests_inputs[i].input, | |
88 | result); | |
9f4a25d3 | 89 | ok(ret == 0 && result == valid_tests_inputs[i].expected_result, "%s", name); |
7010c033 SM |
90 | } |
91 | ||
92 | /* Test invalid cases */ | |
93 | for (i = 0; i < num_invalid_tests; i++) { | |
94 | char name[100]; | |
95 | ||
96 | sprintf(name, "invalid test case: %s", invalid_tests_inputs[i]); | |
97 | ||
98 | ret = utils_parse_time_suffix(invalid_tests_inputs[i], &result); | |
9f4a25d3 | 99 | ok(ret != 0, "%s", name); |
7010c033 SM |
100 | } |
101 | } | |
102 | ||
cd9adb8b | 103 | int main() |
7010c033 SM |
104 | { |
105 | plan_tests(num_valid_tests + num_invalid_tests); | |
106 | ||
107 | diag("utils_parse_time_suffix tests"); | |
108 | ||
109 | test_utils_parse_time_suffix(); | |
110 | ||
111 | return exit_status(); | |
112 | } |