#include #include #include #include #include #include #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; }