]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-cpu-set-util.c
40956a3594d6dac878109d363491ffffef441fce
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2010 Lennart Poettering
8 #include "alloc-util.h"
9 #include "cpu-set-util.h"
12 static void test_parse_cpu_set(void) {
17 /* Simple range (from CPUAffinity example) */
18 ncpus
= parse_cpu_set_and_warn("1 2", &c
, NULL
, "fake", 1, "CPUAffinity");
19 assert_se(ncpus
>= 1024);
20 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus
), c
));
21 assert_se(CPU_ISSET_S(2, CPU_ALLOC_SIZE(ncpus
), c
));
22 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 2);
25 /* A more interesting range */
26 ncpus
= parse_cpu_set_and_warn("0 1 2 3 8 9 10 11", &c
, NULL
, "fake", 1, "CPUAffinity");
27 assert_se(ncpus
>= 1024);
28 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
29 for (cpu
= 0; cpu
< 4; cpu
++)
30 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
31 for (cpu
= 8; cpu
< 12; cpu
++)
32 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
36 ncpus
= parse_cpu_set_and_warn("8 '9' 10 \"11\"", &c
, NULL
, "fake", 1, "CPUAffinity");
37 assert_se(ncpus
>= 1024);
38 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 4);
39 for (cpu
= 8; cpu
< 12; cpu
++)
40 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
43 /* Use commas as separators */
44 ncpus
= parse_cpu_set_and_warn("0,1,2,3 8,9,10,11", &c
, NULL
, "fake", 1, "CPUAffinity");
45 assert_se(ncpus
>= 1024);
46 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
47 for (cpu
= 0; cpu
< 4; cpu
++)
48 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
49 for (cpu
= 8; cpu
< 12; cpu
++)
50 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
53 /* Commas with spaces (and trailing comma, space) */
54 ncpus
= parse_cpu_set_and_warn("0, 1, 2, 3, 4, 5, 6, 7, ", &c
, NULL
, "fake", 1, "CPUAffinity");
55 assert_se(ncpus
>= 1024);
56 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
57 for (cpu
= 0; cpu
< 8; cpu
++)
58 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
62 ncpus
= parse_cpu_set_and_warn("0-3,8-11", &c
, NULL
, "fake", 1, "CPUAffinity");
63 assert_se(ncpus
>= 1024);
64 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
65 for (cpu
= 0; cpu
< 4; cpu
++)
66 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
67 for (cpu
= 8; cpu
< 12; cpu
++)
68 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
71 /* Ranges with trailing comma, space */
72 ncpus
= parse_cpu_set_and_warn("0-3 8-11, ", &c
, NULL
, "fake", 1, "CPUAffinity");
73 assert_se(ncpus
>= 1024);
74 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 8);
75 for (cpu
= 0; cpu
< 4; cpu
++)
76 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
77 for (cpu
= 8; cpu
< 12; cpu
++)
78 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
81 /* Negative range (returns empty cpu_set) */
82 ncpus
= parse_cpu_set_and_warn("3-0", &c
, NULL
, "fake", 1, "CPUAffinity");
83 assert_se(ncpus
>= 1024);
84 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 0);
87 /* Overlapping ranges */
88 ncpus
= parse_cpu_set_and_warn("0-7 4-11", &c
, NULL
, "fake", 1, "CPUAffinity");
89 assert_se(ncpus
>= 1024);
90 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 12);
91 for (cpu
= 0; cpu
< 12; cpu
++)
92 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
95 /* Mix ranges and individual CPUs */
96 ncpus
= parse_cpu_set_and_warn("0,1 4-11", &c
, NULL
, "fake", 1, "CPUAffinity");
97 assert_se(ncpus
>= 1024);
98 assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus
), c
) == 10);
99 assert_se(CPU_ISSET_S(0, CPU_ALLOC_SIZE(ncpus
), c
));
100 assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus
), c
));
101 for (cpu
= 4; cpu
< 12; cpu
++)
102 assert_se(CPU_ISSET_S(cpu
, CPU_ALLOC_SIZE(ncpus
), c
));
103 c
= cpu_set_mfree(c
);
106 ncpus
= parse_cpu_set_and_warn("0 1 2 3 garbage", &c
, NULL
, "fake", 1, "CPUAffinity");
107 assert_se(ncpus
< 0);
110 /* Range with garbage */
111 ncpus
= parse_cpu_set_and_warn("0-3 8-garbage", &c
, NULL
, "fake", 1, "CPUAffinity");
112 assert_se(ncpus
< 0);
117 ncpus
= parse_cpu_set_and_warn("", &c
, NULL
, "fake", 1, "CPUAffinity");
118 assert_se(ncpus
== 0); /* empty string returns 0 */
121 /* Runaway quoted string */
122 ncpus
= parse_cpu_set_and_warn("0 1 2 3 \"4 5 6 7 ", &c
, NULL
, "fake", 1, "CPUAffinity");
123 assert_se(ncpus
< 0);
127 int main(int argc
, char *argv
[]) {
128 test_parse_cpu_set();