Skip to content

Commit 4b117a5

Browse files
add test cases
1 parent 6850687 commit 4b117a5

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

code/tests/cases/test_cstring.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,37 @@ FOSSIL_TEST(c_test_cstring_append) {
355355
fossil_io_cstring_free(str);
356356
}
357357

358+
// Test fossil_io_cstring_number_from_words
359+
FOSSIL_TEST(c_test_cstring_number_from_words) {
360+
int value = 0;
361+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("twenty-three", &value));
362+
ASSUME_ITS_EQUAL_I32(23, value);
363+
364+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("one hundred", &value));
365+
ASSUME_ITS_EQUAL_I32(100, value);
366+
367+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("zero", &value));
368+
ASSUME_ITS_EQUAL_I32(0, value);
369+
370+
ASSUME_ITS_TRUE(fossil_io_cstring_number_from_words("not-a-number", &value) != 0);
371+
}
372+
373+
// Test fossil_io_cstring_number_to_words
374+
FOSSIL_TEST(c_test_cstring_number_to_words) {
375+
char buffer[64];
376+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(23, buffer, sizeof(buffer)));
377+
ASSUME_ITS_EQUAL_CSTR("twenty-three", buffer);
378+
379+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(100, buffer, sizeof(buffer)));
380+
ASSUME_ITS_EQUAL_CSTR("one hundred", buffer);
381+
382+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(0, buffer, sizeof(buffer)));
383+
ASSUME_ITS_EQUAL_CSTR("zero", buffer);
384+
385+
// Buffer too small
386+
ASSUME_ITS_TRUE(fossil_io_cstring_number_to_words(123456789, buffer, 5) != 0);
387+
}
388+
358389
// * * * * * * * * * * * * * * * * * * * * * * * *
359390
// * Fossil Logic Test Pool
360391
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -393,6 +424,9 @@ FOSSIL_TEST_GROUP(c_string_tests) {
393424
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_strip_quotes);
394425
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_append);
395426

427+
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_number_from_words);
428+
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_number_to_words);
429+
396430
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_stream_create_and_free);
397431
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_stream_write_and_read);
398432
FOSSIL_TEST_ADD(c_string_suite, c_test_cstring_stream_multiple_writes);

code/tests/cases/test_cstring.cpp

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,90 @@ FOSSIL_TEST(cpp_test_cstring_class_append) {
593593
ASSUME_ITS_EQUAL_CSTR("Hello, World!", str.str());
594594
}
595595

596+
FOSSIL_TEST(cpp_test_cstring_number_from_words_basic) {
597+
int value = 0;
598+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("zero", &value));
599+
ASSUME_ITS_EQUAL_I32(0, value);
600+
601+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("one", &value));
602+
ASSUME_ITS_EQUAL_I32(1, value);
603+
604+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("ten", &value));
605+
ASSUME_ITS_EQUAL_I32(10, value);
606+
607+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("twenty-three", &value));
608+
ASSUME_ITS_EQUAL_I32(23, value);
609+
610+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("one hundred", &value));
611+
ASSUME_ITS_EQUAL_I32(100, value);
612+
613+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_from_words("one thousand two hundred thirty-four", &value));
614+
ASSUME_ITS_EQUAL_I32(1234, value);
615+
}
616+
617+
FOSSIL_TEST(cpp_test_cstring_number_from_words_invalid) {
618+
int value = 0;
619+
ASSUME_ITS_TRUE(fossil_io_cstring_number_from_words("not-a-number", &value) != 0);
620+
ASSUME_ITS_TRUE(fossil_io_cstring_number_from_words("", &value) != 0);
621+
ASSUME_ITS_TRUE(fossil_io_cstring_number_from_words("twenty one hundred apples", &value) != 0);
622+
}
623+
624+
FOSSIL_TEST(cpp_test_cstring_number_to_words_basic) {
625+
char buffer[128];
626+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(0, buffer, sizeof(buffer)));
627+
ASSUME_ITS_EQUAL_CSTR("zero", buffer);
628+
629+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(1, buffer, sizeof(buffer)));
630+
ASSUME_ITS_EQUAL_CSTR("one", buffer);
631+
632+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(23, buffer, sizeof(buffer)));
633+
ASSUME_ITS_EQUAL_CSTR("twenty-three", buffer);
634+
635+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(100, buffer, sizeof(buffer)));
636+
ASSUME_ITS_EQUAL_CSTR("one hundred", buffer);
637+
638+
ASSUME_ITS_EQUAL_I32(0, fossil_io_cstring_number_to_words(1234, buffer, sizeof(buffer)));
639+
ASSUME_ITS_EQUAL_CSTR("one thousand two hundred thirty-four", buffer);
640+
}
641+
642+
FOSSIL_TEST(cpp_test_cstring_number_to_words_buffer_too_small) {
643+
char buffer[8];
644+
ASSUME_ITS_TRUE(fossil_io_cstring_number_to_words(123456, buffer, sizeof(buffer)) != 0);
645+
}
646+
647+
FOSSIL_TEST(cpp_test_cstring_class_number_from_words_and_to_words) {
648+
using fossil::io::CString;
649+
ASSUME_ITS_EQUAL_I32(23, CString::number_from_words("twenty-three"));
650+
ASSUME_ITS_EQUAL_I32(100, CString::number_from_words("one hundred"));
651+
ASSUME_ITS_EQUAL_I32(0, CString::number_from_words("zero"));
652+
653+
ASSUME_ITS_EQUAL_CSTR("twenty-three", CString::number_to_words(23).c_str());
654+
ASSUME_ITS_EQUAL_CSTR("one hundred", CString::number_to_words(100).c_str());
655+
ASSUME_ITS_EQUAL_CSTR("zero", CString::number_to_words(0).c_str());
656+
}
657+
658+
FOSSIL_TEST(cpp_test_cstring_class_number_from_words_exception) {
659+
using fossil::io::CString;
660+
bool thrown = false;
661+
try {
662+
CString::number_from_words("not-a-number");
663+
} catch (const std::invalid_argument&) {
664+
thrown = true;
665+
}
666+
ASSUME_ITS_TRUE(thrown);
667+
}
668+
669+
FOSSIL_TEST(cpp_test_cstring_class_number_to_words_exception) {
670+
using fossil::io::CString;
671+
bool thrown = false;
672+
try {
673+
// Use a very large number that would overflow the buffer
674+
CString::number_to_words(1234567890);
675+
} catch (const std::runtime_error&) {
676+
thrown = true;
677+
}
678+
ASSUME_ITS_TRUE(thrown);
679+
}
596680

597681
// * * * * * * * * * * * * * * * * * * * * * * * *
598682
// * Fossil Logic Test Pool
@@ -668,6 +752,14 @@ FOSSIL_TEST_GROUP(cpp_string_tests) {
668752
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_class_strip_quotes);
669753
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_class_append);
670754

755+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_number_from_words_basic);
756+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_number_from_words_invalid);
757+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_number_to_words_basic);
758+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_number_to_words_buffer_too_small);
759+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_class_number_from_words_and_to_words);
760+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_class_number_from_words_exception);
761+
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_class_number_to_words_exception);
762+
671763
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_stream_class_create_and_free);
672764
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_stream_class_write_and_read);
673765
FOSSIL_TEST_ADD(cpp_string_suite, cpp_test_cstring_stream_class_multiple_writes);

0 commit comments

Comments
 (0)