@@ -72,8 +72,8 @@ static void test_reading_generate_smoke(void) {
|
||||
};
|
||||
|
||||
DailyReading r1, r2;
|
||||
reading_generate("smoke-test-seed", &birth, 1751500000, &r1);
|
||||
reading_generate("smoke-test-seed", &birth, 1751500000, &r2);
|
||||
reading_generate("smoke-test-seed", &birth, GENDER_UNSPECIFIED, 1751500000, &r1);
|
||||
reading_generate("smoke-test-seed", &birth, GENDER_UNSPECIFIED, 1751500000, &r2);
|
||||
|
||||
for (int i = 0; i < TAROT_SPREAD_SIZE; i++) {
|
||||
assert(r1.spread.positions[i].card == r2.spread.positions[i].card);
|
||||
@@ -103,7 +103,7 @@ static void test_reading_print_json_shape(void) {
|
||||
};
|
||||
|
||||
DailyReading r;
|
||||
reading_generate("smoke-test-seed", &birth, 1751500000, &r);
|
||||
reading_generate("smoke-test-seed", &birth, GENDER_FEMALE, 1751500000, &r);
|
||||
|
||||
FILE *tmp = tmpfile();
|
||||
assert(tmp);
|
||||
@@ -121,6 +121,7 @@ static void test_reading_print_json_shape(void) {
|
||||
* into what must stay language-independent regardless of --lang). */
|
||||
assert(buf[0] == '{');
|
||||
assert(strstr(buf, "\"date\": \"2025-07-02\"") != NULL); /* UTC date of the fixed 1751500000 seed */
|
||||
assert(strstr(buf, "\"gender\": \"female\"") != NULL);
|
||||
assert(strstr(buf, "\"natal\"") != NULL);
|
||||
assert(strstr(buf, "\"transits\"") != NULL);
|
||||
assert(strstr(buf, "\"spread\"") != NULL);
|
||||
@@ -155,7 +156,7 @@ static void test_i18n_fallback_and_translation(void) {
|
||||
assert(strcmp(astro_moon_phase_name(MOON_FULL), "Vollmond") == 0);
|
||||
assert(strcmp(astro_aspect_name(ASPECT_TRINE), "Trigon") == 0);
|
||||
assert(strcmp(tarot_card_name(CARD_WORLD), "Die Welt") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_OUTCOME), "Das Ergebnis") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_OUTCOME, GENDER_UNSPECIFIED), "Das Ergebnis") == 0);
|
||||
|
||||
/* Loading a file that doesn't exist fails and leaves the previously
|
||||
* loaded catalog in place, rather than silently clearing it. */
|
||||
@@ -170,12 +171,45 @@ static void test_i18n_fallback_and_translation(void) {
|
||||
printf("PASS test_i18n_fallback_and_translation\n");
|
||||
}
|
||||
|
||||
static void test_gendered_position_text(void) {
|
||||
/* English catalog (loaded by the previous test): "Attitude" is the one
|
||||
* position whose name itself carries a pronoun. */
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_UNSPECIFIED), "Themself") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_MALE), "Himself") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_FEMALE), "Herself") == 0);
|
||||
assert(strstr(tarot_position_description(POSITION_PRESENT, GENDER_UNSPECIFIED), "them") != NULL);
|
||||
assert(strstr(tarot_position_description(POSITION_PRESENT, GENDER_MALE), "him") != NULL);
|
||||
assert(strstr(tarot_position_description(POSITION_PRESENT, GENDER_FEMALE), "her") != NULL);
|
||||
|
||||
/* The Outcome position has no pronoun in Waite's own text - identical
|
||||
* across all three genders. */
|
||||
assert(strcmp(tarot_position_description(POSITION_OUTCOME, GENDER_MALE),
|
||||
tarot_position_description(POSITION_OUTCOME, GENDER_FEMALE)) == 0);
|
||||
assert(strcmp(tarot_position_description(POSITION_OUTCOME, GENDER_MALE),
|
||||
tarot_position_description(POSITION_OUTCOME, GENDER_UNSPECIFIED)) == 0);
|
||||
|
||||
bool loaded = i18n_load("engine/i18n/de.lang");
|
||||
assert(loaded);
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_MALE), "Er selbst") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_FEMALE), "Sie selbst") == 0);
|
||||
assert(strcmp(tarot_position_name(POSITION_ATTITUDE, GENDER_UNSPECIFIED),
|
||||
"Die fragende Person selbst") == 0);
|
||||
assert(strcmp(tarot_position_description(POSITION_ENVIRONMENT, GENDER_MALE),
|
||||
"Sein Umfeld und die darin wirkenden Tendenzen.") == 0);
|
||||
|
||||
loaded = i18n_load("engine/i18n/en.lang"); /* leave the catalog in a known state */
|
||||
assert(loaded);
|
||||
|
||||
printf("PASS test_gendered_position_text\n");
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
test_tarot_determinism();
|
||||
test_natal_sun_sign();
|
||||
test_reading_generate_smoke();
|
||||
test_reading_print_json_shape();
|
||||
test_i18n_fallback_and_translation();
|
||||
test_gendered_position_text();
|
||||
printf("All smoke tests passed.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user