Implements assignment binding

This commit is contained in:
2019-05-28 17:49:03 +02:00
parent dbd7dfdd73
commit 5d1c3ac9ba
20 changed files with 443 additions and 152 deletions

View File

@@ -4,9 +4,9 @@
#include "../src/Script.hpp"
TEST_CASE( "Diagnostic invalid character", "[integration]" ) {
Script script = Script::Create("1 + 1 @");
REQUIRE(script.Diagnostics -> HasErrors());
auto diags = script.Diagnostics -> GetDiagnostics();
auto script = Script::Create("1 + 1 @");
REQUIRE(script->Diagnostics -> HasErrors());
auto diags = script->Diagnostics -> GetDiagnostics();
REQUIRE(diags.size() == 1);
CHECK(diags[0].GetCode() == DiagnosticCode::UnexpectedCharacter);
CHECK(diags[0].GetStartPosition() == 6);
@@ -14,9 +14,9 @@ TEST_CASE( "Diagnostic invalid character", "[integration]" ) {
}
TEST_CASE( "Diagnostic invalid token", "[integration]" ) {
Script script = Script::Create("1 +/ 1");
REQUIRE(script.Diagnostics -> HasErrors());
auto diags = script.Diagnostics -> GetDiagnostics();
auto script = Script::Create("1 +/ 1");
REQUIRE(script->Diagnostics -> HasErrors());
auto diags = script->Diagnostics -> GetDiagnostics();
REQUIRE(diags.size() == 1);
CHECK(diags[0].GetCode() == DiagnosticCode::UnexpectedToken);
CHECK(diags[0].GetStartPosition() == 3);

View File

@@ -4,55 +4,55 @@
#include "../src/Script.hpp"
TEST_CASE( "True Equals True", "[integration]" ) {
Script script = Script::Create("true == true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true == true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "True Not Equals True", "[integration]" ) {
Script script = Script::Create("true == false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true == false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "True Nequals False", "[integration]" ) {
Script script = Script::Create("true ~= false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true ~= false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "True Not Nequals True", "[integration]" ) {
Script script = Script::Create("true ~= true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true ~= true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "False Equals False", "[integration]" ) {
Script script = Script::Create("false == false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false == false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "10 Equals 10", "[integration]" ) {
Script script = Script::Create("10 == 10");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("10 == 10");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "10 Not Equals 5", "[integration]" ) {
Script script = Script::Create("10 == 5");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("10 == 5");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}

View File

@@ -3,92 +3,92 @@
#include "../src/Script.hpp"
TEST_CASE( "Basic True", "[integration]" ) {
Script script = Script::Create("true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "Basic False", "[integration]" ) {
Script script = Script::Create("false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "True and True", "[integration]" ) {
Script script = Script::Create("true and true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true and true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "True and False", "[integration]" ) {
Script script = Script::Create("true and false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true and false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "False and True", "[integration]" ) {
Script script = Script::Create("false and true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false and true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "False and False", "[integration]" ) {
Script script = Script::Create("false and false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false and false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "True or True", "[integration]" ) {
Script script = Script::Create("true or true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true or true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "True or False", "[integration]" ) {
Script script = Script::Create("true or false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("true or false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "False or True", "[integration]" ) {
Script script = Script::Create("false or true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false or true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}
TEST_CASE( "False or False", "[integration]" ) {
Script script = Script::Create("false or false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("false or false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "Not True", "[integration]" ) {
Script script = Script::Create("not true");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("not true");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(!lastValue->EvaluateBool());
}
TEST_CASE( "Not False", "[integration]" ) {
Script script = Script::Create("not false");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("not false");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateBool());
}

View File

@@ -3,75 +3,75 @@
#include "../src/Script.hpp"
TEST_CASE( "Integer Negation", "[integration]" ) {
Script script = Script::Create("-60");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("-60");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateInteger() == -60);
}
TEST_CASE( "Float Negation", "[integration]" ) {
Script script = Script::Create("-5.65");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("-5.65");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateFloat() == Approx(-5.65));
}
TEST_CASE( "Integer Addition", "[integration]" ) {
Script script = Script::Create("1 + 5");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("1 + 5");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateInteger() == 6);
}
TEST_CASE( "Integer Subtraction", "[integration]" ) {
Script script = Script::Create("1 - 5");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("1 - 5");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateInteger() == -4);
}
TEST_CASE( "Integer Multiplication", "[integration]" ) {
Script script = Script::Create("5 * 8");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("5 * 8");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateInteger() == 40);
}
TEST_CASE( "Integer Division", "[integration]" ) {
Script script = Script::Create("40 / 8");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("40 / 8");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateInteger() == 5);
}
TEST_CASE( "Float Addition", "[integration]" ) {
Script script = Script::Create("1.2 + 5.34");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("1.2 + 5.34");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateFloat() == 6.54);
}
TEST_CASE( "Float Subtraction", "[integration]" ) {
Script script = Script::Create("1.8 - 5.14");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("1.8 - 5.14");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateFloat() == -3.34);
}
TEST_CASE( "Float Multiplication", "[integration]" ) {
Script script = Script::Create("5.2 * 8.9");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("5.2 * 8.9");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateFloat() == 46.28);
}
TEST_CASE( "Float Division", "[integration]" ) {
Script script = Script::Create("95.18 / 8.87");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("95.18 / 8.87");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateFloat() == Approx(10.7305524239));
}
#endif

View File

@@ -5,18 +5,18 @@
TEST_CASE( "Simple String", "[integration]" ) {
Script script = Script::Create("\"foo bar\"");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("\"foo bar\"");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateString() == "foo bar");
}
TEST_CASE( "String Concat", "[integration]" ) {
Script script = Script::Create("\"foo\" + \"bar\"");
REQUIRE(!script.Diagnostics -> HasErrors());
script.Evaluate();
auto lastValue = script.GetLastValue();
auto script = Script::Create("\"foo\" + \"bar\"");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(lastValue->EvaluateString() == "foobar");
}

View File

@@ -0,0 +1,13 @@
#ifdef TESTS_BUILD
#include <catch.hpp>
#include "../src/Script.hpp"
TEST_CASE( "Create script variable", "[integration]" ) {
Script* script = Script::Create("foo = true");
REQUIRE(!script->Diagnostics -> HasErrors());
auto variable = script->GetVariable("foo");
REQUIRE(variable == nullptr);
}
#endif

View File

@@ -168,7 +168,7 @@ TEST_CASE( "Parse Global Assignment", "[parser]" ) {
REQUIRE(firstStatement -> GetKind() == ParsedStatementKind::Assignment);
auto assignment = (ParsedAssignmentStatement*)firstStatement;
REQUIRE(!assignment -> IsLocal());
REQUIRE(assignment->GetIdentifier() == "foo");
REQUIRE(assignment->GetIdentifier().GetHash() == HashedString("foo").GetHash());
REQUIRE(((LiteralBoolExpression*)assignment->GetExpression()) -> GetValue());
}
@@ -187,7 +187,7 @@ TEST_CASE( "Parse local Assignment", "[parser]" ) {
REQUIRE(firstStatement -> GetKind() == ParsedStatementKind::Assignment);
auto assignment = (ParsedAssignmentStatement*)firstStatement;
REQUIRE(assignment -> IsLocal());
REQUIRE(assignment->GetIdentifier() == "foo");
REQUIRE(assignment->GetIdentifier().GetHash() == HashedString("foo").GetHash());
REQUIRE(((LiteralBoolExpression*)assignment->GetExpression()) -> GetValue());
}