Enable make -C tools/testing/radix-tree. Much easier to debug than an in-kernel module. Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> --- tools/include/linux/rosebush.h | 1 + tools/testing/radix-tree/.gitignore | 1 + tools/testing/radix-tree/Makefile | 6 ++++- tools/testing/radix-tree/kunit/test.h | 20 +++++++++++++++ tools/testing/radix-tree/rosebush.c | 36 +++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 tools/include/linux/rosebush.h create mode 100644 tools/testing/radix-tree/kunit/test.h create mode 100644 tools/testing/radix-tree/rosebush.c diff --git a/tools/include/linux/rosebush.h b/tools/include/linux/rosebush.h new file mode 100644 index 000000000000..3f12f4288250 --- /dev/null +++ b/tools/include/linux/rosebush.h @@ -0,0 +1 @@ +#include "../../../include/linux/rosebush.h" diff --git a/tools/testing/radix-tree/.gitignore b/tools/testing/radix-tree/.gitignore index 49bccb90c35b..fb154f26bdab 100644 --- a/tools/testing/radix-tree/.gitignore +++ b/tools/testing/radix-tree/.gitignore @@ -9,3 +9,4 @@ radix-tree.c xarray maple ma_xa_benchmark +rosebush diff --git a/tools/testing/radix-tree/Makefile b/tools/testing/radix-tree/Makefile index 7527f738b4a1..982ff4b7fdeb 100644 --- a/tools/testing/radix-tree/Makefile +++ b/tools/testing/radix-tree/Makefile @@ -4,7 +4,7 @@ CFLAGS += -I. -I../../include -I../../../lib -g -Og -Wall \ -D_LGPL_SOURCE -fsanitize=address -fsanitize=undefined LDFLAGS += -fsanitize=address -fsanitize=undefined LDLIBS+= -lpthread -lurcu -TARGETS = main idr-test multiorder xarray maple +TARGETS = main idr-test multiorder xarray maple rosebush CORE_OFILES := xarray.o radix-tree.o idr.o linux.o test.o find_bit.o bitmap.o \ slab.o maple.o OFILES = main.o $(CORE_OFILES) regression1.o regression2.o regression3.o \ @@ -36,6 +36,8 @@ xarray: $(CORE_OFILES) maple: $(CORE_OFILES) +rosebush: $(CORE_OFILES) + multiorder: multiorder.o $(CORE_OFILES) clean: @@ -62,6 +64,8 @@ xarray.o: ../../../lib/xarray.c ../../../lib/test_xarray.c maple.o: ../../../lib/maple_tree.c ../../../lib/test_maple_tree.c +rosebush.o: ../../../lib/rosebush.c ../../../lib/test_rosebush.c + generated/map-shift.h: @if ! grep -qws $(SHIFT) generated/map-shift.h; then \ echo "#define XA_CHUNK_SHIFT $(SHIFT)" > \ diff --git a/tools/testing/radix-tree/kunit/test.h b/tools/testing/radix-tree/kunit/test.h new file mode 100644 index 000000000000..0805e3695762 --- /dev/null +++ b/tools/testing/radix-tree/kunit/test.h @@ -0,0 +1,20 @@ +struct kunit { +}; + +struct kunit_case { + void (*run_case)(struct kunit *test); +}; + +struct kunit_suite { + char *name; + struct kunit_case *test_cases; +}; + +#define KUNIT_CASE(test_name) { .run_case = test_name, } +#define kunit_test_suite(x) + +#define KUNIT_EXPECT_EQ(test, left, right) \ + KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, NULL) +#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...) \ + assert(left == right) + diff --git a/tools/testing/radix-tree/rosebush.c b/tools/testing/radix-tree/rosebush.c new file mode 100644 index 000000000000..51703737833e --- /dev/null +++ b/tools/testing/radix-tree/rosebush.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * rosebush.c: Userspace testing for rosebush test-suite + * Copyright (c) 2024 Oracle Corporation + * Author: Matthew Wilcox <willy@xxxxxxxxxxxxx> + */ + +#include "test.h" +#include <stdlib.h> +#include <time.h> + +#define module_init(x) +#define module_exit(x) +#define MODULE_AUTHOR(x) +#define MODULE_LICENSE(x) +#define dump_stack() assert(0) + +#include "../../../lib/rosebush.c" +#include "../../../lib/test_rosebush.c" + +int __weak main(void) +{ + struct kunit test; + int i; + + assert(rosebush_suite.test_cases == rosebush_cases); + + for (i = 0; i < ARRAY_SIZE(rosebush_cases); i++) { + if (!rosebush_cases[i].run_case) + continue; + printf("i = %d %p\n", i, rosebush_cases[i].run_case); + rosebush_cases[i].run_case(&test); + } + + return 0; +} -- 2.43.0