// File: /workspace/github_cpp_makefile_star2_O2/andrakis[P]alisp/tests.cpp
// Function: test_eval()
void test_eval() {
	StringType code = "(begin (define fac (lambda (n) (fac/2 n 1))) (define fac/2 (lambda (n a) (if (= 1 n) a (fac/2 (- n 1) (* n a))))) (define x 10) (print \"Fac\" x(fac x)))";
	Cell code_cell = Parser::read(code);
	Environment *env_ptr = new Environment();
	EnvironmentType env_t(env_ptr);

	env_t->create(Declare("print"), ProcCell(Stdlib::print));
	env_t->create(Declare("+"), ProcCell(Stdlib::plus));
	env_t->create(Declare("-"), ProcCell(Stdlib::minus));
	env_t->create(Declare("*"), ProcCell(Stdlib::multiply));
	env_t->create(Declare("="), ProcCell(Stdlib::equal));

	EnvironmentCell env_cell(env_t);

	Cell result = Eval::Simple::eval(code_cell, env_cell);
}

// Assembly:
pushq %rbx
subq $0x90, %rsp
leaq 0x3096(%rip), %rsi      # 0x1dc61
leaq 0x70(%rsp), %rbx
leaq 0x38(%rsp), %rdx
movq %rbx, %rdi
callq 0x7150
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x1549c
pushq $0x48
popq %rdi
callq 0x72f0
movq %rax, %rbx
xorps %xmm0, %xmm0
leaq 0x60(%rsp), %rsi
movaps %xmm0, (%rsi)
movq %rax, %rdi
callq 0x9da0
leaq 0x68(%rsp), %rdi
callq 0x9680
leaq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0x1b558
movq 0x38(%rsp), %rbx
leaq 0x2ded(%rip), %rsi      # 0x1da18
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq -0x2564(%rip), %rsi     # 0x186d8
movq %rsp, %rdi
callq 0x1836c
movq (%rsp), %rax
leaq 0x30(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, (%rsp)
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x90fa
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x1ac72
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x30(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1ac87
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1ac97
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x38(%rsp), %rbx
leaq 0x2ce9(%rip), %rsi      # 0x1d98c
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq -0x1358(%rip), %rsi     # 0x1995c
movq %rsp, %rdi
callq 0x1836c
movq (%rsp), %rax
leaq 0x28(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, (%rsp)
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x90fa
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x1acea
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x28(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1acff
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1ad0f
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x38(%rsp), %rbx
leaq 0x1e19(%rip), %rsi      # 0x1cb34
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq -0x1301(%rip), %rsi     # 0x19a2b
movq %rsp, %rdi
callq 0x1836c
movq (%rsp), %rax
leaq 0x20(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, (%rsp)
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x90fa
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x1ad62
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x20(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1ad77
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1ad87
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x38(%rsp), %rbx
leaq 0x2c8b(%rip), %rsi      # 0x1da1e
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq -0x12aa(%rip), %rsi     # 0x19afa
movq %rsp, %rdi
callq 0x1836c
movq (%rsp), %rax
leaq 0x18(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, (%rsp)
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x90fa
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x1adda
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x18(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1adef
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1adff
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x38(%rsp), %rbx
leaq 0x2c19(%rip), %rsi      # 0x1da24
leaq 0x8(%rsp), %rdi
callq 0xca36
leaq -0x1184(%rip), %rsi     # 0x19c98
movq %rsp, %rdi
callq 0x1836c
movq (%rsp), %rax
leaq 0x10(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, (%rsp)
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x90fa
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x1ae52
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x10(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1ae67
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1ae77
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x50(%rsp), %rbx
leaq 0x38(%rsp), %rsi
movq %rbx, %rdi
callq 0x9dd0
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x9084
leaq 0x58(%rsp), %rdi
callq 0x9680
movq %rsp, %rdi
leaq 0x48(%rsp), %rsi
leaq 0x8(%rsp), %rdx
callq 0x12cd0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1aec1
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1aed1
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x40(%rsp), %rdi
callq 0x9680
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x1aeeb
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x70(%rsp), %rdi
callq 0x7688
addq $0x90, %rsp
popq %rbx
retq
jmp 0x1afc4
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x9680
jmp 0x1afdc
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x1af28
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x10(%rsp)
jmp 0x1afb3
jmp 0x1afc4
jmp 0x1afd9
movq %rax, %rbx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x1af50
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x18(%rsp)
jmp 0x1afb3
jmp 0x1afc4
jmp 0x1afd9
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x1af6f
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x20(%rsp)
jmp 0x1afb3
jmp 0x1afc4
jmp 0x1afd9
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x1af8e
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x28(%rsp)
jmp 0x1afb3
jmp 0x1afc4
jmp 0x1afd9
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x1afad
movq (%rdi), %rax
callq *0x10(%rax)
andq $0x0, 0x30(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x1afc7
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x1afc7
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1afdc
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x1afdc
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x9680
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x1aff6
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x70(%rsp), %rdi
callq 0x7688
movq %rbx, %rdi
callq 0x7600
jmp 0x1b00a
movq %rax, %rbx
jmp 0x1afe6
movq %rax, %rbx
jmp 0x1aff6