ferencd@0: #include "tests.h" ferencd@0: #include "gtest/gtest.h" ferencd@0: ferencd@0: /* ferencd@0: * Test for handling various variable definitions ferencd@0: */ ferencd@0: ferencd@0: /* Define a one dim array, set the first element to a value, and see that it ferencd@0: is as expected */ ferencd@0: TEST(VariableDefinitions, SimpleIndexedOperationInt) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: int a[10]; \ ferencd@0: a[1] = 2; \ ferencd@0: int b = a[1]; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(2, VAR_INT(b)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define an int variable as a substring */ ferencd@0: TEST(VariableDefinitions, IntFromSubstring) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string a = \"12456789\"; \ ferencd@0: int t = a[1,3]; \ ferencd@0: int t2 = a[3,4]; \ ferencd@0: int t3 = a[3]; \ ferencd@0: int t4 = a[3, a.len - 1]; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(245, VAR_INT(t)); ferencd@0: ASSERT_EQ(56, VAR_INT(t2)); ferencd@0: ASSERT_EQ(5, VAR_INT(t3)); ferencd@0: ASSERT_EQ(56789, VAR_INT(t4)); ferencd@0: SCRIPT_SHUTDOWN ferencd@0: } ferencd@0: ferencd@0: /* Define a one dim array, set the first element to a value, and see that it ferencd@0: is as expected */ ferencd@0: TEST(VariableDefinitions, SimpleIndexedOperationByte) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: byte a[10]; \ ferencd@0: a[1] = 2; \ ferencd@0: byte b = a[1]; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(2, VAR_BYTE(b)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: TEST(VariableDefinitions, ComplicatedIndexedOperationInt) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: int[] fun() \ ferencd@0: { \ ferencd@0: int t = 12; \ ferencd@0: int result[t]; \ ferencd@0: result[0] = 9; \ ferencd@0: return result; \ ferencd@0: } \ ferencd@0: int b[] =fun(); \ ferencd@0: int a = b[0]; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(9, VAR_INT(a)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define a simple integer type variable, assign a value to it. */ ferencd@0: TEST(VariableDefinitions, SimpleInt) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: int a; \ ferencd@0: a = 2; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(2, VAR_INT(a)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: ferencd@0: /* Define a simple byte type variable, assign a value to it. */ ferencd@0: TEST(VariableDefinitions, SimpleByte) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: byte a; \ ferencd@0: a = 2; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(2, VAR_BYTE(a)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define a string variable. Use the [] operator to change the second ferencd@0: character in it.*/ ferencd@0: TEST(VariableDefinitions, StringIndexedOperation) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string b = \"AABB\"; \ ferencd@0: b[1] = \"c\"; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: SCRIPT_ASSERT_STREQ("AcBB", b); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define a string variable, use the [,] operator to change a part from it. ferencd@0: The second indexe should be greater than the first one */ ferencd@0: TEST(VariableDefinitions, StringSubstringIndexedOperation1) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string b = \"AABB\"; \ ferencd@0: b[1,2] = \"cc\"; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: SCRIPT_ASSERT_STREQ("AccB", b); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define a string variable, use the [,] operator to change a part of it. ferencd@0: The second index should be greater than the length of the string. ferencd@0: Expected outcome is that the end of the string will be removed and ferencd@0: it will end with the new string. */ ferencd@0: TEST(VariableDefinitions, StringSubstringIndexedOperation2) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string b = \"AABB\"; \ ferencd@0: b[1,5] = \"cc\"; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: SCRIPT_ASSERT_STREQ("Acc", b); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: /* Define a string and use the substring operation on it to set the characters ferencd@0: between [x,y] to a specific string*/ ferencd@0: TEST(VariableDefinitions, StringSubstringIndexedOperation3) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string b = \"AABB\"; \ ferencd@0: b[1,3] = \"cc\"; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: SCRIPT_ASSERT_STREQ("Acc", b); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: TEST(VariableDefinitions, StringSubstringIndexedOperationInsertion) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: string b = \"ABCD\"; \ ferencd@0: b[1,1] = \"cc\"; \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: SCRIPT_ASSERT_STREQ("AccCD", b); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: ferencd@0: ferencd@0: TEST(VariableDefinitions, UsingVarFromAboveScope) ferencd@0: { ferencd@0: SCRIPT_START ferencd@0: " \ ferencd@0: int b; \ ferencd@0: for(int i=0; i<10; i++) \ ferencd@0: { \ ferencd@0: int a; \ ferencd@0: a = a + i; \ ferencd@0: b += a; \ ferencd@0: } \ ferencd@0: " ferencd@0: SCRIPT_END ferencd@0: ferencd@0: ASSERT_EQ(1+2+3+4+5+6+7+8+9, VAR_INT(b)); ferencd@0: ferencd@0: SCRIPT_SHUTDOWN; ferencd@0: } ferencd@0: