Lines Matching +full:count +full:- +full:width
1 // SPDX-License-Identifier: GPL-2.0 OR MIT
4 * "Running tests with kunit_tool" at Documentation/dev-tools/kunit/start.rst
5 * ./tools/testing/kunit/kunit.py run overflow [--raw_output]
37 * Clang 13 and earlier generate unwanted libcalls for 64-bit tests on
38 * 32-bit hosts.
65 {U8_MAX, 1, 0, U8_MAX-1, U8_MAX, true, false, false},
66 {U8_MAX, U8_MAX, U8_MAX-1, 0, 1, true, false, true},
68 {U8_MAX, U8_MAX-1, U8_MAX-2, 1, 2, true, false, true},
69 {U8_MAX-1, U8_MAX, U8_MAX-2, U8_MAX, 2, true, true, true},
88 {U16_MAX, 1, 0, U16_MAX-1, U16_MAX, true, false, false},
89 {U16_MAX, U16_MAX, U16_MAX-1, 0, 1, true, false, true},
91 {U16_MAX, U16_MAX-1, U16_MAX-2, 1, 2, true, false, true},
92 {U16_MAX-1, U16_MAX, U16_MAX-2, U16_MAX, 2, true, true, true},
110 {U32_MAX, 1, 0, U32_MAX-1, U32_MAX, true, false, false},
111 {U32_MAX, U32_MAX, U32_MAX-1, 0, 1, true, false, true},
113 {U32_MAX, U32_MAX-1, U32_MAX-2, 1, 2, true, false, true},
114 {U32_MAX-1, U32_MAX, U32_MAX-2, U32_MAX, 2, true, true, true},
121 {-2U, 1U, -1U, -3U, -2U, false, false, false},
122 {-4U, 5U, 1U, -9U, -20U, true, false, true},
133 {U64_MAX, 1, 0, U64_MAX-1, U64_MAX, true, false, false},
134 {U64_MAX, U64_MAX, U64_MAX-1, 0, 1, true, false, true},
136 {U64_MAX, U64_MAX-1, U64_MAX-2, 1, 2, true, false, true},
137 {U64_MAX-1, U64_MAX, U64_MAX-2, U64_MAX, 2, true, true, true},
146 {-15ULL, 10ULL, -5ULL, -25ULL, -150ULL, false, false, true},
152 {0, S8_MAX, S8_MAX, -S8_MAX, 0, false, false, false},
157 {-1, S8_MIN, S8_MAX, S8_MAX, S8_MIN, true, false, true},
158 {S8_MIN, -1, S8_MAX, -S8_MAX, S8_MIN, true, false, true},
159 {-1, S8_MAX, S8_MAX-1, S8_MIN, -S8_MAX, false, false, false},
160 {S8_MAX, -1, S8_MAX-1, S8_MIN, -S8_MAX, false, true, false},
161 {-1, -S8_MAX, S8_MIN, S8_MAX-1, S8_MAX, false, false, false},
162 {-S8_MAX, -1, S8_MIN, S8_MIN+2, S8_MAX, false, false, false},
164 {1, S8_MIN, -S8_MAX, -S8_MAX, S8_MIN, false, true, false},
165 {S8_MIN, 1, -S8_MAX, S8_MAX, S8_MIN, false, true, false},
167 {S8_MAX, 1, S8_MIN, S8_MAX-1, S8_MAX, true, false, false},
170 {S8_MAX, S8_MAX, -2, 0, 1, true, false, true},
172 {-4, -32, -36, 28, -128, false, false, true},
173 {-4, 32, 28, -36, -128, false, false, false},
179 {0, S16_MAX, S16_MAX, -S16_MAX, 0, false, false, false},
184 {-1, S16_MIN, S16_MAX, S16_MAX, S16_MIN, true, false, true},
185 {S16_MIN, -1, S16_MAX, -S16_MAX, S16_MIN, true, false, true},
186 {-1, S16_MAX, S16_MAX-1, S16_MIN, -S16_MAX, false, false, false},
187 {S16_MAX, -1, S16_MAX-1, S16_MIN, -S16_MAX, false, true, false},
188 {-1, -S16_MAX, S16_MIN, S16_MAX-1, S16_MAX, false, false, false},
189 {-S16_MAX, -1, S16_MIN, S16_MIN+2, S16_MAX, false, false, false},
191 {1, S16_MIN, -S16_MAX, -S16_MAX, S16_MIN, false, true, false},
192 {S16_MIN, 1, -S16_MAX, S16_MAX, S16_MIN, false, true, false},
194 {S16_MAX, 1, S16_MIN, S16_MAX-1, S16_MAX, true, false, false},
197 {S16_MAX, S16_MAX, -2, 0, 1, true, false, true},
202 {0, S32_MAX, S32_MAX, -S32_MAX, 0, false, false, false},
207 {-1, S32_MIN, S32_MAX, S32_MAX, S32_MIN, true, false, true},
208 {S32_MIN, -1, S32_MAX, -S32_MAX, S32_MIN, true, false, true},
209 {-1, S32_MAX, S32_MAX-1, S32_MIN, -S32_MAX, false, false, false},
210 {S32_MAX, -1, S32_MAX-1, S32_MIN, -S32_MAX, false, true, false},
211 {-1, -S32_MAX, S32_MIN, S32_MAX-1, S32_MAX, false, false, false},
212 {-S32_MAX, -1, S32_MIN, S32_MIN+2, S32_MAX, false, false, false},
214 {1, S32_MIN, -S32_MAX, -S32_MAX, S32_MIN, false, true, false},
215 {S32_MIN, 1, -S32_MAX, S32_MAX, S32_MIN, false, true, false},
217 {S32_MAX, 1, S32_MIN, S32_MAX-1, S32_MAX, true, false, false},
220 {S32_MAX, S32_MAX, -2, 0, 1, true, false, true},
226 {0, S64_MAX, S64_MAX, -S64_MAX, 0, false, false, false},
231 {-1, S64_MIN, S64_MAX, S64_MAX, S64_MIN, true, false, true},
232 {S64_MIN, -1, S64_MAX, -S64_MAX, S64_MIN, true, false, true},
233 {-1, S64_MAX, S64_MAX-1, S64_MIN, -S64_MAX, false, false, false},
234 {S64_MAX, -1, S64_MAX-1, S64_MIN, -S64_MAX, false, true, false},
235 {-1, -S64_MAX, S64_MIN, S64_MAX-1, S64_MAX, false, false, false},
236 {-S64_MAX, -1, S64_MIN, S64_MIN+2, S64_MAX, false, false, false},
238 {1, S64_MIN, -S64_MAX, -S64_MAX, S64_MIN, false, true, false},
239 {S64_MIN, 1, -S64_MAX, S64_MAX, S64_MIN, false, true, false},
241 {S64_MAX, 1, S64_MIN, S64_MAX-1, S64_MAX, true, false, false},
244 {S64_MAX, S64_MAX, -2, 0, 1, true, false, true},
246 {-1, -1, -2, 0, 1, false, false, false},
247 {-1, -128, -129, 127, 128, false, false, false},
248 {-128, -1, -129, -127, 128, false, false, false},
249 {0, -S64_MAX, -S64_MAX, S64_MAX, 0, false, false, false},
265 /* Check for internal macro side-effects. */ \
267 KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \
268 KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \
274 check_one_op(t, fmt, add, "+", p->a, p->b, p->sum, p->s_of); \
275 check_one_op(t, fmt, add, "+", p->b, p->a, p->sum, p->s_of); \
276 check_one_op(t, fmt, sub, "-", p->a, p->b, p->diff, p->d_of); \
277 check_one_op(t, fmt, mul, "*", p->a, p->b, p->prod, p->p_of); \
278 check_one_op(t, fmt, mul, "*", p->b, p->a, p->prod, p->p_of); \
310 {U8_MAX, 2, 1, U8_MAX - 2, U8_MAX - 1, true, false, true},
317 {U32_MAX, 0, -1, -1, 0, true, true, false},
324 {1, 2, 3, -1, 2, false, false, false},
331 {-1, 0, U8_MAX, U8_MAX, 0, true, true, false},
350 if ((t)-1 < 0) \
355 count++; \
360 int count = 0; in shift_sane_test() local
390 /* Sane shift: start and end with 0, without a too-wide shift. */ in shift_sane_test()
404 kunit_info(test, "%d sane shift tests finished\n", count); in shift_sane_test()
409 int count = 0; in shift_overflow_test() local
458 kunit_info(test, "%d overflow shift tests finished\n", count); in shift_overflow_test()
463 int count = 0; in shift_truncate_test() local
476 /* Overflow: shifted at or beyond entire type's bit width. */ in shift_truncate_test()
496 kunit_info(test, "%d truncate shift tests finished\n", count); in shift_truncate_test()
501 int count = 0; in shift_nonsense_test() local
504 TEST_ONE_SHIFT(-1, 0, s8, 0, true); in shift_nonsense_test()
505 TEST_ONE_SHIFT(-1, 0, u8, 0, true); in shift_nonsense_test()
506 TEST_ONE_SHIFT(-5, 0, s16, 0, true); in shift_nonsense_test()
507 TEST_ONE_SHIFT(-5, 0, u16, 0, true); in shift_nonsense_test()
508 TEST_ONE_SHIFT(-10, 0, int, 0, true); in shift_nonsense_test()
509 TEST_ONE_SHIFT(-10, 0, unsigned int, 0, true); in shift_nonsense_test()
510 TEST_ONE_SHIFT(-100, 0, s32, 0, true); in shift_nonsense_test()
511 TEST_ONE_SHIFT(-100, 0, u32, 0, true); in shift_nonsense_test()
512 TEST_ONE_SHIFT(-10000, 0, s64, 0, true); in shift_nonsense_test()
513 TEST_ONE_SHIFT(-10000, 0, u64, 0, true); in shift_nonsense_test()
516 TEST_ONE_SHIFT(0, -5, s8, 0, true); in shift_nonsense_test()
517 TEST_ONE_SHIFT(0, -5, u8, 0, true); in shift_nonsense_test()
518 TEST_ONE_SHIFT(0, -10, s16, 0, true); in shift_nonsense_test()
519 TEST_ONE_SHIFT(0, -10, u16, 0, true); in shift_nonsense_test()
520 TEST_ONE_SHIFT(0, -15, int, 0, true); in shift_nonsense_test()
521 TEST_ONE_SHIFT(0, -15, unsigned int, 0, true); in shift_nonsense_test()
522 TEST_ONE_SHIFT(0, -20, s32, 0, true); in shift_nonsense_test()
523 TEST_ONE_SHIFT(0, -20, u32, 0, true); in shift_nonsense_test()
524 TEST_ONE_SHIFT(0, -30, s64, 0, true); in shift_nonsense_test()
525 TEST_ONE_SHIFT(0, -30, u64, 0, true); in shift_nonsense_test()
529 * through the entire width of bits. For signed types, we might in shift_nonsense_test()
542 kunit_info(test, "%d nonsense shift tests finished\n", count); in shift_nonsense_test()
592 * Allocator uses a trailing node argument --------+ (e.g. kmalloc_node())
593 * Allocator uses the gfp_t argument -----------+ | (e.g. kmalloc())
611 const char device_name[] = "overflow-test"; in overflow_allocation_test()
613 int count = 0; in overflow_allocation_test() local
616 count++; \ in overflow_allocation_test()
620 /* Create dummy device for devm_kmalloc()-family tests. */ in overflow_allocation_test()
639 kunit_info(test, "%d allocation overflow tests finished\n", count); in overflow_allocation_test()
645 size_t count; member
654 int count = 0; in overflow_size_helpers_test() local
668 count++; \ in overflow_size_helpers_test()
679 check_one_size_helper(SIZE_MAX, size_mul, SIZE_MAX, -3); in overflow_size_helpers_test()
689 check_one_size_helper(SIZE_MAX, size_add, SIZE_MAX, -3); in overflow_size_helpers_test()
692 check_one_size_helper(1, size_sub, var--, 3); in overflow_size_helpers_test()
693 check_one_size_helper(1, size_sub, 4, var--); in overflow_size_helpers_test()
696 check_one_size_helper(SIZE_MAX, size_sub, 9, -3); in overflow_size_helpers_test()
703 check_one_size_helper(SIZE_MAX - 2, size_sub, SIZE_MAX - 1, 1); in overflow_size_helpers_test()
704 check_one_size_helper(SIZE_MAX - 4, size_sub, SIZE_MAX - 1, 3); in overflow_size_helpers_test()
705 check_one_size_helper(1, size_sub, SIZE_MAX - 1, -3); in overflow_size_helpers_test()
708 check_one_size_helper(4 * sizeof(*obj->data), in overflow_size_helpers_test()
710 check_one_size_helper(5 * sizeof(*obj->data), in overflow_size_helpers_test()
713 check_one_size_helper(sizeof(*obj->data), in overflow_size_helpers_test()
715 check_one_size_helper(7 * sizeof(*obj->data), in overflow_size_helpers_test()
718 flex_array_size, obj, data, -1 + unconst); in overflow_size_helpers_test()
720 flex_array_size, obj, data, SIZE_MAX - 4 + unconst); in overflow_size_helpers_test()
723 check_one_size_helper(sizeof(*obj) + (4 * sizeof(*obj->data)), in overflow_size_helpers_test()
725 check_one_size_helper(sizeof(*obj) + (5 * sizeof(*obj->data)), in overflow_size_helpers_test()
728 check_one_size_helper(sizeof(*obj) + sizeof(*obj->data), in overflow_size_helpers_test()
731 struct_size, obj, data, -3 + unconst); in overflow_size_helpers_test()
733 struct_size, obj, data, SIZE_MAX - 3 + unconst); in overflow_size_helpers_test()
735 kunit_info(test, "%d overflow size helper tests finished\n", count); in overflow_size_helpers_test()
741 int count = 0; in overflows_type_test() local
749 count++; \ in overflows_type_test()
769 TEST_OVERFLOWS_TYPE(s8, u8, -1, true); in overflows_type_test()
772 TEST_OVERFLOWS_TYPE(s8, u16, -1, true); in overflows_type_test()
775 TEST_OVERFLOWS_TYPE(s8, u32, -1, true); in overflows_type_test()
779 TEST_OVERFLOWS_TYPE(s8, u64, -1, true); in overflows_type_test()
799 TEST_OVERFLOWS_TYPE(s16, u8, -1, true); in overflows_type_test()
802 TEST_OVERFLOWS_TYPE(s16, u16, -1, true); in overflows_type_test()
805 TEST_OVERFLOWS_TYPE(s16, u32, -1, true); in overflows_type_test()
809 TEST_OVERFLOWS_TYPE(s16, u64, -1, true); in overflows_type_test()
815 TEST_OVERFLOWS_TYPE(s16, s8, (s16)S8_MIN - 1, true); in overflows_type_test()
845 TEST_OVERFLOWS_TYPE(s32, u8, -1, true); in overflows_type_test()
850 TEST_OVERFLOWS_TYPE(s32, u16, -1, true); in overflows_type_test()
853 TEST_OVERFLOWS_TYPE(s32, u32, -1, true); in overflows_type_test()
857 TEST_OVERFLOWS_TYPE(s32, u64, -1, true); in overflows_type_test()
863 TEST_OVERFLOWS_TYPE(s32, s8, (s32)S8_MIN - 1, true); in overflows_type_test()
869 TEST_OVERFLOWS_TYPE(s32, s16, (s32)S16_MIN - 1, true); in overflows_type_test()
901 TEST_OVERFLOWS_TYPE(s64, u8, -1, true); in overflows_type_test()
906 TEST_OVERFLOWS_TYPE(s64, u16, -1, true); in overflows_type_test()
911 TEST_OVERFLOWS_TYPE(s64, u32, -1, true); in overflows_type_test()
916 TEST_OVERFLOWS_TYPE(s64, u64, -1, true); in overflows_type_test()
920 TEST_OVERFLOWS_TYPE(s64, s8, (s64)S8_MIN - 1, true); in overflows_type_test()
925 TEST_OVERFLOWS_TYPE(s64, s16, (s64)S16_MIN - 1, true); in overflows_type_test()
930 TEST_OVERFLOWS_TYPE(s64, s32, (s64)S32_MIN - 1, true); in overflows_type_test()
936 /* Check for macro side-effects. */ in overflows_type_test()
937 var = INT_MAX - 1; in overflows_type_test()
941 var = INT_MAX - 1; in overflows_type_test()
946 kunit_info(test, "%d overflows_type() tests finished\n", count); in overflows_type_test()
953 int count = 0; in same_type_test() local
1009 /* Check for macro side-effects. */ in same_type_test()
1019 kunit_info(test, "%d __same_type() tests finished\n", count); in same_type_test()
1028 int count = 0; in castable_to_type_test() local
1035 count++; \ in castable_to_type_test()
1044 TEST_CASTABLE_TO_TYPE(-16, s8, true); in castable_to_type_test()
1045 TEST_CASTABLE_TO_TYPE(-16, s16, true); in castable_to_type_test()
1046 TEST_CASTABLE_TO_TYPE(-16, s32, true); in castable_to_type_test()
1049 TEST_CASTABLE_TO_TYPE(-16, s64, true); in castable_to_type_test()
1052 #define TEST_CASTABLE_TO_TYPE_VAR(width) do { \ in castable_to_type_test() argument
1053 u ## width u ## width ## var = 0; \ in castable_to_type_test()
1054 s ## width s ## width ## var = 0; \ in castable_to_type_test()
1057 TEST_CASTABLE_TO_TYPE(type_max(u ## width), u ## width, true); \ in castable_to_type_test()
1058 TEST_CASTABLE_TO_TYPE(type_min(u ## width), u ## width, true); \ in castable_to_type_test()
1059 TEST_CASTABLE_TO_TYPE(type_max(u ## width), u ## width ## var, true); \ in castable_to_type_test()
1060 TEST_CASTABLE_TO_TYPE(type_min(u ## width), u ## width ## var, true); \ in castable_to_type_test()
1061 TEST_CASTABLE_TO_TYPE(type_max(s ## width), s ## width, true); \ in castable_to_type_test()
1062 TEST_CASTABLE_TO_TYPE(type_min(s ## width), s ## width, true); \ in castable_to_type_test()
1063 TEST_CASTABLE_TO_TYPE(type_max(s ## width), s ## width ## var, true); \ in castable_to_type_test()
1064 TEST_CASTABLE_TO_TYPE(type_min(u ## width), s ## width ## var, true); \ in castable_to_type_test()
1066 TEST_CASTABLE_TO_TYPE(type_max(u ## width), s ## width, false); \ in castable_to_type_test()
1067 TEST_CASTABLE_TO_TYPE(type_max(u ## width), s ## width ## var, false); \ in castable_to_type_test()
1068 TEST_CASTABLE_TO_TYPE(type_min(s ## width), u ## width, false); \ in castable_to_type_test()
1069 TEST_CASTABLE_TO_TYPE(type_min(s ## width), u ## width ## var, false); \ in castable_to_type_test()
1070 /* Non-constant expression with mismatched type. */ \ in castable_to_type_test()
1071 TEST_CASTABLE_TO_TYPE(s ## width ## var, u ## width, false); \ in castable_to_type_test()
1072 TEST_CASTABLE_TO_TYPE(u ## width ## var, s ## width, false); \ in castable_to_type_test()
1075 #define TEST_CASTABLE_TO_TYPE_RANGE(width) do { \ in castable_to_type_test() argument
1076 unsigned long big = U ## width ## _MAX; \ in castable_to_type_test()
1077 signed long small = S ## width ## _MIN; \ in castable_to_type_test()
1078 u ## width u ## width ## var = 0; \ in castable_to_type_test()
1079 s ## width s ## width ## var = 0; \ in castable_to_type_test()
1082 TEST_CASTABLE_TO_TYPE(U ## width ## _MAX, u ## width, true); \ in castable_to_type_test()
1083 TEST_CASTABLE_TO_TYPE(U ## width ## _MAX, u ## width ## var, true); \ in castable_to_type_test()
1084 TEST_CASTABLE_TO_TYPE(S ## width ## _MIN, s ## width, true); \ in castable_to_type_test()
1085 TEST_CASTABLE_TO_TYPE(S ## width ## _MIN, s ## width ## var, true); \ in castable_to_type_test()
1087 TEST_CASTABLE_TO_TYPE((unsigned long)U ## width ## _MAX + 1, u ## width, false); \ in castable_to_type_test()
1088 TEST_CASTABLE_TO_TYPE((unsigned long)U ## width ## _MAX + 1, u ## width ## var, false); \ in castable_to_type_test()
1089 TEST_CASTABLE_TO_TYPE((signed long)S ## width ## _MIN - 1, s ## width, false); \ in castable_to_type_test()
1090 TEST_CASTABLE_TO_TYPE((signed long)S ## width ## _MIN - 1, s ## width ## var, false); \ in castable_to_type_test()
1091 /* Non-constant expression with mismatched type. */ \ in castable_to_type_test()
1092 TEST_CASTABLE_TO_TYPE(big, u ## width, false); \ in castable_to_type_test()
1093 TEST_CASTABLE_TO_TYPE(big, u ## width ## var, false); \ in castable_to_type_test()
1094 TEST_CASTABLE_TO_TYPE(small, s ## width, false); \ in castable_to_type_test()
1095 TEST_CASTABLE_TO_TYPE(small, s ## width ## var, false); \ in castable_to_type_test()
1110 kunit_info(test, "%d castable_to_type() tests finished\n", count); in castable_to_type_test()