From 2e292d7d853cb3b345a07737b15eeb988ae3bfe5 Mon Sep 17 00:00:00 2001 From: Tait Hoyem <44244401+TTWNO@users.noreply.github.com> Date: Thu, 13 Jun 2019 22:55:32 +0000 Subject: [PATCH] Test working --- morse.c | 38 +++++++++++++++++++-- morse.h | 2 ++ test.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 138 insertions(+), 5 deletions(-) diff --git a/morse.c b/morse.c index 046212b..87a8c32 100644 --- a/morse.c +++ b/morse.c @@ -6,7 +6,7 @@ #include #include -#define NUM_OF_SYMBOLS 65 +#define NUM_OF_SYMBOLS 64 static const char SYMBOLS[NUM_OF_SYMBOLS] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', @@ -22,7 +22,7 @@ static const char MORSE[NUM_OF_SYMBOLS][7] = { // a-z (same as above, but needed twice due to design choices) ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", // 0-9 - ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", + "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", // space "/", // exclamation mark @@ -64,6 +64,40 @@ char* string_to_morse(char* string){ return result_ptr; } +const char morse_to_char(const char* morse){ + for (int i = 0; i < NUM_OF_SYMBOLS; i++){ + if (strcmp(morse, MORSE[i]) == 0){ + return SYMBOLS[i]; + } + } +} + +char* morse_to_string(char* morse_to_cpy){ + int morse_length = strlen(morse_to_cpy); + char morse[morse_length]; + strcpy(morse, morse_to_cpy); + + // TODO: make this dynamic + int max_size = 1024; + char result[max_size]; + printf("%d\n", morse_length); + char* result_ptr = result; + // copy nothing to the string to avoid extra data + strcpy(result, ""); + + // split by the space character + char* morse_ptr = strtok(morse, " "); + // until we reach the end of the string + while (morse_ptr != NULL){ + char char_to_add = morse_to_char(morse_ptr); + // give the address of the single character to concatinate to result + strcat(result, &char_to_add); + // reset the morse ptr for the next section between a space + morse_ptr = strtok(NULL, " "); + } + return result_ptr; +} + char *multi_tok(char *input, char *delimiter) { static char *string; if (input != NULL) diff --git a/morse.h b/morse.h index 76fe694..b27207a 100644 --- a/morse.h +++ b/morse.h @@ -3,6 +3,8 @@ const char * char_to_morse(char letter); char * string_to_morse(char* string); char * from_morse(char* string); +const char morse_to_char(const char* morse); +char * morse_to_string( char* morse); void print_morse(char* string, bool b1, bool b2, long s1, long s2); void reverse_morse(char* string); diff --git a/test.c b/test.c index 523c947..74be852 100644 --- a/test.c +++ b/test.c @@ -12,8 +12,25 @@ const char* PASS = "PASS"; const char* EQ = "=="; const char* NEQ = "!="; +const char* GREEN_TEXT = "\e[32m"; +const char* RED_TEXT = "\e[31m"; +const char* CLEAR_FORMAT = "\e[0m"; + const char* PASS_FORMAT = "\e[32m[%s]: \"%s\" %s \"%s\"\e[0m\n"; const char* FAIL_FORMAT = "\e[31m[%s]: \"%s\" %s \"%s\"\e[0m\n"; +const char* PASS_CHAR_FORMAT = "\e[32m[%s]: \'%c\' %s \'%c\'\e[0m\n"; +const char* FAIL_CHAR_FORMAT = "\e[31m[%s]: \'%c\' %s \'%c\'\e[0m\n"; + +void assert_char_eq(const char c1, const char c2){ + tests_run++; + if (c1 == c2){ + printf(PASS_CHAR_FORMAT, PASS, c1, EQ, c2); + tests_passed++; + } else { + printf(FAIL_CHAR_FORMAT, FAIL, c1, NEQ, c2); + tests_failed++; + } +} void assert_str_eq(const char* s1, const char* s2){ tests_run++; @@ -21,7 +38,7 @@ void assert_str_eq(const char* s1, const char* s2){ printf(PASS_FORMAT, PASS, s1, EQ, s2); tests_passed++; } else { - printf(PASS_FORMAT, FAIL, s1, NEQ, s2); + printf(FAIL_FORMAT, FAIL, s1, NEQ, s2); tests_failed++; } } @@ -32,7 +49,7 @@ void assert_str_neq(const char* s1, const char* s2){ printf(PASS_FORMAT, PASS, s1, NEQ, s2); tests_passed++; } else { - printf(PASS_FORMAT, FAIL, s1, EQ, s2); + printf(FAIL_FORMAT, FAIL, s1, EQ, s2); tests_failed++; } } @@ -50,6 +67,16 @@ void assert_stm(char* input, char* output){ assert_str_eq(result, output); } +void assert_mtc(char* input, char output){ + char result = morse_to_char(input); + assert_char_eq(result, output); +} + +void assert_mts(char* input, char* output){ + char* result = morse_to_string(input); + assert_str_eq(result, output); +} + void test_tests(){ assert_str_eq(".", "."); assert_str_neq("+", "-"); @@ -107,7 +134,18 @@ void test_to_morse(){ assert_ctm('y', "-.--"); assert_ctm('Y', "-.--"); assert_ctm('z', "--.."); - assert_ctm('Z', "--.."); + assert_ctm('0', "-----"); + assert_ctm('1', ".----"); + assert_ctm('2', "..---"); + assert_ctm('3', "...--"); + assert_ctm('4', "....-"); + assert_ctm('5', "....."); + assert_ctm('6', "-...."); + assert_ctm('7', "--..."); + assert_ctm('8', "---.."); + assert_ctm('9', "----."); + assert_ctm(' ', "/"); + assert_ctm('!', "-.-.--"); } void test_string_to_morse(){ @@ -116,6 +154,48 @@ void test_string_to_morse(){ assert_stm("world", ".-- --- .-. .-.. -.."); assert_stm("Hello world!", ".... . .-.. .-.. --- / .-- --- .-. .-.. -.. -.-.--"); assert_stm("I! HATE! YOU!", ".. -.-.-- / .... .- - . -.-.-- / -.-- --- ..- -.-.--"); + assert_stm("Whisky and rye", ".-- .... .. ... -.- -.-- / .- -. -.. / .-. -.-- ."); +} + +void test_morse_to_char(){ + assert_mtc(".-", 'A'); + assert_mtc("-...", 'B'); + assert_mtc("-.-.", 'C'); + assert_mtc("-..", 'D'); + assert_mtc(".", 'E'); + assert_mtc("..-.", 'F'); + assert_mtc("--.", 'G'); + assert_mtc("....", 'H'); + assert_mtc("..", 'I'); + assert_mtc(".---", 'J'); + assert_mtc("-.-", 'K'); + assert_mtc(".-..", 'L'); + assert_mtc("--", 'M'); + assert_mtc("-.", 'N'); + assert_mtc("---", 'O'); + assert_mtc(".--.", 'P'); + assert_mtc("--.-", 'Q'); + assert_mtc(".-.", 'R'); + assert_mtc("...", 'S'); + assert_mtc("-", 'T'); + assert_mtc("..-", 'U'); + assert_mtc("...-", 'V'); + assert_mtc(".--", 'W'); + assert_mtc("-..-", 'X'); + assert_mtc("-.--", 'Y'); + assert_mtc("--..", 'Z'); +} + +void test_morse_to_string(){ + assert_mts("... --- ...", "SOS"); + assert_mts(". . . . .", "EEEEE"); + assert_mts("- ... ....", "TSH"); + assert_mts("- - - - ... ... ... ... .... .... .... .... / .... .. .. .. ..", "TTTTSSSSHHHH HIIII"); + assert_mts("- .- .-. ..-. / -- .- .-.. .- -.- --- ...-", "TARF MALAKOV"); + assert_mts("- .- .. -", "TAIT"); + assert_mts("- .- .-.. -.-", "TALK"); + assert_mts("- .- ... -.- / -- .- ... - . .-.", "TASK MASTER"); + assert_mts("- .- .-. ..-. / -- .- .-.. .- -.- --- ...-", "TARF MALAKOV"); } void all_tests(){ @@ -125,13 +205,30 @@ void all_tests(){ printf("char_to_morse tests complete!\n"); test_string_to_morse(); printf("string_to_morse tests complete!\n"); + test_morse_to_char(); + printf("test_morse_to_char tests complete!\n"); + test_morse_to_string(); + printf("test_morse_to_string tests complete!\n"); } int main(int argc, char **argv) { + bool done_printing_passed_tests = false; + all_tests(); if (tests_run == tests_passed){ printf("ALL TESTS PASSED\n"); } + printf(GREEN_TEXT); + for (int i = 0; i < tests_passed; i++){ + printf("="); + } + printf(CLEAR_FORMAT); + printf(RED_TEXT); + for (int i = 0; i < tests_failed; i++){ + printf("="); + } + printf("\n"); + printf(CLEAR_FORMAT); printf("Tests run: %d\n", tests_run); printf("Tests passed: %d\n", tests_passed); printf("Tests failed: %d\n", tests_failed);