]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-cpu-set-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 Copyright 2010 Lennart Poettering
6 #include "alloc-util.h"
7 #include "cpu-set-util.h"
10 static void test_parse_cpu_set(void) {
15 /* Simple range (from CPUAffinity example) */
16 ncpus
= parse_cpu_set_and_warn("1 2", &c
, NULL
, "fake", 1, "CPUAffinity");
17 assert_se(ncpus
>= 1024);
18 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus
), c
));
19 assert_se(CPU_ISSET_S(2, CPU_ALLOC_SIZE(ncpus
), c
));
20 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 2);
23 /* A more interesting range */
24 ncpus
= parse_cpu_set_and_warn("0 1 2 3 8 9 10 11", &c
, NULL
, "fake", 1, "CPUAffinity");
25 assert_se(ncpus
>= 1024);
26 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
27 for (cpu
= 0; cpu
< 4; cpu
++)
28 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
29 for (cpu
= 8; cpu
< 12; cpu
++)
30 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
34 ncpus
= parse_cpu_set_and_warn("8 '9' 10 \"11\"", &c
, NULL
, "fake", 1, "CPUAffinity");
35 assert_se(ncpus
>= 1024);
36 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 4);
37 for (cpu
= 8; cpu
< 12; cpu
++)
38 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
41 /* Use commas as separators */
42 ncpus
= parse_cpu_set_and_warn("0,1,2,3 8,9,10,11", &c
, NULL
, "fake", 1, "CPUAffinity");
43 assert_se(ncpus
>= 1024);
44 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
45 for (cpu
= 0; cpu
< 4; cpu
++)
46 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
47 for (cpu
= 8; cpu
< 12; cpu
++)
48 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
51 /* Commas with spaces (and trailing comma, space) */
52 ncpus
= parse_cpu_set_and_warn("0, 1, 2, 3, 4, 5, 6, 7, ", &c
, NULL
, "fake", 1, "CPUAffinity");
53 assert_se(ncpus
>= 1024);
54 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
55 for (cpu
= 0; cpu
< 8; cpu
++)
56 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
60 ncpus
= parse_cpu_set_and_warn("0-3,8-11", &c
, NULL
, "fake", 1, "CPUAffinity");
61 assert_se(ncpus
>= 1024);
62 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
63 for (cpu
= 0; cpu
< 4; cpu
++)
64 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
65 for (cpu
= 8; cpu
< 12; cpu
++)
66 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
69 /* Ranges with trailing comma, space */
70 ncpus
= parse_cpu_set_and_warn("0-3 8-11, ", &c
, NULL
, "fake", 1, "CPUAffinity");
71 assert_se(ncpus
>= 1024);
72 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
73 for (cpu
= 0; cpu
< 4; cpu
++)
74 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
75 for (cpu
= 8; cpu
< 12; cpu
++)
76 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
79 /* Negative range (returns empty cpu_set) */
80 ncpus
= parse_cpu_set_and_warn("3-0", &c
, NULL
, "fake", 1, "CPUAffinity");
81 assert_se(ncpus
>= 1024);
82 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 0);
85 /* Overlapping ranges */
86 ncpus
= parse_cpu_set_and_warn("0-7 4-11", &c
, NULL
, "fake", 1, "CPUAffinity");
87 assert_se(ncpus
>= 1024);
88 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 12);
89 for (cpu
= 0; cpu
< 12; cpu
++)
90 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
93 /* Mix ranges and individual CPUs */
94 ncpus
= parse_cpu_set_and_warn("0,1 4-11", &c
, NULL
, "fake", 1, "CPUAffinity");
95 assert_se(ncpus
>= 1024);
96 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 10);
97 assert_se(CPU_ISSET_S(0, CPU_ALLOC_SIZE(ncpus
), c
));
98 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus
), c
));
99 for (cpu
= 4; cpu
< 12; cpu
++)
100 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
101 c
= cpu_set_mfree(c
);
104 ncpus
= parse_cpu_set_and_warn("0 1 2 3 garbage", &c
, NULL
, "fake", 1, "CPUAffinity");
105 assert_se(ncpus
< 0);
108 /* Range with garbage */
109 ncpus
= parse_cpu_set_and_warn("0-3 8-garbage", &c
, NULL
, "fake", 1, "CPUAffinity");
110 assert_se(ncpus
< 0);
115 ncpus
= parse_cpu_set_and_warn("", &c
, NULL
, "fake", 1, "CPUAffinity");
116 assert_se(ncpus
== 0); /* empty string returns 0 */
119 /* Runaway quoted string */
120 ncpus
= parse_cpu_set_and_warn("0 1 2 3 \"4 5 6 7 ", &c
, NULL
, "fake", 1, "CPUAffinity");
121 assert_se(ncpus
< 0);
125 int main(int argc
, char *argv
[]) {
126 test_parse_cpu_set();