Skip to content

Commit 030695a

Browse files
add tags to criteria and valid tags
1 parent 000afe7 commit 030695a

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

code/logic/test.c

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -740,10 +740,26 @@ static int compare_time_desc(const void* a, const void* b) {
740740
return ((fossil_pizza_case_t*)b)->elapsed_ns - ((fossil_pizza_case_t*)a)->elapsed_ns;
741741
}
742742

743+
static int compare_priority_asc(const void* a, const void* b) {
744+
return ((fossil_pizza_case_t*)a)->priority - ((fossil_pizza_case_t*)b)->priority;
745+
}
746+
747+
static int compare_priority_desc(const void* a, const void* b) {
748+
return ((fossil_pizza_case_t*)b)->priority - ((fossil_pizza_case_t*)a)->priority;
749+
}
750+
751+
static int compare_hash_asc(const void* a, const void* b) {
752+
return memcmp(((fossil_pizza_case_t*)a)->meta.hash, ((fossil_pizza_case_t*)b)->meta.hash, FOSSIL_PIZZA_HASH_SIZE);
753+
}
754+
755+
static int compare_hash_desc(const void* a, const void* b) {
756+
return memcmp(((fossil_pizza_case_t*)b)->meta.hash, ((fossil_pizza_case_t*)a)->meta.hash, FOSSIL_PIZZA_HASH_SIZE);
757+
}
758+
743759
void fossil_pizza_sort_cases(fossil_pizza_suite_t* suite, const fossil_pizza_engine_t* engine) {
744760
if (!suite || !suite->cases || suite->count <= 1 || !engine) return;
745761

746-
int (*compare)(const void*, const void*) = null;
762+
int (*compare)(const void*, const void*) = NULL;
747763

748764
if (engine->pallet.sort.by) {
749765
if (pizza_io_cstr_compare(engine->pallet.sort.by, "name") == 0) {
@@ -752,20 +768,16 @@ void fossil_pizza_sort_cases(fossil_pizza_suite_t* suite, const fossil_pizza_eng
752768
compare = (pizza_io_cstr_compare(engine->pallet.sort.order, "desc") == 0) ? compare_result_desc : compare_result_asc;
753769
} else if (pizza_io_cstr_compare(engine->pallet.sort.by, "time") == 0) {
754770
compare = (pizza_io_cstr_compare(engine->pallet.sort.order, "desc") == 0) ? compare_time_desc : compare_time_asc;
771+
} else if (pizza_io_cstr_compare(engine->pallet.sort.by, "priority") == 0) {
772+
compare = (pizza_io_cstr_compare(engine->pallet.sort.order, "desc") == 0) ? compare_priority_desc : compare_priority_asc;
773+
} else if (pizza_io_cstr_compare(engine->pallet.sort.by, "hash") == 0) {
774+
compare = (pizza_io_cstr_compare(engine->pallet.sort.order, "desc") == 0) ? compare_hash_desc : compare_hash_asc;
755775
} else {
756776
// Invalid sort criteria
757777
return;
758778
}
759779
}
760780

761-
if (engine->pallet.sort.order) {
762-
if (pizza_io_cstr_compare(engine->pallet.sort.order, "desc") == 0) {
763-
compare = (compare == compare_name_asc) ? compare_name_desc : compare;
764-
} else if (pizza_io_cstr_compare(engine->pallet.sort.order, "asc") == 0) {
765-
compare = (compare == compare_name_desc) ? compare_name_asc : compare;
766-
}
767-
}
768-
769781
if (compare) {
770782
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare);
771783
}
@@ -801,24 +813,29 @@ void fossil_pizza_shuffle_cases(fossil_pizza_suite_t* suite, const fossil_pizza_
801813

802814
unsigned int seed = (engine && engine->pallet.shuffle.seed)
803815
? (unsigned int)atoi(engine->pallet.shuffle.seed)
804-
: (unsigned int)time(null);
816+
: (unsigned int)time(NULL);
805817
srand(seed);
806818

819+
// Fisher-Yates shuffle
807820
for (size_t i = suite->count - 1; i > 0; --i) {
808821
size_t j = rand() % (i + 1);
809822
fossil_pizza_case_t temp = suite->cases[i];
810823
suite->cases[i] = suite->cases[j];
811824
suite->cases[j] = temp;
812825
}
813826

827+
// Optional secondary shuffle/sort by field
814828
if (engine && engine->pallet.shuffle.by) {
815829
if (pizza_io_cstr_compare(engine->pallet.shuffle.by, "name") == 0) {
816-
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t),
817-
(int (*)(const void*, const void*))pizza_io_cstr_compare);
830+
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare_name_asc);
818831
} else if (pizza_io_cstr_compare(engine->pallet.shuffle.by, "result") == 0) {
819832
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare_result_asc);
820833
} else if (pizza_io_cstr_compare(engine->pallet.shuffle.by, "time") == 0) {
821834
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare_time_asc);
835+
} else if (pizza_io_cstr_compare(engine->pallet.shuffle.by, "priority") == 0) {
836+
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare_priority_asc);
837+
} else if (pizza_io_cstr_compare(engine->pallet.shuffle.by, "hash") == 0) {
838+
qsort(suite->cases, suite->count, sizeof(fossil_pizza_case_t), compare_hash_asc);
822839
}
823840
}
824841
}

0 commit comments

Comments
 (0)