Test working

master
Tait Hoyem 5 years ago
parent 85899794ee
commit 2e292d7d85

@ -6,7 +6,7 @@
#include <limits.h>
#include <stdlib.h>
#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)

@ -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);

103
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);

Loading…
Cancel
Save