]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-cpu-set-util.c
tree-wide: remove Lennart's copyright lines
[thirdparty/systemd.git] / src / test / test-cpu-set-util.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
7ba365a9
RC
2
3#include "alloc-util.h"
4#include "cpu-set-util.h"
5#include "macro.h"
6
7static void test_parse_cpu_set(void) {
8 cpu_set_t *c = NULL;
9 int ncpus;
10 int cpu;
11
12 /* Simple range (from CPUAffinity example) */
13 ncpus = parse_cpu_set_and_warn("1 2", &c, NULL, "fake", 1, "CPUAffinity");
14 assert_se(ncpus >= 1024);
15 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus), c));
16 assert_se(CPU_ISSET_S(2, CPU_ALLOC_SIZE(ncpus), c));
17 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 2);
da681e1b 18 c = cpu_set_mfree(c);
7ba365a9
RC
19
20 /* A more interesting range */
21 ncpus = parse_cpu_set_and_warn("0 1 2 3 8 9 10 11", &c, NULL, "fake", 1, "CPUAffinity");
22 assert_se(ncpus >= 1024);
23 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
24 for (cpu = 0; cpu < 4; cpu++)
25 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
26 for (cpu = 8; cpu < 12; cpu++)
27 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 28 c = cpu_set_mfree(c);
7ba365a9
RC
29
30 /* Quoted strings */
31 ncpus = parse_cpu_set_and_warn("8 '9' 10 \"11\"", &c, NULL, "fake", 1, "CPUAffinity");
32 assert_se(ncpus >= 1024);
33 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 4);
34 for (cpu = 8; cpu < 12; cpu++)
35 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 36 c = cpu_set_mfree(c);
7ba365a9
RC
37
38 /* Use commas as separators */
39 ncpus = parse_cpu_set_and_warn("0,1,2,3 8,9,10,11", &c, NULL, "fake", 1, "CPUAffinity");
40 assert_se(ncpus >= 1024);
41 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
42 for (cpu = 0; cpu < 4; cpu++)
43 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
44 for (cpu = 8; cpu < 12; cpu++)
45 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 46 c = cpu_set_mfree(c);
7ba365a9
RC
47
48 /* Commas with spaces (and trailing comma, space) */
49 ncpus = parse_cpu_set_and_warn("0, 1, 2, 3, 4, 5, 6, 7, ", &c, NULL, "fake", 1, "CPUAffinity");
50 assert_se(ncpus >= 1024);
51 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
52 for (cpu = 0; cpu < 8; cpu++)
53 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 54 c = cpu_set_mfree(c);
7ba365a9
RC
55
56 /* Ranges */
57 ncpus = parse_cpu_set_and_warn("0-3,8-11", &c, NULL, "fake", 1, "CPUAffinity");
58 assert_se(ncpus >= 1024);
59 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
60 for (cpu = 0; cpu < 4; cpu++)
61 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
62 for (cpu = 8; cpu < 12; cpu++)
63 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 64 c = cpu_set_mfree(c);
7ba365a9
RC
65
66 /* Ranges with trailing comma, space */
67 ncpus = parse_cpu_set_and_warn("0-3 8-11, ", &c, NULL, "fake", 1, "CPUAffinity");
68 assert_se(ncpus >= 1024);
69 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
70 for (cpu = 0; cpu < 4; cpu++)
71 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
72 for (cpu = 8; cpu < 12; cpu++)
73 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 74 c = cpu_set_mfree(c);
7ba365a9
RC
75
76 /* Negative range (returns empty cpu_set) */
77 ncpus = parse_cpu_set_and_warn("3-0", &c, NULL, "fake", 1, "CPUAffinity");
78 assert_se(ncpus >= 1024);
79 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 0);
da681e1b 80 c = cpu_set_mfree(c);
7ba365a9
RC
81
82 /* Overlapping ranges */
83 ncpus = parse_cpu_set_and_warn("0-7 4-11", &c, NULL, "fake", 1, "CPUAffinity");
84 assert_se(ncpus >= 1024);
85 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 12);
86 for (cpu = 0; cpu < 12; cpu++)
87 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 88 c = cpu_set_mfree(c);
7ba365a9
RC
89
90 /* Mix ranges and individual CPUs */
91 ncpus = parse_cpu_set_and_warn("0,1 4-11", &c, NULL, "fake", 1, "CPUAffinity");
92 assert_se(ncpus >= 1024);
93 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 10);
94 assert_se(CPU_ISSET_S(0, CPU_ALLOC_SIZE(ncpus), c));
95 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus), c));
96 for (cpu = 4; cpu < 12; cpu++)
97 assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c));
da681e1b 98 c = cpu_set_mfree(c);
7ba365a9
RC
99
100 /* Garbage */
101 ncpus = parse_cpu_set_and_warn("0 1 2 3 garbage", &c, NULL, "fake", 1, "CPUAffinity");
102 assert_se(ncpus < 0);
103 assert_se(!c);
104
105 /* Range with garbage */
106 ncpus = parse_cpu_set_and_warn("0-3 8-garbage", &c, NULL, "fake", 1, "CPUAffinity");
107 assert_se(ncpus < 0);
108 assert_se(!c);
109
110 /* Empty string */
111 c = NULL;
112 ncpus = parse_cpu_set_and_warn("", &c, NULL, "fake", 1, "CPUAffinity");
113 assert_se(ncpus == 0); /* empty string returns 0 */
114 assert_se(!c);
115
efd08022 116 /* Runaway quoted string */
7ba365a9
RC
117 ncpus = parse_cpu_set_and_warn("0 1 2 3 \"4 5 6 7 ", &c, NULL, "fake", 1, "CPUAffinity");
118 assert_se(ncpus < 0);
119 assert_se(!c);
120}
121
122int main(int argc, char *argv[]) {
123 test_parse_cpu_set();
124
125 return 0;
126}