loops.cpp
No OneTemporary

File Metadata

Created
Fri, Mar 13, 8:36 PM

loops.cpp

#include "passmanager.h"
#include "gtest/gtest.h"
using namespace std;
TEST(Loop, Break1){
string code =
R"CODE(
main = function:: int; entry {
input = [0..10]:: [int].
loop fold(input->el::int, 0->a)::[int]
{
if (a>=5)::int {
5:: int; break
} else {a+el}
}
}
)CODE";
xreate::PassManager* man = xreate::PassManager::prepareForCode(move(code));
int (*funcMain)() = (int (*)()) man->run();
int answerActual = funcMain();
ASSERT_EQ(5, answerActual);
}
TEST(Loop, InfiniteLoop1){
string code =
R"Code(
fac = function(x:: int):: int{
range = [2..x] :: [int].
loop fold(range->i::int, 1->acc)::int {
acc * i
}
}
main = function:: int; entry {
loop fold inf(2->state) :: int {
if (fac(state)==120)::int {
state::int; break
} else {state + 1}
}
}
)Code" ;
xreate::PassManager* man = xreate::PassManager::prepareForCode(move(code));
int (*funcMain)() = (int (*)()) man->run();
int answerActual = funcMain();
ASSERT_EQ(5, answerActual);
}

Event Timeline