Mercurial > dovecot > core-2.2
annotate src/lib/test-seq-range-array.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 2e2563132d5f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21277
diff
changeset
|
1 /* Copyright (c) 2007-2017 Dovecot authors, see the included COPYING file */ |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "test-lib.h" |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "seq-range-array.h" |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
15907
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
8 static void |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
9 boundaries_permute(uint32_t *input, unsigned int i, unsigned int count) |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
10 { |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
11 ARRAY_TYPE(seq_range) range; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
12 const struct seq_range *seqs; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
13 unsigned int seqs_count; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
14 uint32_t tmp; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
15 unsigned int j; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
16 |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
17 if (i+1 < count) { |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
18 for (j = i; j < count; j++) { |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
19 tmp = input[i]; input[i] = input[j]; input[j] = tmp; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
20 boundaries_permute(input, i+1, count); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
21 tmp = input[i]; input[i] = input[j]; input[j] = tmp; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
22 } |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
23 return; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
24 } |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
25 t_array_init(&range, 4); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
26 for (i = 0; i < count; i++) |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
27 seq_range_array_add(&range, input[i]); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
28 seqs = array_get(&range, &seqs_count); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
29 test_assert(seqs_count == 2); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
30 test_assert(seqs[0].seq1 == 0); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
31 test_assert(seqs[0].seq2 == 1); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
32 test_assert(seqs[1].seq1 == (uint32_t)-2); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
33 test_assert(seqs[1].seq2 == (uint32_t)-1); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
34 } |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
35 |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
36 static void test_seq_range_array_add_boundaries(void) |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
37 { |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
38 static uint32_t input[] = { 0, 1, (uint32_t)-2, (uint32_t)-1 }; |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
39 |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
40 boundaries_permute(input, 0, N_ELEMENTS(input)); |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
41 } |
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
42 |
14527
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
43 static void test_seq_range_array_add_merge(void) |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
44 { |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
45 ARRAY_TYPE(seq_range) range; |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
46 |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
47 test_begin("seq_range_array_add() merging"); |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
48 t_array_init(&range, 8); |
14676
69ba6977bed8
seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents:
14527
diff
changeset
|
49 seq_range_array_add(&range, 4); |
69ba6977bed8
seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents:
14527
diff
changeset
|
50 seq_range_array_add(&range, 1); |
69ba6977bed8
seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents:
14527
diff
changeset
|
51 seq_range_array_add(&range, 2); |
14527
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
52 test_assert(array_count(&range) == 2); |
21259
5c75425daf63
lib: seq_range_array_*(): Fix seq2=2^32-1 handling
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
53 |
5c75425daf63
lib: seq_range_array_*(): Fix seq2=2^32-1 handling
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
54 seq_range_array_add_range(&range, 1, (uint32_t)-1); |
5c75425daf63
lib: seq_range_array_*(): Fix seq2=2^32-1 handling
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
55 test_assert(array_count(&range) == 1); |
5c75425daf63
lib: seq_range_array_*(): Fix seq2=2^32-1 handling
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
56 seq_range_array_add_range(&range, 1, (uint32_t)-1); |
5c75425daf63
lib: seq_range_array_*(): Fix seq2=2^32-1 handling
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
57 test_assert(array_count(&range) == 1); |
14527
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
58 test_end(); |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
59 } |
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
60 |
17312
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
61 static void test_seq_range_array_remove_nth(void) |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
62 { |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
63 ARRAY_TYPE(seq_range) range; |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
64 const struct seq_range *r; |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
65 |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
66 test_begin("seq_range_array_remove_nth()"); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
67 t_array_init(&range, 8); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
68 seq_range_array_add_range(&range, 1, 5); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
69 seq_range_array_add(&range, 7); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
70 seq_range_array_add_range(&range, 10,20); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
71 test_assert(array_count(&range) == 3); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
72 |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
73 seq_range_array_remove_nth(&range, 0, 2); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
74 r = array_idx(&range, 0); test_assert(r->seq1 == 3 && r->seq2 == 5); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
75 |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
76 seq_range_array_remove_nth(&range, 1, 4); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
77 r = array_idx(&range, 0); test_assert(r->seq1 == 3 && r->seq2 == 3); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
78 r = array_idx(&range, 1); test_assert(r->seq1 == 11 && r->seq2 == 20); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
79 |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
80 seq_range_array_remove_nth(&range, 5, (uint32_t)-1); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
81 r = array_idx(&range, 1); test_assert(r->seq1 == 11 && r->seq2 == 14); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
82 |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
83 test_assert(array_count(&range) == 2); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
84 test_end(); |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
85 } |
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
86 |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 static void test_seq_range_array_random(void) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 { |
18190
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
89 #define SEQ_RANGE_TEST_BUFSIZE 100 |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
90 #define SEQ_RANGE_TEST_COUNT 20000 |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 unsigned char shadowbuf[SEQ_RANGE_TEST_BUFSIZE]; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 ARRAY_TYPE(seq_range) range; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 const struct seq_range *seqs; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 uint32_t seq1, seq2; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 unsigned int i, j, ret, ret2, count; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 int test = -1; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 ret = ret2 = 0; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 i_array_init(&range, 1); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 memset(shadowbuf, 0, sizeof(shadowbuf)); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 for (i = 0; i < SEQ_RANGE_TEST_COUNT; i++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 seq1 = rand() % SEQ_RANGE_TEST_BUFSIZE; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 seq2 = seq1 + rand() % (SEQ_RANGE_TEST_BUFSIZE - seq1); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 test = rand() % 4; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 switch (test) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 case 0: |
18190
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
107 ret = seq_range_array_add(&range, seq1) ? 0 : 1; /* FALSE == added */ |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
108 ret2 = shadowbuf[seq1] == 0 ? 1 : 0; |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 shadowbuf[seq1] = 1; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 break; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 case 1: |
18190
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
112 ret = seq_range_array_add_range_count(&range, seq1, seq2); |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
113 for (ret2 = 0; seq1 <= seq2; seq1++) { |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
114 if (shadowbuf[seq1] == 0) { |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
115 ret2++; |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
116 shadowbuf[seq1] = 1; |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
117 } |
230f3579c9b7
lib: seq-range-array - add range changes
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
118 } |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 break; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 case 2: |
14685
67b9119fbd09
seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents:
14682
diff
changeset
|
121 ret = seq_range_array_remove(&range, seq1) ? 1 : 0; |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 ret2 = shadowbuf[seq1] != 0 ? 1 : 0; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 shadowbuf[seq1] = 0; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 break; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 case 3: |
14685
67b9119fbd09
seq-range-array: Reverted most of recent API changes.
Timo Sirainen <tss@iki.fi>
parents:
14682
diff
changeset
|
126 ret = seq_range_array_remove_range(&range, seq1, seq2); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 for (ret2 = 0; seq1 <= seq2; seq1++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 if (shadowbuf[seq1] != 0) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 ret2++; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 shadowbuf[seq1] = 0; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 break; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 if (ret != ret2) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 break; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 seqs = array_get(&range, &count); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 for (j = 0, seq1 = 0; j < count; j++) { |
14527
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
140 if (j > 0 && seqs[j-1].seq2+1 >= seqs[j].seq1) |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 goto fail; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 for (; seq1 < seqs[j].seq1; seq1++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 if (shadowbuf[seq1] != 0) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 goto fail; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 for (; seq1 <= seqs[j].seq2; seq1++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 if (shadowbuf[seq1] == 0) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 goto fail; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 i_assert(seq1 <= SEQ_RANGE_TEST_BUFSIZE); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 for (; seq1 < SEQ_RANGE_TEST_BUFSIZE; seq1++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 if (shadowbuf[seq1] != 0) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 goto fail; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 fail: |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 if (i == SEQ_RANGE_TEST_COUNT) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 test_out("seq_range_array random", TRUE); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 else { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 test_out_reason("seq_range_array random", FALSE, |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 t_strdup_printf("round %u test %d failed", i, test)); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 } |
17780
c749a40eda0a
lib: test-seq-range-array - clean up array after use
Phil Carmody <phil@dovecot.fi>
parents:
17312
diff
changeset
|
164 array_free(&range); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 |
21277
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
167 static void test_seq_range_array_invert_minmax(uint32_t min, uint32_t max) |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
168 { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
169 ARRAY_TYPE(seq_range) range = ARRAY_INIT; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
170 struct seq_range_iter iter; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
171 unsigned int n, inverse_mask, mask_inside, mask_size = max-min+1; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
172 uint32_t seq; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
173 |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
174 i_assert(mask_size <= sizeof(unsigned int)*8); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
175 t_array_init(&range, 16); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
176 for (unsigned int mask = 0; mask < mask_size; mask++) { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
177 array_clear(&range); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
178 for (unsigned int i = 0; i < mask_size; i++) { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
179 if ((mask & (1 << i)) != 0) |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
180 seq_range_array_add(&range, min+i); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
181 } |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
182 seq_range_array_invert(&range, min, max); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
183 |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
184 inverse_mask = 0; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
185 seq_range_array_iter_init(&iter, &range); n = 0; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
186 while (seq_range_array_iter_nth(&iter, n++, &seq)) { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
187 test_assert(seq >= min && seq <= max); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
188 inverse_mask |= 1 << (seq-min); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
189 } |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
190 mask_inside = ((1 << mask_size)-1); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
191 test_assert_idx((inverse_mask & ~mask_inside) == 0, mask); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
192 test_assert_idx(inverse_mask == (mask ^ mask_inside), mask); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
193 } |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
194 } |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
195 |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
196 static void test_seq_range_array_invert(void) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 { |
21277
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
198 test_begin("seq_range_array_invert()"); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
199 /* first numbers */ |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
200 for (unsigned int min = 0; min <= 7; min++) { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
201 for (unsigned int max = min; max <= 7; max++) T_BEGIN { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
202 test_seq_range_array_invert_minmax(min, max); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
203 } T_END; |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 } |
21277
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
205 /* last numbers */ |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
206 for (uint64_t min = 0xffffffff-7; min <= 0xffffffff; min++) { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
207 for (uint64_t max = min; max <= 0xffffffff; max++) T_BEGIN { |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
208 test_seq_range_array_invert_minmax(min, max); |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
209 } T_END; |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
210 } |
14209dd0b677
lib: Improve seq_range_array_invert() unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21273
diff
changeset
|
211 test_end(); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 |
21273
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
214 static void test_seq_range_array_invert_edges(void) |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
215 { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
216 const struct { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
217 int64_t a_seq1, a_seq2, b_seq1, b_seq2; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
218 int64_t resa_seq1, resa_seq2, resb_seq1, resb_seq2; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
219 } tests[] = { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
220 { -1, -1, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
221 0, 0xffffffff, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
222 { 0, 0xffffffff, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
223 -1, -1, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
224 { 0, 0xfffffffe, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
225 0xffffffff, 0xffffffff, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
226 { 1, 0xfffffffe, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
227 0, 0, 0xffffffff, 0xffffffff }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
228 { 1, 0xffffffff, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
229 0, 0, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
230 { 0, 0, 0xffffffff, 0xffffffff, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
231 1, 0xfffffffe, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
232 { 0xffffffff, 0xffffffff, -1, -1, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
233 0, 0xfffffffe, -1, -1 }, |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
234 }; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
235 ARRAY_TYPE(seq_range) range = ARRAY_INIT; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
236 const struct seq_range *result; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
237 unsigned int count; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
238 |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
239 test_begin("seq_range_array_invert() edges"); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
240 for (unsigned int i = 0; i < N_ELEMENTS(tests); i++) T_BEGIN { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
241 t_array_init(&range, 10); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
242 if (tests[i].a_seq1 != -1) |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
243 seq_range_array_add_range(&range, tests[i].a_seq1, tests[i].a_seq2); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
244 if (tests[i].b_seq1 != -1) |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
245 seq_range_array_add_range(&range, tests[i].b_seq1, tests[i].b_seq2); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
246 seq_range_array_invert(&range, 0, 0xffffffff); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
247 |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
248 result = array_get(&range, &count); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
249 if (tests[i].resa_seq1 == -1) |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
250 test_assert_idx(count == 0, i); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
251 else { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
252 test_assert(result[0].seq1 == tests[i].resa_seq1); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
253 test_assert(result[0].seq2 == tests[i].resa_seq2); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
254 if (tests[i].resb_seq1 == -1) |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
255 test_assert_idx(count == 1, i); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
256 else { |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
257 test_assert(result[1].seq1 == tests[i].resb_seq1); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
258 test_assert(result[1].seq2 == tests[i].resb_seq2); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
259 } |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
260 } |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
261 } T_END; |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
262 test_end(); |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
263 } |
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
264 |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
265 static void test_seq_range_create(ARRAY_TYPE(seq_range) *array, uint8_t byte) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
267 unsigned int i; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
268 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 array_clear(array); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
270 for (i = 0; i < 8; i++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 if ((byte & (1 << i)) != 0) |
14676
69ba6977bed8
seq_range_array_add() API changed. Added other functions to provide the less common use cases.
Timo Sirainen <tss@iki.fi>
parents:
14527
diff
changeset
|
272 seq_range_array_add(array, i + 1); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
273 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
275 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
276 static void test_seq_range_array_have_common(void) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
277 { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
278 ARRAY_TYPE(seq_range) arr1, arr2; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
279 unsigned int i, j; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
280 bool ret1, ret2, success = TRUE; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
281 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
282 t_array_init(&arr1, 8); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
283 t_array_init(&arr2, 8); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
284 for (i = 0; i < 256; i++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
285 test_seq_range_create(&arr1, i); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
286 for (j = 0; j < 256; j++) { |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
287 test_seq_range_create(&arr2, j); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
288 ret1 = seq_range_array_have_common(&arr1, &arr2); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
289 ret2 = (i & j) != 0; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
290 if (ret1 != ret2) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
291 success = FALSE; |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
292 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
293 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
294 test_out("seq_range_array_have_common()", success); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
295 } |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
296 |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
297 void test_seq_range_array(void) |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
298 { |
15907
db0ada89b81a
seq_range_array_add(): Fixed handling sequence ranges that contain zeros.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
299 test_seq_range_array_add_boundaries(); |
14527
bac5e1dae4ed
seq_range_array_add(): Ranges weren't always merged when they could have.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
300 test_seq_range_array_add_merge(); |
17312
0d237a4dacd2
Added seq_range_array_remove_nth()
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
301 test_seq_range_array_remove_nth(); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
302 test_seq_range_array_invert(); |
21273
ff92e16346c9
lib: Fix seq_range_array_invert() when input contains 2^32-1
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21259
diff
changeset
|
303 test_seq_range_array_invert_edges(); |
9425
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
304 test_seq_range_array_have_common(); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
305 test_seq_range_array_random(); |
810e36796e3d
liblib unit tests are now split to separate files.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
306 } |