1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
#include <al/test.h>
#include <al/str.h>
#include <al/array.h>
#include <al/random.h>
#include <nnwt/common.h>
#include <nnwt/sort.h>
#define SHUFFLE_ARRAY(arr) do { \
al_assert((arr).count > 2); \
for (u32 i = 0; i < (arr).count - 2; i++) { \
u32 j = al_random_int(i, (arr).count - 1); \
SWAP(al_array_at(arr, i), al_array_at(arr, j)); \
} \
} while (0)
static bool sort_test_numerical_compare(void)
{
AL_TEST_START("sort_numerical_compare");
array(str) strings;
al_array_init(strings);
str files1[] = {
al_str_c("631475239_1.jpg"),
al_str_c("631475239_2.jpg"),
al_str_c("631475239_3.jpg"),
al_str_c("631475239_4.jpg"),
al_str_c("631475239_5.jpg"),
al_str_c("631475239_6.jpg"),
al_str_c("631475239_7.jpg"),
al_str_c("631475239_8.jpg"),
al_str_c("631475239_9.jpg"),
al_str_c("631475239_10.jpg"),
al_str_c("631475239_11.jpg"),
al_str_c("631475239_12.jpg"),
al_str_c("631475239_13.jpg"),
al_str_c("631475239_14.jpg"),
al_str_c("631475239_15.jpg"),
al_str_c("631475239_15.jpg"),
al_str_c("631475239_16.jpg"),
al_str_c("631475239_17.jpg"),
al_str_c("631475239_18.jpg"),
al_str_c("631475239_19.jpg"),
al_str_c("631475239_20.m4v"),
al_str_c("631475239_21.mp4")
};
al_array_push(strings, files1[7]);
al_array_push(strings, files1[16]);
al_array_push(strings, files1[2]);
al_array_push(strings, files1[10]);
al_array_push(strings, files1[3]);
al_array_push(strings, files1[13]);
al_array_push(strings, files1[4]);
al_array_push(strings, files1[6]);
al_array_push(strings, files1[17]);
al_array_push(strings, files1[18]);
al_array_push(strings, files1[8]);
al_array_push(strings, files1[19]);
al_array_push(strings, files1[9]);
al_array_push(strings, files1[11]);
al_array_push(strings, files1[5]);
al_array_push(strings, files1[12]);
al_array_push(strings, files1[21]);
al_array_push(strings, files1[0]);
al_array_push(strings, files1[14]);
al_array_push(strings, files1[15]);
al_array_push(strings, files1[1]);
al_array_push(strings, files1[20]);
SHUFFLE_ARRAY(strings);
al_array_sort(strings, str, nn_numerical_compare);
for (u32 i = 0; i < strings.count; i++) {
AL_TEST_TRUE(al_str_eq(&al_array_at(strings, i), &files1[i]));
}
al_array_free(strings);
al_array_init(strings);
str files2[] = {
al_str_c("220.1png"),
al_str_c("220.jpg"),
al_str_c("220.png"),
al_str_c("35910.jpg"),
al_str_c("35910a.jpg"),
al_str_c("35910b.jpg"),
al_str_c("35910zzz.jpg"),
};
al_array_push(strings, files2[1]);
al_array_push(strings, files2[4]);
al_array_push(strings, files2[0]);
al_array_push(strings, files2[3]);
al_array_push(strings, files2[6]);
al_array_push(strings, files2[2]);
al_array_push(strings, files2[5]);
SHUFFLE_ARRAY(strings);
al_array_sort(strings, str, nn_numerical_compare);
for (u32 i = 0; i < strings.count; i++) {
AL_TEST_TRUE(al_str_eq(&al_array_at(strings, i), &files2[i]));
}
al_array_free(strings);
al_array_init(strings);
str files3[] = {
al_str_c("214124_a.jpeg"),
al_str_c("625315_a.jpeg"),
al_str_c("1412310_b_2.png"),
al_str_c("1412311_b.png"),
al_str_c("1412311_b_2.png"),
al_str_c("1412311_b_b.png")
};
al_array_push(strings, files3[1]);
al_array_push(strings, files3[4]);
al_array_push(strings, files3[0]);
al_array_push(strings, files3[3]);
al_array_push(strings, files3[2]);
al_array_push(strings, files3[5]);
SHUFFLE_ARRAY(strings);
al_array_sort(strings, str, nn_numerical_compare);
for (u32 i = 0; i < strings.count; i++) {
AL_TEST_TRUE(al_str_eq(&al_array_at(strings, i), &files3[i]));
}
al_array_free(strings);
al_array_init(strings);
str files4[] = {
al_str_c("pixiv_i_75528824_media0.png"),
al_str_c("pixiv_i_76697911_media0.png"),
al_str_c("pixiv_i_80864793_media0.png"),
al_str_c("pixiv_i_80864793_media0.png"),
al_str_c("pixiv_i_80864793_media0.png"),
al_str_c("pixiv_i_80864793_media1.png"),
al_str_c("pixiv_i_122898592_media0.jpg"),
al_str_c("pixiv_i_122898592_media1.jfif")
};
al_array_push(strings, files4[3]);
al_array_push(strings, files4[4]);
al_array_push(strings, files4[6]);
al_array_push(strings, files4[2]);
al_array_push(strings, files4[5]);
al_array_push(strings, files4[7]);
al_array_push(strings, files4[1]);
al_array_push(strings, files4[0]);
SHUFFLE_ARRAY(strings);
al_array_sort(strings, str, nn_numerical_compare);
for (u32 i = 0; i < strings.count; i++) {
AL_TEST_TRUE(al_str_eq(&al_array_at(strings, i), &files4[i]));
}
al_array_free(strings);
al_array_init(strings);
str files5[] = {
al_str_c("pixiv_i_24610911_media0.png"),
al_str_c("pixiv_i_27025514_media0.png"),
al_str_c("pixiv_i_33659689_media0.png"),
al_str_c("pixiv_i_42610626_media0.png"),
al_str_c("pixiv_i_49089079_media0.png"),
al_str_c("pixiv_i_49089079_media1.png"),
al_str_c("pixiv_i_49089079_media2.png"),
al_str_c("pixiv_i_49089079_media3.png"),
al_str_c("pixiv_i_49089079_media4.png"),
al_str_c("pixiv_i_49089079_media5.png"),
al_str_c("pixiv_i_49089079_media6.png"),
al_str_c("pixiv_i_49089079_media7.png"),
al_str_c("pixiv_i_49089079_media8.png"),
al_str_c("pixiv_i_49089079_media9.png"),
al_str_c("pixiv_i_49089079_media10.png"),
al_str_c("pixiv_i_49089079_media11.png"),
al_str_c("pixiv_i_49089079_media12.png"),
al_str_c("pixiv_i_49089079_media13.png"),
al_str_c("pixiv_i_49089079_media14.png"),
al_str_c("pixiv_i_49089079_media15.png"),
al_str_c("pixiv_i_49089079_media16.png"),
al_str_c("pixiv_i_49089079_media17.png"),
al_str_c("pixiv_i_49089079_media18.png"),
al_str_c("pixiv_i_49089079_media19.png"),
al_str_c("pixiv_i_49089079_media20.png"),
al_str_c("pixiv_i_49089079_media21.png"),
al_str_c("pixiv_i_114990114_media0.png")
};
for (u32 i = 0; i < ARRAY_SIZE(files5); i++) {
al_array_push(strings, files5[i]);
}
SHUFFLE_ARRAY(strings);
al_array_sort(strings, str, nn_numerical_compare);
for (u32 i = 0; i < strings.count; i++) {
AL_TEST_TRUE(al_str_eq(&al_array_at(strings, i), &files5[i]));
}
al_array_free(strings);
AL_TEST_END();
}
s32 main(void)
{
if (!nn_common_init(NULL)) return EXIT_FAILURE;
AL_TEST_START_GROUP("units");
AL_TEST_RUN(sort_test_numerical_compare);
AL_TEST_END_GROUP();
return EXIT_SUCCESS;
}
|