.
This commit is contained in:
@@ -24,6 +24,8 @@ static int init_ = []() {
|
|||||||
|
|
||||||
BIN_OP(Subtraction, Integer, Integer) { return Value::CreateInteger(a.as_integer() - b.as_integer()); };
|
BIN_OP(Subtraction, Integer, Integer) { return Value::CreateInteger(a.as_integer() - b.as_integer()); };
|
||||||
|
|
||||||
|
BIN_OP(Multiplication, Integer, Integer) { return Value::CreateInteger(a.as_integer() * b.as_integer()); };
|
||||||
|
|
||||||
BIN_OP(Division, Integer, Integer) { return Value::CreateFloat((float) a.as_integer() / (float) b.as_integer()); };
|
BIN_OP(Division, Integer, Integer) { return Value::CreateFloat((float) a.as_integer() / (float) b.as_integer()); };
|
||||||
|
|
||||||
BIN_OP(IntegerDivision, Integer, Integer) { return Value::CreateInteger(a.as_integer() / b.as_integer()); };
|
BIN_OP(IntegerDivision, Integer, Integer) { return Value::CreateInteger(a.as_integer() / b.as_integer()); };
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ TEST(VM, BasicCode)
|
|||||||
ASSERT_EQ(result, 5);
|
ASSERT_EQ(result, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(VM, SumIntegers)
|
TEST(VM, IntegerIntegerOperations)
|
||||||
{
|
{
|
||||||
auto test_op = [](int32_t op1, int32_t op2, std::string oper) {
|
auto test_op = [](int32_t op1, int32_t op2, std::string oper) {
|
||||||
return VM().load_bytecode(as::Assembler(std::format(R"(
|
return VM().load_bytecode(as::Assembler(std::format(R"(
|
||||||
@@ -107,6 +107,26 @@ TEST(VM, SumIntegers)
|
|||||||
|
|
||||||
ASSERT_EQ(test_op(2, 3, "sum"), 5);
|
ASSERT_EQ(test_op(2, 3, "sum"), 5);
|
||||||
ASSERT_EQ(test_op(2, 3, "sub"), -1);
|
ASSERT_EQ(test_op(2, 3, "sub"), -1);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "mul"), 6);
|
||||||
|
ASSERT_EQ(test_op(20, 3, "idiv"), 6);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "eq"), 0);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "neq"), 1);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "lt"), 1);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "lte"), 1);
|
||||||
|
ASSERT_EQ(test_op(3, 3, "lte"), 1);
|
||||||
|
ASSERT_EQ(test_op(4, 3, "lte"), 0);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "gt"), 0);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "gte"), 0);
|
||||||
|
ASSERT_EQ(test_op(3, 3, "gte"), 1);
|
||||||
|
ASSERT_EQ(test_op(4, 3, "gte"), 1);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "and"), 2);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "or"), 3);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "xor"), 1);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "pow"), 8);
|
||||||
|
ASSERT_EQ(test_op(2, 3, "shl"), 16);
|
||||||
|
ASSERT_EQ(test_op(30, 2, "shr"), 7);
|
||||||
|
|
||||||
|
// TODO - div
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
|
|||||||
Reference in New Issue
Block a user