+35
-4
@@ -1,16 +1,14 @@
|
|||||||
#include "furlang/arena.hpp"
|
|
||||||
#include "furvm/furvm.hpp"
|
#include "furvm/furvm.hpp"
|
||||||
#include "furvm/thing.hpp"
|
#include "furvm/thing.hpp"
|
||||||
|
|
||||||
#include "gtest/gtest.h" // IWYU pragma: keep
|
#include "gtest/gtest.h" // IWYU pragma: keep
|
||||||
|
#include <array>
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// TODO: Basic program tests (e.g. for loops)
|
// TODO: Basic program tests (e.g. for loops)
|
||||||
|
|
||||||
TEST(Things, Ops) {
|
TEST(ThingOps, Add) {
|
||||||
furlang::arena arena;
|
|
||||||
|
|
||||||
furvm::thing lhs{ furvm::thing_type{ furvm::thing_type::U32 } };
|
furvm::thing lhs{ furvm::thing_type{ furvm::thing_type::U32 } };
|
||||||
lhs.get<furvm::thing_type::u32>() = 6;
|
lhs.get<furvm::thing_type::u32>() = 6;
|
||||||
furvm::thing rhs{ furvm::thing_type{ furvm::thing_type::U32 } };
|
furvm::thing rhs{ furvm::thing_type{ furvm::thing_type::U32 } };
|
||||||
@@ -23,4 +21,37 @@ TEST(Things, Ops) {
|
|||||||
EXPECT_EQ(res.get<furvm::thing_type::u32>(), 6 + 7);
|
EXPECT_EQ(res.get<furvm::thing_type::u32>(), 6 + 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ThingOps, Array) {
|
||||||
|
furvm::thing_type innerType = { furvm::thing_type::U32 };
|
||||||
|
|
||||||
|
static constexpr std::size_t LENGTH = 10;
|
||||||
|
static constexpr std::array<furvm::thing_type::u32, LENGTH> values = { 0, 1, 2, 3, 4, 5, 6, 7, 6, 7 };
|
||||||
|
|
||||||
|
furvm::thing array{ furvm::thing_type{ furvm::thing_type::Array, { &innerType, LENGTH } } };
|
||||||
|
EXPECT_EQ(array.length(), LENGTH);
|
||||||
|
for (std::size_t i = 0; i < LENGTH; ++i) {
|
||||||
|
auto el = array.at(i);
|
||||||
|
el.get<furvm::thing_type::u32>() = values[i];
|
||||||
|
EXPECT_EQ(array.at(i).integer(), values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ThingOps, Slice) {
|
||||||
|
furvm::thing_type innerType = { furvm::thing_type::U32 };
|
||||||
|
|
||||||
|
static constexpr std::size_t LENGTH = 10;
|
||||||
|
static constexpr std::array<furvm::thing_type::u32, LENGTH> values = { 0, 1, 2, 3, 4, 5, 6, 7, 6, 7 };
|
||||||
|
|
||||||
|
furvm::thing array{ furvm::thing_type{ furvm::thing_type::Array, { &innerType, LENGTH } } };
|
||||||
|
EXPECT_EQ(array.length(), LENGTH);
|
||||||
|
furvm::thing slice = array.slice(0, LENGTH);
|
||||||
|
EXPECT_EQ(slice.length(), LENGTH);
|
||||||
|
for (std::size_t i = 0; i < LENGTH; ++i) {
|
||||||
|
auto el = slice.at(i);
|
||||||
|
el.get<furvm::thing_type::u32>() = values[i];
|
||||||
|
EXPECT_EQ(array.at(i).integer(), values[i]);
|
||||||
|
EXPECT_EQ(slice.at(i).integer(), array.at(i).integer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user