view 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
line wrap: on
line source
#include "tests.h"
#include "gtest/gtest.h"

/*
 * Test for handling various variable definitions
 */

/* Define a one dim array, set the first element to a value, and see that it
   is as expected */
TEST(VariableDefinitions, SimpleIndexedOperationInt)
{
    SCRIPT_START
    "                               \
        int a[10];                  \
        a[1] = 2;                   \
        int b = a[1];               \
    "
    SCRIPT_END

    ASSERT_EQ(2, VAR_INT(b));

    SCRIPT_SHUTDOWN;
}

/* Define an int variable as a substring */
TEST(VariableDefinitions, IntFromSubstring)
{
    SCRIPT_START
    "                              \
        string a = \"12456789\";   \
        int t = a[1,3];            \
        int t2 = a[3,4];           \
        int t3 = a[3];             \
        int t4 = a[3, a.len - 1];  \
    "
    SCRIPT_END

    ASSERT_EQ(245, VAR_INT(t));
    ASSERT_EQ(56, VAR_INT(t2));
    ASSERT_EQ(5, VAR_INT(t3));
    ASSERT_EQ(56789, VAR_INT(t4));
    SCRIPT_SHUTDOWN
}

/* Define a one dim array, set the first element to a value, and see that it
   is as expected */
TEST(VariableDefinitions, SimpleIndexedOperationByte)
{
    SCRIPT_START
    "                               \
        byte a[10];                 \
        a[1] = 2;                   \
        byte b = a[1];              \
    "
    SCRIPT_END

    ASSERT_EQ(2, VAR_BYTE(b));

    SCRIPT_SHUTDOWN;
}

TEST(VariableDefinitions, ComplicatedIndexedOperationInt)
{
    SCRIPT_START
    "                               \
    int[] fun()                     \
    {                               \
        int t = 12;                 \
        int result[t];              \
        result[0] = 9;              \
        return result;              \
    }                               \
    int b[] =fun();                 \
    int a = b[0];                   \
    "
    SCRIPT_END

    ASSERT_EQ(9, VAR_INT(a));

    SCRIPT_SHUTDOWN;
}

/* Define a simple integer type variable, assign a value to it. */
TEST(VariableDefinitions, SimpleInt)
{
    SCRIPT_START
    "                               \
        int a;                      \
        a = 2;                      \
    "
    SCRIPT_END

    ASSERT_EQ(2, VAR_INT(a));

    SCRIPT_SHUTDOWN;
}


/* Define a simple byte type variable, assign a value to it. */
TEST(VariableDefinitions, SimpleByte)
{
    SCRIPT_START
    "                               \
        byte a;                      \
        a = 2;                      \
    "
    SCRIPT_END

    ASSERT_EQ(2, VAR_BYTE(a));

    SCRIPT_SHUTDOWN;
}

/* Define a string variable. Use the [] operator to change the second
   character in it.*/
TEST(VariableDefinitions, StringIndexedOperation)
{
    SCRIPT_START
    "                               \
        string b = \"AABB\";        \
        b[1] = \"c\";               \
    "
    SCRIPT_END

    SCRIPT_ASSERT_STREQ("AcBB", b);

    SCRIPT_SHUTDOWN;
}

/* Define a string variable, use the [,] operator to change a part from it.
   The second indexe should be greater than the first one */
TEST(VariableDefinitions, StringSubstringIndexedOperation1)
{
    SCRIPT_START
    "                               \
        string b = \"AABB\";        \
        b[1,2] = \"cc\";            \
    "
    SCRIPT_END

    SCRIPT_ASSERT_STREQ("AccB", b);

    SCRIPT_SHUTDOWN;
}

/* Define a string variable, use the [,] operator to change a part of it.
   The second index should be greater than the length of the string.
   Expected outcome is that the end of the string will be removed and
   it will end with the new string. */
TEST(VariableDefinitions, StringSubstringIndexedOperation2)
{
    SCRIPT_START
    "                               \
        string b = \"AABB\";        \
        b[1,5] = \"cc\";            \
    "
    SCRIPT_END

    SCRIPT_ASSERT_STREQ("Acc", b);

    SCRIPT_SHUTDOWN;
}

/* Define a string and use the substring operation on it to set the characters
   between [x,y] to a specific string*/
TEST(VariableDefinitions, StringSubstringIndexedOperation3)
{
    SCRIPT_START
    "                               \
        string b = \"AABB\";        \
        b[1,3] = \"cc\";            \
    "
    SCRIPT_END

    SCRIPT_ASSERT_STREQ("Acc", b);

    SCRIPT_SHUTDOWN;
}

TEST(VariableDefinitions, StringSubstringIndexedOperationInsertion)
{
    SCRIPT_START
    "                               \
        string b = \"ABCD\";        \
        b[1,1] = \"cc\";            \
    "
    SCRIPT_END

    SCRIPT_ASSERT_STREQ("AccCD", b);

    SCRIPT_SHUTDOWN;
}


TEST(VariableDefinitions, UsingVarFromAboveScope)
{
    SCRIPT_START
    "                                 \
            int b;                    \
            for(int i=0; i<10; i++)   \
            {                         \
                int a;                \
                a = a + i;            \
                b += a;               \
            }                         \
    "
    SCRIPT_END

    ASSERT_EQ(1+2+3+4+5+6+7+8+9, VAR_INT(b));

    SCRIPT_SHUTDOWN;
}