mirror of
https://github.com/usatiuk/psil.git
synced 2025-10-28 18:57:48 +01:00
init
This commit is contained in:
13
test/CMakeLists.txt
Normal file
13
test/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
|
||||
)
|
||||
# For Windows: Prevent overriding the parent project's compiler/linker settings
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
|
||||
add_subdirectory(vm)
|
||||
12
test/vm/CMakeLists.txt
Normal file
12
test/vm/CMakeLists.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
add_executable(
|
||||
VMTest
|
||||
VMTest.cpp
|
||||
)
|
||||
target_link_libraries(
|
||||
VMTest
|
||||
vm
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(VMTest)
|
||||
66
test/vm/VMTest.cpp
Normal file
66
test/vm/VMTest.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "VM.h"
|
||||
|
||||
TEST(VMTest, BasicHello) {
|
||||
std::stringstream ssin;
|
||||
std::stringstream ssout;
|
||||
{
|
||||
VM vm(ssin, ssout);
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::STOP));
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::PUTCHAR));
|
||||
vm.appendCommand(vm.makeCell<IntCell>('h'));
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::NIL));
|
||||
vm.run();
|
||||
}
|
||||
ssout.flush();
|
||||
EXPECT_EQ(ssout.str(), "h");
|
||||
}
|
||||
|
||||
TEST(VMTest, SelTest) {
|
||||
std::stringstream ssin;
|
||||
std::stringstream ssout;
|
||||
{
|
||||
VM vm(ssin, ssout);
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::STOP));
|
||||
|
||||
// True branch true test
|
||||
ConsCell *tbtt = vm.makeCell<ConsCell>(vm.makeCell<CommandCell>(CommandCell::CommandNum::JOIN));
|
||||
vm.push(tbtt, vm.makeCell<CommandCell>(CommandCell::CommandNum::PUTCHAR));
|
||||
vm.push(tbtt, vm.makeCell<IntCell>('1'));
|
||||
vm.push(tbtt, vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
|
||||
// False branch true test
|
||||
ConsCell *fbtt = vm.makeCell<ConsCell>(vm.makeCell<CommandCell>(CommandCell::CommandNum::JOIN));
|
||||
vm.push(fbtt, vm.makeCell<CommandCell>(CommandCell::CommandNum::PUTCHAR));
|
||||
vm.push(fbtt, vm.makeCell<IntCell>('2'));
|
||||
vm.push(fbtt, vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
|
||||
// True branch false test
|
||||
ConsCell *tbft = vm.makeCell<ConsCell>(vm.makeCell<CommandCell>(CommandCell::CommandNum::JOIN));
|
||||
vm.push(tbft, vm.makeCell<CommandCell>(CommandCell::CommandNum::PUTCHAR));
|
||||
vm.push(tbft, vm.makeCell<IntCell>('3'));
|
||||
vm.push(tbft, vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
|
||||
// False branch false test
|
||||
ConsCell *fbft = vm.makeCell<ConsCell>(vm.makeCell<CommandCell>(CommandCell::CommandNum::JOIN));
|
||||
vm.push(fbft, vm.makeCell<CommandCell>(CommandCell::CommandNum::PUTCHAR));
|
||||
vm.push(fbft, vm.makeCell<IntCell>('4'));
|
||||
vm.push(fbft, vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
|
||||
vm.appendCommand(fbft);
|
||||
vm.appendCommand(tbft);
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::SEL));
|
||||
vm.appendCommand(vm.makeCell<IntCell>(0));
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
vm.appendCommand(fbtt);
|
||||
vm.appendCommand(tbtt);
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::SEL));
|
||||
vm.appendCommand(vm.makeCell<IntCell>(1));
|
||||
vm.appendCommand(vm.makeCell<CommandCell>(CommandCell::CommandNum::LDC));
|
||||
vm.run();
|
||||
}
|
||||
ssout.flush();
|
||||
EXPECT_EQ(ssout.str(), "14");
|
||||
}
|
||||
Reference in New Issue
Block a user