void test_convertBasedNumberToBase10Number_will_throw_error_when_a_symbol_inside_the_hexadecimal_expression_star_with_0x() { String testTokenizer; String *testTokenizer1; Error exception; testTokenizer.rawString = "0x1@00"; testTokenizer.startIndex = 0; testTokenizer.length = 6; //Since it is work , c whether work for other symbol Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("0x1@00",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "0x1$00"; testTokenizer.startIndex = 0; testTokenizer.length = 6; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("0x1$00",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "0x1=00"; testTokenizer.startIndex = 0; testTokenizer.length = 6; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("0x1=00",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } }
void test_convertBasedNumberToBase10Number_will_throw_error_when_a_space_is_inside_the_hexadecimal_expression_star_with_0x() { String testTokenizer; String *testTokenizer1; Error exception; testTokenizer.rawString = "0x1456781 00"; testTokenizer.startIndex = 0; testTokenizer.length = 12; //Make sure this will work for longer expression. Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("0x1456781 00",errorMessage.rawString); TEST_ASSERT_EQUAL(9,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } }
void test_convertBasedNumberToBase10Number_will_convert_hexadecimal_number_starting_with_h() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "h'100'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("256",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(3,testTokenizer1->length); free(testTokenizer1); //Go with some other longer number. testTokenizer.rawString = "h'4875'"; testTokenizer.startIndex = 0; testTokenizer.length = 7; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("18549",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(5,testTokenizer1->length); free(testTokenizer1); //Try some value with integer that exceed 9 testTokenizer.rawString = "h'beef'"; testTokenizer.startIndex = 0; testTokenizer.length = 7; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("48879",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(5,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "h'abcdef'"; testTokenizer.startIndex = 0; testTokenizer.length = 9; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("11259375",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(8,testTokenizer1->length); free(testTokenizer1); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_convert_hexadecimal_number_starting_with_0x() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "0x1234"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("4660",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(4,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "0xabcd"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("43981",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(5,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "0x1a2c3b"; testTokenizer.startIndex = 0; testTokenizer.length = 8; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("1715259",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(7,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "0xaaaa"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("43690",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(5,testTokenizer1->length); free(testTokenizer1); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_convert_the_hexadecimal_number_if_it_is_middle_of_the_expression() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "12+o'226'*128"; testTokenizer.startIndex = 3; testTokenizer.length = 13; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("12+150*128",testTokenizer1->rawString); TEST_ASSERT_EQUAL(3,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(10,testTokenizer1->length); free(testTokenizer1); }
void test_convertBasedNumberToBase10Number_will_convert_the_hexadecimal_number_if_it_is_inside_expression() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "12+h'1234'"; testTokenizer.startIndex = 3; testTokenizer.length = 10; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("12+4660",testTokenizer1->rawString); TEST_ASSERT_EQUAL(3,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(7,testTokenizer1->length); free(testTokenizer1); }
void test_convertBasedNumberToBase10Number_will_convert_the_number_if_it_is_inside_expression() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "0x1234+12"; testTokenizer.startIndex = 0; testTokenizer.length = 9; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("4660+12",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(7,testTokenizer1->length); free(testTokenizer1); }
void test_convertBasedNumberToBase10Number_will_convert_hexadecimal_number_end_with_h() { String *testTokenizer =malloc(sizeof(String)); String *testTokenizer1; testTokenizer->rawString = "100h"; testTokenizer->startIndex = 0; testTokenizer->length = 4; testTokenizer1 = convertBasedNumberToBase10Number(testTokenizer); TEST_ASSERT_EQUAL_STRING("256",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(3,testTokenizer1->length); free(testTokenizer1); free(testTokenizer); }
void test_convertBasedNumberToBase10Number_will_convert_octal_number_starting_with_o() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "o'100'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("64",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(2,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "o'4775'"; testTokenizer.startIndex = 0; testTokenizer.length = 7; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("2557",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(4,testTokenizer1->length); free(testTokenizer1); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_convert_binary_number_starting_with_b() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "b'100'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("4",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(1,testTokenizer1->length); free(testTokenizer1); //Go with some other longer number. testTokenizer.rawString = "b'101100101'"; testTokenizer.startIndex = 0; testTokenizer.length = 12; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("357",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(3,testTokenizer1->length); free(testTokenizer1); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_convert_decimal_number_starting_with_d() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "d'100'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_NOT_NULL(testTokenizer1); TEST_ASSERT_EQUAL_STRING("100",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(3,testTokenizer1->length); free(testTokenizer1); testTokenizer.rawString = "d'1814561'"; testTokenizer.startIndex = 0; testTokenizer.length = 10; testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); TEST_ASSERT_EQUAL_STRING("1814561",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(7,testTokenizer1->length); free(testTokenizer1); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_convert_bigger_hexadecimal_number_end_with_h() { String *testTokenizer =malloc(sizeof(String)); String *testTokenizer1; testTokenizer->rawString = "0abcdefh"; testTokenizer->startIndex = 0; testTokenizer->length = 8; //Go with some other longer number. testTokenizer1 = convertBasedNumberToBase10Number(testTokenizer); TEST_ASSERT_EQUAL_STRING("11259375",testTokenizer1->rawString); TEST_ASSERT_EQUAL(0,testTokenizer1->startIndex); TEST_ASSERT_EQUAL(8,testTokenizer1->length); free(testTokenizer1); free(testTokenizer); //*****Error checking tested in test_throwError.c }
void test_convertBasedNumberToBase10Number_will_throw_error_when_a_space_is_or_other_unwanted_simbol_inside_the_hexadecimal_expression_end_with_h() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "c0ffee h"; testTokenizer.startIndex = 0; testTokenizer.length = 8; Error exception; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("c0ffee h",errorMessage.rawString); TEST_ASSERT_EQUAL(6,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "c0ffeekh"; testTokenizer.startIndex = 0; testTokenizer.length = 8; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("c0ffeekh",errorMessage.rawString); TEST_ASSERT_EQUAL(6,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "c0ffeek"; testTokenizer.startIndex = 0; testTokenizer.length = 7; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("c0ffeek",errorMessage.rawString); TEST_ASSERT_EQUAL(6,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "c0ffeey"; testTokenizer.startIndex = 0; testTokenizer.length = 7; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("c0ffeey",errorMessage.rawString); TEST_ASSERT_EQUAL(6,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } }
void test_convertBasedNumberToBase10Number_will_throw_error_when_a_space_is_or_other_unwanted_simbol_inside_the_hexadecimal_expression() { String testTokenizer; String *testTokenizer1; testTokenizer.rawString = "h'1 00'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; Error exception; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("h'1 00'",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "h'1456781 00'"; testTokenizer.startIndex = 0; testTokenizer.length = 13; //Make sure this will work for longer expression. Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("h'1456781 00'",errorMessage.rawString); TEST_ASSERT_EQUAL(9,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "h'1@00'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; //Since it is work , c whether work for other symbol Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("h'1@00'",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "h'1$00'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("h'1$00'",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } testTokenizer.rawString = "h'1=00'"; testTokenizer.startIndex = 0; testTokenizer.length = 6; Try { testTokenizer1 = convertBasedNumberToBase10Number(&testTokenizer); } Catch(exception) { TEST_ASSERT_EQUAL(INVALID_EXPRESSION,exception); // Check the error message been updated or not . TEST_ASSERT_EQUAL_STRING("h'1=00'",errorMessage.rawString); TEST_ASSERT_EQUAL(3,errorMessage.position); TEST_ASSERT_EQUAL_STRING("Invalid expression ! ",errorMessage.message); } }
/* This function will generate a string Input: *expression which contain the string(expression) Output: none return: Tokenizer which pass to the getToken to generate token. Throw: UNDEFINED_IDENTIFIER if the expression contained undefined identifier INVALID_EXPRESSION if the expression contained invalid expression (not following format) */ String *stringCreate(char *expression) { int length = strlen(expression); String *newString = malloc (sizeof(String)); char *newRawString = malloc (length+1); int tempIndex,stringStartLocation,lengthOfTheIdentifier=0; Token *newToken; char name[20]; Error exception; stringCopy(expression, newRawString, 0, length); newString->rawString = newRawString; newString->startIndex = 0; newString->length = strlen(newString->rawString); Try { for(tempIndex=0;tempIndex<=newString->length;tempIndex++) { if (isalpha(newString->rawString[tempIndex])||(newString->rawString[tempIndex])=='.') { stringStartLocation=tempIndex; do { lengthOfTheIdentifier++; tempIndex++; }while(isalnum(newString->rawString[tempIndex])||(newString->rawString[tempIndex]=='.')); stringCopy(newString->rawString,name,stringStartLocation,lengthOfTheIdentifier); newToken=(Token*)checkIdentifier(name); tempIndex-=lengthOfTheIdentifier+1; if(newToken==NULL) { if(name[0]==48||name[0]==98 ||name[0]==100||name[0]==104 ||name[0]==111) { newString = convertBasedNumberToBase10Number(newString); newString->startIndex++; } else { newString = getFromListAndUpdate(newString, name); } } else if(newToken!=NULL) { tempIndex += lengthOfTheIdentifier; } lengthOfTheIdentifier=0; } else { if(newString->rawString[tempIndex]==48||newString->rawString[tempIndex]==98 ||newString->rawString[tempIndex]==100||newString->rawString[tempIndex]==104 ||newString->rawString[tempIndex]==111) { newString = convertBasedNumberToBase10Number(newString); } newString->startIndex++; } } } Catch(exception) { errorMessage.rawString = newString->rawString; errorMessage.position = newString->startIndex; if(exception == UNDEFINED_IDENTIFIER) { Throw(UNDEFINED_IDENTIFIER); } else if(exception == INVALID_EXPRESSION) { Throw(INVALID_EXPRESSION); } } newString->startIndex=0; return newString; }