Skip to content

Commit a79ae2f

Browse files
Merge pull request #211 from dreamer-coding/extend_filter_tags
Extend filter tags
2 parents 9ce314d + 6c42d13 commit a79ae2f

File tree

3 files changed

+36
-14
lines changed

3 files changed

+36
-14
lines changed

code/logic/common.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,22 @@ void fossil_pizza_hash(const char *input, const char *output, uint8_t *hash_out)
161161
// Lookup tables for valid tags and criteria
162162
static const char* VALID_TAGS[] = {
163163
"fossil", // default tag
164-
"jellyfish", // Jellyfish AI tag
164+
"ai", // Jellyfish AI tag
165165
"network", // Network-related tests
166166
"database", // Database-related tests
167167
"ui", // User Interface tests
168168
"api", // API-related tests
169169
"critical", // Critical tests
170-
"non_critical", // Non-critical tests
170+
"media", // Media tests
171171
null // Sentinel to mark the end
172172
};
173173

174174
static const char* VALID_CRITERIA[] = {
175175
"name",
176176
"time",
177177
"result",
178+
"priority",
179+
"hash",
178180
null // Sentinel to mark the end
179181
};
180182

code/logic/fossil/pizza/test.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ typedef struct {
8080
void (*run)(void); // Test execution function
8181

8282
uint64_t elapsed_ns; // Timing in nanoseconds
83+
int64_t priority; // Priority level (lower = higher priority)
8384
fossil_pizza_case_result_t result; // Outcome
8485

8586
// TI Extensions:
@@ -272,6 +273,7 @@ FOSSIL_PIZZA_API void _on_skip(const char *description);
272273
nullptr, \
273274
test_name##_run, \
274275
0, \
276+
0, \
275277
FOSSIL_PIZZA_CASE_EMPTY, \
276278
{ \
277279
nullptr, \
@@ -297,6 +299,7 @@ FOSSIL_PIZZA_API void _on_skip(const char *description);
297299
.teardown = NULL, \
298300
.run = test_name##_run, \
299301
.elapsed_ns = 0, \
302+
.priority = 0, \
300303
.result = FOSSIL_PIZZA_CASE_EMPTY, \
301304
.meta = { \
302305
.hash = NULL, \

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)