annotate tests/var_def.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 #include "tests.h"
ferencd@0 2 #include "gtest/gtest.h"
ferencd@0 3
ferencd@0 4 /*
ferencd@0 5 * Test for handling various variable definitions
ferencd@0 6 */
ferencd@0 7
ferencd@0 8 /* Define a one dim array, set the first element to a value, and see that it
ferencd@0 9 is as expected */
ferencd@0 10 TEST(VariableDefinitions, SimpleIndexedOperationInt)
ferencd@0 11 {
ferencd@0 12 SCRIPT_START
ferencd@0 13 " \
ferencd@0 14 int a[10]; \
ferencd@0 15 a[1] = 2; \
ferencd@0 16 int b = a[1]; \
ferencd@0 17 "
ferencd@0 18 SCRIPT_END
ferencd@0 19
ferencd@0 20 ASSERT_EQ(2, VAR_INT(b));
ferencd@0 21
ferencd@0 22 SCRIPT_SHUTDOWN;
ferencd@0 23 }
ferencd@0 24
ferencd@0 25 /* Define an int variable as a substring */
ferencd@0 26 TEST(VariableDefinitions, IntFromSubstring)
ferencd@0 27 {
ferencd@0 28 SCRIPT_START
ferencd@0 29 " \
ferencd@0 30 string a = \"12456789\"; \
ferencd@0 31 int t = a[1,3]; \
ferencd@0 32 int t2 = a[3,4]; \
ferencd@0 33 int t3 = a[3]; \
ferencd@0 34 int t4 = a[3, a.len - 1]; \
ferencd@0 35 "
ferencd@0 36 SCRIPT_END
ferencd@0 37
ferencd@0 38 ASSERT_EQ(245, VAR_INT(t));
ferencd@0 39 ASSERT_EQ(56, VAR_INT(t2));
ferencd@0 40 ASSERT_EQ(5, VAR_INT(t3));
ferencd@0 41 ASSERT_EQ(56789, VAR_INT(t4));
ferencd@0 42 SCRIPT_SHUTDOWN
ferencd@0 43 }
ferencd@0 44
ferencd@0 45 /* Define a one dim array, set the first element to a value, and see that it
ferencd@0 46 is as expected */
ferencd@0 47 TEST(VariableDefinitions, SimpleIndexedOperationByte)
ferencd@0 48 {
ferencd@0 49 SCRIPT_START
ferencd@0 50 " \
ferencd@0 51 byte a[10]; \
ferencd@0 52 a[1] = 2; \
ferencd@0 53 byte b = a[1]; \
ferencd@0 54 "
ferencd@0 55 SCRIPT_END
ferencd@0 56
ferencd@0 57 ASSERT_EQ(2, VAR_BYTE(b));
ferencd@0 58
ferencd@0 59 SCRIPT_SHUTDOWN;
ferencd@0 60 }
ferencd@0 61
ferencd@0 62 TEST(VariableDefinitions, ComplicatedIndexedOperationInt)
ferencd@0 63 {
ferencd@0 64 SCRIPT_START
ferencd@0 65 " \
ferencd@0 66 int[] fun() \
ferencd@0 67 { \
ferencd@0 68 int t = 12; \
ferencd@0 69 int result[t]; \
ferencd@0 70 result[0] = 9; \
ferencd@0 71 return result; \
ferencd@0 72 } \
ferencd@0 73 int b[] =fun(); \
ferencd@0 74 int a = b[0]; \
ferencd@0 75 "
ferencd@0 76 SCRIPT_END
ferencd@0 77
ferencd@0 78 ASSERT_EQ(9, VAR_INT(a));
ferencd@0 79
ferencd@0 80 SCRIPT_SHUTDOWN;
ferencd@0 81 }
ferencd@0 82
ferencd@0 83 /* Define a simple integer type variable, assign a value to it. */
ferencd@0 84 TEST(VariableDefinitions, SimpleInt)
ferencd@0 85 {
ferencd@0 86 SCRIPT_START
ferencd@0 87 " \
ferencd@0 88 int a; \
ferencd@0 89 a = 2; \
ferencd@0 90 "
ferencd@0 91 SCRIPT_END
ferencd@0 92
ferencd@0 93 ASSERT_EQ(2, VAR_INT(a));
ferencd@0 94
ferencd@0 95 SCRIPT_SHUTDOWN;
ferencd@0 96 }
ferencd@0 97
ferencd@0 98
ferencd@0 99 /* Define a simple byte type variable, assign a value to it. */
ferencd@0 100 TEST(VariableDefinitions, SimpleByte)
ferencd@0 101 {
ferencd@0 102 SCRIPT_START
ferencd@0 103 " \
ferencd@0 104 byte a; \
ferencd@0 105 a = 2; \
ferencd@0 106 "
ferencd@0 107 SCRIPT_END
ferencd@0 108
ferencd@0 109 ASSERT_EQ(2, VAR_BYTE(a));
ferencd@0 110
ferencd@0 111 SCRIPT_SHUTDOWN;
ferencd@0 112 }
ferencd@0 113
ferencd@0 114 /* Define a string variable. Use the [] operator to change the second
ferencd@0 115 character in it.*/
ferencd@0 116 TEST(VariableDefinitions, StringIndexedOperation)
ferencd@0 117 {
ferencd@0 118 SCRIPT_START
ferencd@0 119 " \
ferencd@0 120 string b = \"AABB\"; \
ferencd@0 121 b[1] = \"c\"; \
ferencd@0 122 "
ferencd@0 123 SCRIPT_END
ferencd@0 124
ferencd@0 125 SCRIPT_ASSERT_STREQ("AcBB", b);
ferencd@0 126
ferencd@0 127 SCRIPT_SHUTDOWN;
ferencd@0 128 }
ferencd@0 129
ferencd@0 130 /* Define a string variable, use the [,] operator to change a part from it.
ferencd@0 131 The second indexe should be greater than the first one */
ferencd@0 132 TEST(VariableDefinitions, StringSubstringIndexedOperation1)
ferencd@0 133 {
ferencd@0 134 SCRIPT_START
ferencd@0 135 " \
ferencd@0 136 string b = \"AABB\"; \
ferencd@0 137 b[1,2] = \"cc\"; \
ferencd@0 138 "
ferencd@0 139 SCRIPT_END
ferencd@0 140
ferencd@0 141 SCRIPT_ASSERT_STREQ("AccB", b);
ferencd@0 142
ferencd@0 143 SCRIPT_SHUTDOWN;
ferencd@0 144 }
ferencd@0 145
ferencd@0 146 /* Define a string variable, use the [,] operator to change a part of it.
ferencd@0 147 The second index should be greater than the length of the string.
ferencd@0 148 Expected outcome is that the end of the string will be removed and
ferencd@0 149 it will end with the new string. */
ferencd@0 150 TEST(VariableDefinitions, StringSubstringIndexedOperation2)
ferencd@0 151 {
ferencd@0 152 SCRIPT_START
ferencd@0 153 " \
ferencd@0 154 string b = \"AABB\"; \
ferencd@0 155 b[1,5] = \"cc\"; \
ferencd@0 156 "
ferencd@0 157 SCRIPT_END
ferencd@0 158
ferencd@0 159 SCRIPT_ASSERT_STREQ("Acc", b);
ferencd@0 160
ferencd@0 161 SCRIPT_SHUTDOWN;
ferencd@0 162 }
ferencd@0 163
ferencd@0 164 /* Define a string and use the substring operation on it to set the characters
ferencd@0 165 between [x,y] to a specific string*/
ferencd@0 166 TEST(VariableDefinitions, StringSubstringIndexedOperation3)
ferencd@0 167 {
ferencd@0 168 SCRIPT_START
ferencd@0 169 " \
ferencd@0 170 string b = \"AABB\"; \
ferencd@0 171 b[1,3] = \"cc\"; \
ferencd@0 172 "
ferencd@0 173 SCRIPT_END
ferencd@0 174
ferencd@0 175 SCRIPT_ASSERT_STREQ("Acc", b);
ferencd@0 176
ferencd@0 177 SCRIPT_SHUTDOWN;
ferencd@0 178 }
ferencd@0 179
ferencd@0 180 TEST(VariableDefinitions, StringSubstringIndexedOperationInsertion)
ferencd@0 181 {
ferencd@0 182 SCRIPT_START
ferencd@0 183 " \
ferencd@0 184 string b = \"ABCD\"; \
ferencd@0 185 b[1,1] = \"cc\"; \
ferencd@0 186 "
ferencd@0 187 SCRIPT_END
ferencd@0 188
ferencd@0 189 SCRIPT_ASSERT_STREQ("AccCD", b);
ferencd@0 190
ferencd@0 191 SCRIPT_SHUTDOWN;
ferencd@0 192 }
ferencd@0 193
ferencd@0 194
ferencd@0 195 TEST(VariableDefinitions, UsingVarFromAboveScope)
ferencd@0 196 {
ferencd@0 197 SCRIPT_START
ferencd@0 198 " \
ferencd@0 199 int b; \
ferencd@0 200 for(int i=0; i<10; i++) \
ferencd@0 201 { \
ferencd@0 202 int a; \
ferencd@0 203 a = a + i; \
ferencd@0 204 b += a; \
ferencd@0 205 } \
ferencd@0 206 "
ferencd@0 207 SCRIPT_END
ferencd@0 208
ferencd@0 209 ASSERT_EQ(1+2+3+4+5+6+7+8+9, VAR_INT(b));
ferencd@0 210
ferencd@0 211 SCRIPT_SHUTDOWN;
ferencd@0 212 }
ferencd@0 213