]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-cpu-set-util.c
c9272459b44a195002448452c80db424d1a74074
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "alloc-util.h"
4 #include "cpu-set-util.h"
7 static void test_parse_cpu_set(void) {
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);
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
));
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
));
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
));
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
));
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
));
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
));
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);
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
));
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
));
101 ncpus
= parse_cpu_set_and_warn("0 1 2 3 garbage", &c
, NULL
, "fake", 1, "CPUAffinity");
102 assert_se(ncpus
< 0);
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);
112 ncpus
= parse_cpu_set_and_warn("", &c
, NULL
, "fake", 1, "CPUAffinity");
113 assert_se(ncpus
== 0); /* empty string returns 0 */
116 /* Runaway quoted string */
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);
122 int main(int argc
, char *argv
[]) {
123 test_parse_cpu_set();