Skip to content

Commit 1dc8267

Browse files
npitrearndb
authored andcommitted
lib/math/test_div64: add some edge cases relevant to __div64_const32()
Be sure to test the extreme cases with and without bias. Signed-off-by: Nicolas Pitre <npitre@baylibre.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
1 parent 3e25d5a commit 1dc8267

1 file changed

Lines changed: 83 additions & 2 deletions

File tree

lib/math/test_div64.c

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ static const u64 test_div64_dividends[] = {
2626
0x0072db27380dd689,
2727
0x0842f488162e2284,
2828
0xf66745411d8ab063,
29+
0xfffffffffffffffb,
30+
0xfffffffffffffffc,
31+
0xffffffffffffffff,
2932
};
3033
#define SIZE_DIV64_DIVIDENDS ARRAY_SIZE(test_div64_dividends)
3134

@@ -37,7 +40,10 @@ static const u64 test_div64_dividends[] = {
3740
#define TEST_DIV64_DIVISOR_5 0x0008a880
3841
#define TEST_DIV64_DIVISOR_6 0x003fd3ae
3942
#define TEST_DIV64_DIVISOR_7 0x0b658fac
40-
#define TEST_DIV64_DIVISOR_8 0xdc08b349
43+
#define TEST_DIV64_DIVISOR_8 0x80000001
44+
#define TEST_DIV64_DIVISOR_9 0xdc08b349
45+
#define TEST_DIV64_DIVISOR_A 0xfffffffe
46+
#define TEST_DIV64_DIVISOR_B 0xffffffff
4147

4248
static const u32 test_div64_divisors[] = {
4349
TEST_DIV64_DIVISOR_0,
@@ -49,13 +55,16 @@ static const u32 test_div64_divisors[] = {
4955
TEST_DIV64_DIVISOR_6,
5056
TEST_DIV64_DIVISOR_7,
5157
TEST_DIV64_DIVISOR_8,
58+
TEST_DIV64_DIVISOR_9,
59+
TEST_DIV64_DIVISOR_A,
60+
TEST_DIV64_DIVISOR_B,
5261
};
5362
#define SIZE_DIV64_DIVISORS ARRAY_SIZE(test_div64_divisors)
5463

5564
static const struct {
5665
u64 quotient;
5766
u32 remainder;
58-
} test_div64_results[SIZE_DIV64_DIVISORS][SIZE_DIV64_DIVIDENDS] = {
67+
} test_div64_results[SIZE_DIV64_DIVIDENDS][SIZE_DIV64_DIVISORS] = {
5968
{
6069
{ 0x0000000013045e47, 0x00000001 },
6170
{ 0x000000000161596c, 0x00000030 },
@@ -65,6 +74,9 @@ static const struct {
6574
{ 0x00000000000013c4, 0x0004ce80 },
6675
{ 0x00000000000002ae, 0x001e143c },
6776
{ 0x000000000000000f, 0x0033e56c },
77+
{ 0x0000000000000001, 0x2b27507f },
78+
{ 0x0000000000000000, 0xab275080 },
79+
{ 0x0000000000000000, 0xab275080 },
6880
{ 0x0000000000000000, 0xab275080 },
6981
}, {
7082
{ 0x00000001c45c02d1, 0x00000000 },
@@ -75,7 +87,10 @@ static const struct {
7587
{ 0x000000000001d637, 0x0004e5d9 },
7688
{ 0x0000000000003fc9, 0x000713bb },
7789
{ 0x0000000000000165, 0x029abe7d },
90+
{ 0x000000000000001f, 0x673c193a },
7891
{ 0x0000000000000012, 0x6e9f7e37 },
92+
{ 0x000000000000000f, 0xe73c1977 },
93+
{ 0x000000000000000f, 0xe73c1968 },
7994
}, {
8095
{ 0x000000197a3a0cf7, 0x00000002 },
8196
{ 0x00000001d9632e5c, 0x00000021 },
@@ -85,7 +100,10 @@ static const struct {
85100
{ 0x00000000001a7bb3, 0x00072331 },
86101
{ 0x00000000000397ad, 0x0002c61b },
87102
{ 0x000000000000141e, 0x06ea2e89 },
103+
{ 0x00000000000001ca, 0x4c0a72e7 },
88104
{ 0x000000000000010a, 0xab002ad7 },
105+
{ 0x00000000000000e5, 0x4c0a767b },
106+
{ 0x00000000000000e5, 0x4c0a7596 },
89107
}, {
90108
{ 0x0000017949e37538, 0x00000001 },
91109
{ 0x0000001b62441f37, 0x00000055 },
@@ -95,7 +113,10 @@ static const struct {
95113
{ 0x0000000001882ec6, 0x0005cbf9 },
96114
{ 0x000000000035333b, 0x0017abdf },
97115
{ 0x00000000000129f1, 0x0ab4520d },
116+
{ 0x0000000000001a87, 0x18ff0472 },
98117
{ 0x0000000000000f6e, 0x8ac0ce9b },
118+
{ 0x0000000000000d43, 0x98ff397f },
119+
{ 0x0000000000000d43, 0x98ff2c3c },
99120
}, {
100121
{ 0x000011f321a74e49, 0x00000006 },
101122
{ 0x0000014d8481d211, 0x0000005b },
@@ -105,7 +126,10 @@ static const struct {
105126
{ 0x0000000012a88828, 0x00036c97 },
106127
{ 0x000000000287f16f, 0x002c2a25 },
107128
{ 0x00000000000e2cc7, 0x02d581e3 },
129+
{ 0x0000000000014318, 0x2ee07d7f },
108130
{ 0x000000000000bbf4, 0x1ba08c03 },
131+
{ 0x000000000000a18c, 0x2ee303af },
132+
{ 0x000000000000a18c, 0x2ee26223 },
109133
}, {
110134
{ 0x0000d8db8f72935d, 0x00000005 },
111135
{ 0x00000fbd5aed7a2e, 0x00000002 },
@@ -115,7 +139,10 @@ static const struct {
115139
{ 0x00000000e16b20fa, 0x0002a14a },
116140
{ 0x000000001e940d22, 0x00353b2e },
117141
{ 0x0000000000ab40ac, 0x06fba6ba },
142+
{ 0x00000000000f3f70, 0x0af7eeda },
118143
{ 0x000000000008debd, 0x72d98365 },
144+
{ 0x0000000000079fb8, 0x0b166dba },
145+
{ 0x0000000000079fb8, 0x0b0ece02 },
119146
}, {
120147
{ 0x000cc3045b8fc281, 0x00000000 },
121148
{ 0x0000ed1f48b5c9fc, 0x00000079 },
@@ -125,7 +152,10 @@ static const struct {
125152
{ 0x0000000d43fce827, 0x00082b09 },
126153
{ 0x00000001ccaba11a, 0x0037e8dd },
127154
{ 0x000000000a13f729, 0x0566dffd },
155+
{ 0x0000000000e5b64e, 0x3728203b },
128156
{ 0x000000000085a14b, 0x23d36726 },
157+
{ 0x000000000072db27, 0x38f38cd7 },
158+
{ 0x000000000072db27, 0x3880b1b0 },
129159
}, {
130160
{ 0x00eafeb9c993592b, 0x00000001 },
131161
{ 0x00110e5befa9a991, 0x00000048 },
@@ -135,7 +165,10 @@ static const struct {
135165
{ 0x000000f4459740fc, 0x00084484 },
136166
{ 0x0000002122c47bf9, 0x002ca446 },
137167
{ 0x00000000b9936290, 0x004979c4 },
168+
{ 0x000000001085e910, 0x05a83974 },
138169
{ 0x00000000099ca89d, 0x9db446bf },
170+
{ 0x000000000842f488, 0x26b40b94 },
171+
{ 0x000000000842f488, 0x1e71170c },
139172
}, {
140173
{ 0x1b60cece589da1d2, 0x00000001 },
141174
{ 0x01fcb42be1453f5b, 0x0000004f },
@@ -145,7 +178,49 @@ static const struct {
145178
{ 0x00001c757dfab350, 0x00048863 },
146179
{ 0x000003dc4979c652, 0x00224ea7 },
147180
{ 0x000000159edc3144, 0x06409ab3 },
181+
{ 0x00000001ecce8a7e, 0x30bc25e5 },
148182
{ 0x000000011eadfee3, 0xa99c48a8 },
183+
{ 0x00000000f6674543, 0x0a593ae9 },
184+
{ 0x00000000f6674542, 0x13f1f5a5 },
185+
}, {
186+
{ 0x1c71c71c71c71c71, 0x00000002 },
187+
{ 0x0210842108421084, 0x0000000b },
188+
{ 0x007f01fc07f01fc0, 0x000000fb },
189+
{ 0x00014245eabf1f9a, 0x0000a63d },
190+
{ 0x0000ffffffffffff, 0x0000fffb },
191+
{ 0x00001d913cecc509, 0x0007937b },
192+
{ 0x00000402c70c678f, 0x0005bfc9 },
193+
{ 0x00000016766cb70b, 0x045edf97 },
194+
{ 0x00000001fffffffb, 0x80000000 },
195+
{ 0x0000000129d84b3a, 0xa2e8fe71 },
196+
{ 0x0000000100000001, 0xfffffffd },
197+
{ 0x0000000100000000, 0xfffffffb },
198+
}, {
199+
{ 0x1c71c71c71c71c71, 0x00000003 },
200+
{ 0x0210842108421084, 0x0000000c },
201+
{ 0x007f01fc07f01fc0, 0x000000fc },
202+
{ 0x00014245eabf1f9a, 0x0000a63e },
203+
{ 0x0000ffffffffffff, 0x0000fffc },
204+
{ 0x00001d913cecc509, 0x0007937c },
205+
{ 0x00000402c70c678f, 0x0005bfca },
206+
{ 0x00000016766cb70b, 0x045edf98 },
207+
{ 0x00000001fffffffc, 0x00000000 },
208+
{ 0x0000000129d84b3a, 0xa2e8fe72 },
209+
{ 0x0000000100000002, 0x00000000 },
210+
{ 0x0000000100000000, 0xfffffffc },
211+
}, {
212+
{ 0x1c71c71c71c71c71, 0x00000006 },
213+
{ 0x0210842108421084, 0x0000000f },
214+
{ 0x007f01fc07f01fc0, 0x000000ff },
215+
{ 0x00014245eabf1f9a, 0x0000a641 },
216+
{ 0x0000ffffffffffff, 0x0000ffff },
217+
{ 0x00001d913cecc509, 0x0007937f },
218+
{ 0x00000402c70c678f, 0x0005bfcd },
219+
{ 0x00000016766cb70b, 0x045edf9b },
220+
{ 0x00000001fffffffc, 0x00000003 },
221+
{ 0x0000000129d84b3a, 0xa2e8fe75 },
222+
{ 0x0000000100000002, 0x00000003 },
223+
{ 0x0000000100000001, 0x00000000 },
149224
},
150225
};
151226

@@ -208,6 +283,12 @@ static bool __init test_div64(void)
208283
return false;
209284
if (!test_div64_one(dividend, TEST_DIV64_DIVISOR_8, i, 8))
210285
return false;
286+
if (!test_div64_one(dividend, TEST_DIV64_DIVISOR_9, i, 9))
287+
return false;
288+
if (!test_div64_one(dividend, TEST_DIV64_DIVISOR_A, i, 10))
289+
return false;
290+
if (!test_div64_one(dividend, TEST_DIV64_DIVISOR_B, i, 11))
291+
return false;
211292
for (j = 0; j < SIZE_DIV64_DIVISORS; j++) {
212293
if (!test_div64_one(dividend, test_div64_divisors[j],
213294
i, j))

0 commit comments

Comments
 (0)