perf cpumap: Add more tests for CPU map merging
authorLeo Yan <leo.yan@arm.com>
Thu, 7 Nov 2024 12:53:07 +0000 (12:53 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 9 Dec 2024 20:52:41 +0000 (17:52 -0300)
Add additional tests for CPU map merging to cover more cases.

These tests include different types of arguments, such as when one CPU
map is a subset of another, as well as cases with or without overlap
between the two maps.

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20241107125308.41226-3-leo.yan@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/cpumap.c

index 7f189d57232f59101a435adefcc7afdd3402d891..f8187a801b8e171e0b892192e34821a05c47055f 100644 (file)
@@ -156,21 +156,45 @@ static int test__cpu_map_print(struct test_suite *test __maybe_unused, int subte
        return 0;
 }
 
-static int test__cpu_map_merge(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
+static int __test__cpu_map_merge(const char *lhs, const char *rhs, int nr, const char *expected)
 {
-       struct perf_cpu_map *a = perf_cpu_map__new("4,2,1");
-       struct perf_cpu_map *b = perf_cpu_map__new("4,5,7");
+       struct perf_cpu_map *a = perf_cpu_map__new(lhs);
+       struct perf_cpu_map *b = perf_cpu_map__new(rhs);
        char buf[100];
 
        perf_cpu_map__merge(&a, b);
-       TEST_ASSERT_VAL("failed to merge map: bad nr", perf_cpu_map__nr(a) == 5);
+       TEST_ASSERT_VAL("failed to merge map: bad nr", perf_cpu_map__nr(a) == nr);
        cpu_map__snprint(a, buf, sizeof(buf));
-       TEST_ASSERT_VAL("failed to merge map: bad result", !strcmp(buf, "1-2,4-5,7"));
+       TEST_ASSERT_VAL("failed to merge map: bad result", !strcmp(buf, expected));
        perf_cpu_map__put(b);
        perf_cpu_map__put(a);
        return 0;
 }
 
+static int test__cpu_map_merge(struct test_suite *test __maybe_unused,
+                              int subtest __maybe_unused)
+{
+       int ret;
+
+       ret = __test__cpu_map_merge("4,2,1", "4,5,7", 5, "1-2,4-5,7");
+       if (ret)
+               return ret;
+       ret = __test__cpu_map_merge("1-8", "6-9", 9, "1-9");
+       if (ret)
+               return ret;
+       ret = __test__cpu_map_merge("1-8,12-20", "6-9,15", 18, "1-9,12-20");
+       if (ret)
+               return ret;
+       ret = __test__cpu_map_merge("4,2,1", "1", 3, "1-2,4");
+       if (ret)
+               return ret;
+       ret = __test__cpu_map_merge("1", "4,2,1", 3, "1-2,4");
+       if (ret)
+               return ret;
+       ret = __test__cpu_map_merge("1", "1", 1, "1");
+       return ret;
+}
+
 static int __test__cpu_map_intersect(const char *lhs, const char *rhs, int nr, const char *expected)
 {
        struct perf_cpu_map *a = perf_cpu_map__new(lhs);