History

lib/tests: convert test_min_heap module to KUnit

Move lib/test_min_heap.c to lib/tests/min_heap_kunit.c and convert it to use KUnit. This change switches the ad-hoc test code to standard KUnit test cases. The test data remains the same, but the verification logic is updated to use KUNIT_EXPECT_* macros. Also remove CONFIG_TEST_MIN_HEAP from arch/*/configs/* because it is no longer used. The new CONFIG_MIN_HEAP_KUNIT_TEST will be automatically enabled by CONFIG_KUNIT_ALL_TESTS. The reasons for converting to KUnit are: 1. Standardization: Switching from ad-hoc printk-based reporting to the standard KTAP format makes it easier for CI systems to parse and report test results 2. Better Diagnostics: Using KUNIT_EXPECT_* macros automatically provides detailed diagnostics on failure. 3. Tooling Integration: It allows the test to be managed and executed using standard KUnit tools.

Ryota Sakamoto committed 10 months ago

Commit d30aca31 parent 0e7fd2319 files · +81 −106Browse files

Unified · Split

19 files
  1. MAINTAINERS +1 −1
  2. arch/m68k/configs/amiga_defconfig +0 −1
  3. arch/m68k/configs/apollo_defconfig +0 −1
  4. arch/m68k/configs/atari_defconfig +0 −1
  5. arch/m68k/configs/bvme6000_defconfig +0 −1
  6. arch/m68k/configs/hp300_defconfig +0 −1
  7. arch/m68k/configs/mac_defconfig +0 −1
  8. arch/m68k/configs/multi_defconfig +0 −1
  9. arch/m68k/configs/mvme147_defconfig +0 −1
  10. arch/m68k/configs/mvme16x_defconfig +0 −1
  11. arch/m68k/configs/q40_defconfig +0 −1
  12. arch/m68k/configs/sun3_defconfig +0 −1
  13. arch/m68k/configs/sun3x_defconfig +0 −1
  14. arch/powerpc/configs/ppc64_defconfig +0 −1
  15. arch/s390/configs/debug_defconfig +1 −1
  16. lib/Kconfig.debug +11 −10
  17. lib/Makefile +0 −1
  18. lib/tests/Makefile +1 −0
  19. lib/tests/min_heap_kunit.c +67 −80
MAINTAINERS+1−1
@@ -17456,7 +17456,7 @@ S: Maintained · 17455 unmodified lines
1745617456 F: Documentation/core-api/min_heap.rst
1745717457 F: include/linux/min_heap.h
1745817458 F: lib/min_heap.c
17459−F: lib/test_min_heap.c
17459+F: lib/tests/min_heap_kunit.c
1746017460
1746117461 MIPI CCS, SMIA AND SMIA++ IMAGE SENSOR DRIVER
1746217462 M: Sakari Ailus <sakari.ailus@linux.intel.com>
arch/m68k/configs/amiga_defconfig+0−1
@@ -609,7 +609,6 @@ CONFIG_EARLY_PRINTK=y · 608 unmodified lines
609609 CONFIG_KUNIT=m
610610 CONFIG_KUNIT_ALL_TESTS=m
611611 CONFIG_TEST_DHRY=m
612−CONFIG_TEST_MIN_HEAP=m
613612 CONFIG_TEST_DIV64=m
614613 CONFIG_TEST_MULDIV64=m
615614 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/apollo_defconfig+0−1
@@ -566,7 +566,6 @@ CONFIG_EARLY_PRINTK=y · 565 unmodified lines
566566 CONFIG_KUNIT=m
567567 CONFIG_KUNIT_ALL_TESTS=m
568568 CONFIG_TEST_DHRY=m
569−CONFIG_TEST_MIN_HEAP=m
570569 CONFIG_TEST_DIV64=m
571570 CONFIG_TEST_MULDIV64=m
572571 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/atari_defconfig+0−1
@@ -586,7 +586,6 @@ CONFIG_EARLY_PRINTK=y · 585 unmodified lines
586586 CONFIG_KUNIT=m
587587 CONFIG_KUNIT_ALL_TESTS=m
588588 CONFIG_TEST_DHRY=m
589−CONFIG_TEST_MIN_HEAP=m
590589 CONFIG_TEST_DIV64=m
591590 CONFIG_TEST_MULDIV64=m
592591 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/bvme6000_defconfig+0−1
@@ -558,7 +558,6 @@ CONFIG_EARLY_PRINTK=y · 557 unmodified lines
558558 CONFIG_KUNIT=m
559559 CONFIG_KUNIT_ALL_TESTS=m
560560 CONFIG_TEST_DHRY=m
561−CONFIG_TEST_MIN_HEAP=m
562561 CONFIG_TEST_DIV64=m
563562 CONFIG_TEST_MULDIV64=m
564563 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/hp300_defconfig+0−1
@@ -568,7 +568,6 @@ CONFIG_EARLY_PRINTK=y · 567 unmodified lines
568568 CONFIG_KUNIT=m
569569 CONFIG_KUNIT_ALL_TESTS=m
570570 CONFIG_TEST_DHRY=m
571−CONFIG_TEST_MIN_HEAP=m
572571 CONFIG_TEST_DIV64=m
573572 CONFIG_TEST_MULDIV64=m
574573 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/mac_defconfig+0−1
@@ -585,7 +585,6 @@ CONFIG_EARLY_PRINTK=y · 584 unmodified lines
585585 CONFIG_KUNIT=m
586586 CONFIG_KUNIT_ALL_TESTS=m
587587 CONFIG_TEST_DHRY=m
588−CONFIG_TEST_MIN_HEAP=m
589588 CONFIG_TEST_DIV64=m
590589 CONFIG_TEST_MULDIV64=m
591590 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/multi_defconfig+0−1
@@ -672,7 +672,6 @@ CONFIG_EARLY_PRINTK=y · 671 unmodified lines
672672 CONFIG_KUNIT=m
673673 CONFIG_KUNIT_ALL_TESTS=m
674674 CONFIG_TEST_DHRY=m
675−CONFIG_TEST_MIN_HEAP=m
676675 CONFIG_TEST_DIV64=m
677676 CONFIG_TEST_MULDIV64=m
678677 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/mvme147_defconfig+0−1
@@ -558,7 +558,6 @@ CONFIG_EARLY_PRINTK=y · 557 unmodified lines
558558 CONFIG_KUNIT=m
559559 CONFIG_KUNIT_ALL_TESTS=m
560560 CONFIG_TEST_DHRY=m
561−CONFIG_TEST_MIN_HEAP=m
562561 CONFIG_TEST_DIV64=m
563562 CONFIG_TEST_MULDIV64=m
564563 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/mvme16x_defconfig+0−1
@@ -559,7 +559,6 @@ CONFIG_EARLY_PRINTK=y · 558 unmodified lines
559559 CONFIG_KUNIT=m
560560 CONFIG_KUNIT_ALL_TESTS=m
561561 CONFIG_TEST_DHRY=m
562−CONFIG_TEST_MIN_HEAP=m
563562 CONFIG_TEST_DIV64=m
564563 CONFIG_TEST_MULDIV64=m
565564 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/q40_defconfig+0−1
@@ -575,7 +575,6 @@ CONFIG_EARLY_PRINTK=y · 574 unmodified lines
575575 CONFIG_KUNIT=m
576576 CONFIG_KUNIT_ALL_TESTS=m
577577 CONFIG_TEST_DHRY=m
578−CONFIG_TEST_MIN_HEAP=m
579578 CONFIG_TEST_DIV64=m
580579 CONFIG_TEST_MULDIV64=m
581580 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/sun3_defconfig+0−1
@@ -555,7 +555,6 @@ CONFIG_WW_MUTEX_SELFTEST=m · 554 unmodified lines
555555 CONFIG_KUNIT=m
556556 CONFIG_KUNIT_ALL_TESTS=m
557557 CONFIG_TEST_DHRY=m
558−CONFIG_TEST_MIN_HEAP=m
559558 CONFIG_TEST_DIV64=m
560559 CONFIG_TEST_MULDIV64=m
561560 CONFIG_REED_SOLOMON_TEST=m
arch/m68k/configs/sun3x_defconfig+0−1
@@ -556,7 +556,6 @@ CONFIG_EARLY_PRINTK=y · 555 unmodified lines
556556 CONFIG_KUNIT=m
557557 CONFIG_KUNIT_ALL_TESTS=m
558558 CONFIG_TEST_DHRY=m
559−CONFIG_TEST_MIN_HEAP=m
560559 CONFIG_TEST_DIV64=m
561560 CONFIG_TEST_MULDIV64=m
562561 CONFIG_REED_SOLOMON_TEST=m
arch/powerpc/configs/ppc64_defconfig+0−1
@@ -426,7 +426,6 @@ CONFIG_BOOTX_TEXT=y · 425 unmodified lines
426426 CONFIG_KUNIT=m
427427 CONFIG_KUNIT_ALL_TESTS=m
428428 CONFIG_LKDTM=m
429−CONFIG_TEST_MIN_HEAP=m
430429 CONFIG_TEST_DIV64=m
431430 CONFIG_BACKTRACE_SELF_TEST=m
432431 CONFIG_TEST_REF_TRACKER=m
arch/s390/configs/debug_defconfig+1−1
@@ -921,7 +921,7 @@ CONFIG_FAULT_INJECTION_DEBUG_FS=y · 920 unmodified lines
921921 CONFIG_FAULT_INJECTION_CONFIGFS=y
922922 CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
923923 CONFIG_LKDTM=m
924−CONFIG_TEST_MIN_HEAP=y
924+CONFIG_MIN_HEAP_KUNIT_TEST=m
925925 CONFIG_KPROBES_SANITY_TEST=m
926926 CONFIG_RBTREE_TEST=y
927927 CONFIG_INTERVAL_TREE_TEST=m
lib/Kconfig.debug+11−10
@@ -2278,16 +2278,6 @@ config TEST_LIST_SORT · 2277 unmodified lines
22782278
22792279 If unsure, say N.
22802280
2281−config TEST_MIN_HEAP
2282− tristate "Min heap test"
2283− depends on DEBUG_KERNEL || m
2284− help
2285− Enable this to turn on min heap function tests. This test is
2286− executed only once during system boot (so affects only boot time),
2287− or at module load time.
2288−
2289− If unsure, say N.
2290−
22912281 config TEST_SORT
22922282 tristate "Array-based sort test" if !KUNIT_ALL_TESTS
22932283 depends on KUNIT
@@ -2878,6 +2868,17 @@ config MEMCPY_KUNIT_TEST · 584 unmodified lines
28782868
28792869 If unsure, say N.
28802870
2871+config MIN_HEAP_KUNIT_TEST
2872+ tristate "Min heap test" if !KUNIT_ALL_TESTS
2873+ depends on KUNIT
2874+ default KUNIT_ALL_TESTS
2875+ help
2876+ This option enables the KUnit test suite for the min heap library
2877+ which provides functions for creating and managing min heaps.
2878+ The test suite checks the functionality of the min heap library.
2879+
2880+ If unsure, say N
2881+
28812882 config IS_SIGNED_TYPE_KUNIT_TEST
28822883 tristate "Test is_signed_type() macro" if !KUNIT_ALL_TESTS
28832884 depends on KUNIT
lib/Makefile+0−1
@@ -75,7 +75,6 @@ obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o · 74 unmodified lines
7575 CFLAGS_test_ubsan.o += $(call cc-disable-warning, unused-but-set-variable)
7676 UBSAN_SANITIZE_test_ubsan.o := y
7777 obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
78−obj-$(CONFIG_TEST_MIN_HEAP) += test_min_heap.o
7978 obj-$(CONFIG_TEST_LKM) += test_module.o
8079 obj-$(CONFIG_TEST_VMALLOC) += test_vmalloc.o
8180 obj-$(CONFIG_TEST_RHASHTABLE) += test_rhashtable.o
lib/tests/Makefile+1−0
@@ -33,6 +33,7 @@ CFLAGS_longest_symbol_kunit.o += $(call cc-disable-warning, missing-prototypes) · 32 unmodified lines
3333 obj-$(CONFIG_LONGEST_SYM_KUNIT_TEST) += longest_symbol_kunit.o
3434
3535 obj-$(CONFIG_MEMCPY_KUNIT_TEST) += memcpy_kunit.o
36+obj-$(CONFIG_MIN_HEAP_KUNIT_TEST) += min_heap_kunit.o
3637 CFLAGS_overflow_kunit.o = $(call cc-disable-warning, tautological-constant-out-of-range-compare)
3738 obj-$(CONFIG_OVERFLOW_KUNIT_TEST) += overflow_kunit.o
3839 obj-$(CONFIG_PRINTF_KUNIT_TEST) += printf_kunit.o
lib/tests/min_heap_kunit.crenamed from lib/test_min_heap.c+67−80
@@ -1,60 +1,66 @@
11 // SPDX-License-Identifier: GPL-2.0-only
2−#define pr_fmt(fmt) "min_heap_test: " fmt
3−
42 /*
53 * Test cases for the min max heap.
64 */
75
8−#include <linux/log2.h>
6+#include <kunit/test.h>
97 #include <linux/min_heap.h>
108 #include <linux/module.h>
11−#include <linux/printk.h>
129 #include <linux/random.h>
1310
11+struct min_heap_test_case {
12+ const char *str;
13+ bool min_heap;
14+};
15+
16+static struct min_heap_test_case min_heap_cases[] = {
17+ {
18+ .str = "min",
19+ .min_heap = true,
20+ },
21+ {
22+ .str = "max",
23+ .min_heap = false,
24+ },
25+};
26+
27+KUNIT_ARRAY_PARAM_DESC(min_heap, min_heap_cases, str);
28+
1429 DEFINE_MIN_HEAP(int, min_heap_test);
1530
16−static __init bool less_than(const void *lhs, const void *rhs, void __always_unused *args)
31+static bool less_than(const void *lhs, const void *rhs, void __always_unused *args)
1732 {
1833 return *(int *)lhs < *(int *)rhs;
1934 }
2035
21−static __init bool greater_than(const void *lhs, const void *rhs, void __always_unused *args)
36+static bool greater_than(const void *lhs, const void *rhs, void __always_unused *args)
2237 {
2338 return *(int *)lhs > *(int *)rhs;
2439 }
2540
26−static __init int pop_verify_heap(bool min_heap,
27− struct min_heap_test *heap,
28− const struct min_heap_callbacks *funcs)
41+static void pop_verify_heap(struct kunit *test,
42+ bool min_heap,
43+ struct min_heap_test *heap,
44+ const struct min_heap_callbacks *funcs)
2945 {
3046 int *values = heap->data;
31− int err = 0;
3247 int last;
3348
3449 last = values[0];
3550 min_heap_pop_inline(heap, funcs, NULL);
3651 while (heap->nr > 0) {
37− if (min_heap) {
38− if (last > values[0]) {
39− pr_err("error: expected %d <= %d\n", last,
40− values[0]);
41− err++;
42− }
43− } else {
44− if (last < values[0]) {
45− pr_err("error: expected %d >= %d\n", last,
46− values[0]);
47− err++;
48− }
49− }
52+ if (min_heap)
53+ KUNIT_EXPECT_LE(test, last, values[0]);
54+ else
55+ KUNIT_EXPECT_GE(test, last, values[0]);
5056 last = values[0];
5157 min_heap_pop_inline(heap, funcs, NULL);
5258 }
53− return err;
5459 }
5560
56−static __init int test_heapify_all(bool min_heap)
61+static void test_heapify_all(struct kunit *test)
5762 {
63+ const struct min_heap_test_case *params = test->param_value;
5864 int values[] = { 3, 1, 2, 4, 0x8000000, 0x7FFFFFF, 0,
5965 -3, -1, -2, -4, 0x8000000, 0x7FFFFFF };
6066 struct min_heap_test heap = {
@@ -63,15 +69,14 @@ static __init int test_heapify_all(bool min_heap) · 2 unmodified lines
6369 .size = ARRAY_SIZE(values),
6470 };
6571 struct min_heap_callbacks funcs = {
66− .less = min_heap ? less_than : greater_than,
72+ .less = params->min_heap ? less_than : greater_than,
6773 .swp = NULL,
6874 };
69− int i, err;
75+ int i;
7076
7177 /* Test with known set of values. */
7278 min_heapify_all_inline(&heap, &funcs, NULL);
73− err = pop_verify_heap(min_heap, &heap, &funcs);
74−
79+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
7580
7681 /* Test with randomly generated values. */
7782 heap.nr = ARRAY_SIZE(values);
@@ -79,13 +84,12 @@ static __init int test_heapify_all(bool min_heap) · 1 unmodified line
7984 values[i] = get_random_u32();
8085
8186 min_heapify_all_inline(&heap, &funcs, NULL);
82− err += pop_verify_heap(min_heap, &heap, &funcs);
83−
84− return err;
87+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
8588 }
8689
87−static __init int test_heap_push(bool min_heap)
90+static void test_heap_push(struct kunit *test)
8891 {
92+ const struct min_heap_test_case *params = test->param_value;
8993 const int data[] = { 3, 1, 2, 4, 0x80000000, 0x7FFFFFFF, 0,
9094 -3, -1, -2, -4, 0x80000000, 0x7FFFFFFF };
9195 int values[ARRAY_SIZE(data)];
@@ -95,29 +99,28 @@ static __init int test_heap_push(bool min_heap) · 3 unmodified lines
9599 .size = ARRAY_SIZE(values),
96100 };
97101 struct min_heap_callbacks funcs = {
98− .less = min_heap ? less_than : greater_than,
102+ .less = params->min_heap ? less_than : greater_than,
99103 .swp = NULL,
100104 };
101− int i, temp, err;
105+ int i, temp;
102106
103107 /* Test with known set of values copied from data. */
104108 for (i = 0; i < ARRAY_SIZE(data); i++)
105109 min_heap_push_inline(&heap, &data[i], &funcs, NULL);
106110
107− err = pop_verify_heap(min_heap, &heap, &funcs);
111+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
108112
109113 /* Test with randomly generated values. */
110114 while (heap.nr < heap.size) {
111115 temp = get_random_u32();
112116 min_heap_push_inline(&heap, &temp, &funcs, NULL);
113117 }
114− err += pop_verify_heap(min_heap, &heap, &funcs);
115−
116− return err;
118+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
117119 }
118120
119−static __init int test_heap_pop_push(bool min_heap)
121+static void test_heap_pop_push(struct kunit *test)
120122 {
123+ const struct min_heap_test_case *params = test->param_value;
121124 const int data[] = { 3, 1, 2, 4, 0x80000000, 0x7FFFFFFF, 0,
122125 -3, -1, -2, -4, 0x80000000, 0x7FFFFFFF };
123126 int values[ARRAY_SIZE(data)];
@@ -127,13 +130,13 @@ static __init int test_heap_pop_push(bool min_heap) · 3 unmodified lines
127130 .size = ARRAY_SIZE(values),
128131 };
129132 struct min_heap_callbacks funcs = {
130− .less = min_heap ? less_than : greater_than,
133+ .less = params->min_heap ? less_than : greater_than,
131134 .swp = NULL,
132135 };
133− int i, temp, err;
136+ int i, temp;
134137
135138 /* Fill values with data to pop and replace. */
136− temp = min_heap ? 0x80000000 : 0x7FFFFFFF;
139+ temp = params->min_heap ? 0x80000000 : 0x7FFFFFFF;
137140 for (i = 0; i < ARRAY_SIZE(data); i++)
138141 min_heap_push_inline(&heap, &temp, &funcs, NULL);
139142
@@ -141,7 +144,7 @@ static __init int test_heap_pop_push(bool min_heap) · 1 unmodified line
141144 for (i = 0; i < ARRAY_SIZE(data); i++)
142145 min_heap_pop_push_inline(&heap, &data[i], &funcs, NULL);
143146
144− err = pop_verify_heap(min_heap, &heap, &funcs);
147+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
145148
146149 heap.nr = 0;
147150 for (i = 0; i < ARRAY_SIZE(data); i++)
@@ -152,13 +155,12 @@ static __init int test_heap_pop_push(bool min_heap) · 4 unmodified lines
152155 temp = get_random_u32();
153156 min_heap_pop_push_inline(&heap, &temp, &funcs, NULL);
154157 }
155− err += pop_verify_heap(min_heap, &heap, &funcs);
156−
157− return err;
158+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
158159 }
159160
160−static __init int test_heap_del(bool min_heap)
161+static void test_heap_del(struct kunit *test)
161162 {
163+ const struct min_heap_test_case *params = test->param_value;
162164 int values[] = { 3, 1, 2, 4, 0x8000000, 0x7FFFFFF, 0,
163165 -3, -1, -2, -4, 0x8000000, 0x7FFFFFF };
164166 struct min_heap_test heap;
@@ -166,17 +168,16 @@ static __init int test_heap_del(bool min_heap) · 1 unmodified line
166168 min_heap_init_inline(&heap, values, ARRAY_SIZE(values));
167169 heap.nr = ARRAY_SIZE(values);
168170 struct min_heap_callbacks funcs = {
169− .less = min_heap ? less_than : greater_than,
171+ .less = params->min_heap ? less_than : greater_than,
170172 .swp = NULL,
171173 };
172− int i, err;
174+ int i;
173175
174176 /* Test with known set of values. */
175177 min_heapify_all_inline(&heap, &funcs, NULL);
176178 for (i = 0; i < ARRAY_SIZE(values) / 2; i++)
177179 min_heap_del_inline(&heap, get_random_u32() % heap.nr, &funcs, NULL);
178− err = pop_verify_heap(min_heap, &heap, &funcs);
179−
180+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
180181
181182 /* Test with randomly generated values. */
182183 heap.nr = ARRAY_SIZE(values);
@@ -186,37 +187,23 @@ static __init int test_heap_del(bool min_heap) · 3 unmodified lines
186187
187188 for (i = 0; i < ARRAY_SIZE(values) / 2; i++)
188189 min_heap_del_inline(&heap, get_random_u32() % heap.nr, &funcs, NULL);
189− err += pop_verify_heap(min_heap, &heap, &funcs);
190−
191− return err;
190+ pop_verify_heap(test, params->min_heap, &heap, &funcs);
192191 }
193192
194−static int __init test_min_heap_init(void)
195−{
196− int err = 0;
197−
198− err += test_heapify_all(true);
199− err += test_heapify_all(false);
200− err += test_heap_push(true);
201− err += test_heap_push(false);
202− err += test_heap_pop_push(true);
203− err += test_heap_pop_push(false);
204− err += test_heap_del(true);
205− err += test_heap_del(false);
206− if (err) {
207− pr_err("test failed with %d errors\n", err);
208− return -EINVAL;
209− }
210− pr_info("test passed\n");
211− return 0;
212−}
213−module_init(test_min_heap_init);
193+static struct kunit_case min_heap_test_cases[] = {
194+ KUNIT_CASE_PARAM(test_heapify_all, min_heap_gen_params),
195+ KUNIT_CASE_PARAM(test_heap_push, min_heap_gen_params),
196+ KUNIT_CASE_PARAM(test_heap_pop_push, min_heap_gen_params),
197+ KUNIT_CASE_PARAM(test_heap_del, min_heap_gen_params),
198+ {},
199+};
214200
215−static void __exit test_min_heap_exit(void)
216−{
217− /* do nothing */
218−}
219−module_exit(test_min_heap_exit);
201+static struct kunit_suite min_heap_test_suite = {
202+ .name = "min_heap",
203+ .test_cases = min_heap_test_cases,
204+};
205+
206+kunit_test_suite(min_heap_test_suite);
220207
221208 MODULE_DESCRIPTION("Test cases for the min max heap");
222209 MODULE_LICENSE("GPL");