all tests working again
This commit is contained in:
@@ -8,3 +8,4 @@
|
|||||||
*.vspx
|
*.vspx
|
||||||
todo.html
|
todo.html
|
||||||
*.expanded
|
*.expanded
|
||||||
|
/bin/vgcore.*
|
||||||
@@ -1 +1,3 @@
|
|||||||
(define variable "Hello World!")
|
(define variable "imported")
|
||||||
|
|
||||||
|
(define (get-imported-variable) variable)
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
(import "tests/import.slime")
|
(import "tests/import.slime")
|
||||||
|
|
||||||
(print variable)
|
(assert (= variable "imported"))
|
||||||
|
(assert (= (get-imported-variable) "imported"))
|
||||||
|
|
||||||
|
(load "tests/load.slime")
|
||||||
|
|
||||||
|
(assert (= variable "loaded"))
|
||||||
|
(assert (= (get-imported-variable) "imported"))
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
(define variable "loaded")
|
||||||
+4
-2
@@ -48,7 +48,8 @@ proc built_in_load(String* file_name, Environment* env) -> Lisp_Object* {
|
|||||||
|
|
||||||
proc built_in_import(String* file_name, Environment* env) -> Lisp_Object* {
|
proc built_in_import(String* file_name, Environment* env) -> Lisp_Object* {
|
||||||
// create new empty environment
|
// create new empty environment
|
||||||
Environment* new_env = Memory::create_child_environment(Globals::root_environment);
|
Environment* new_env;
|
||||||
|
try new_env = Memory::create_child_environment(Globals::root_environment);
|
||||||
|
|
||||||
Environment* old_macro_env = Parser::environment_for_macros;
|
Environment* old_macro_env = Parser::environment_for_macros;
|
||||||
Parser::environment_for_macros = new_env;
|
Parser::environment_for_macros = new_env;
|
||||||
@@ -537,7 +538,8 @@ proc load_built_ins_into_environment(Environment* env) -> void {
|
|||||||
try arguments_length = list_length(arguments);
|
try arguments_length = list_length(arguments);
|
||||||
try assert_arguments_length_greater_equal(1, arguments_length);
|
try assert_arguments_length_greater_equal(1, arguments_length);
|
||||||
|
|
||||||
Environment* let_env = Memory::create_child_environment(env);
|
Environment* let_env;
|
||||||
|
try let_env = Memory::create_child_environment(env);
|
||||||
Lisp_Object* bindings = arguments->value.pair.first;
|
Lisp_Object* bindings = arguments->value.pair.first;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (bindings == Memory::nil) {
|
if (bindings == Memory::nil) {
|
||||||
|
|||||||
+2
-1
@@ -8,12 +8,13 @@ proc delete_error() -> void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, String* message) -> void {
|
proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, String* message) -> void {
|
||||||
visualize_lisp_machine();
|
|
||||||
printf("Error created in:\n%s:%d\n", c_file_name, c_file_line);
|
printf("Error created in:\n%s:%d\n", c_file_name, c_file_line);
|
||||||
|
|
||||||
delete_error();
|
delete_error();
|
||||||
debug_break();
|
debug_break();
|
||||||
|
|
||||||
|
// visualize_lisp_machine();
|
||||||
|
|
||||||
using Globals::error;
|
using Globals::error;
|
||||||
error = new(Error);
|
error = new(Error);
|
||||||
error->type = type;
|
error->type = type;
|
||||||
|
|||||||
+16
-5
@@ -1,5 +1,7 @@
|
|||||||
proc apply_arguments_to_function(Lisp_Object* arguments, Function* function) -> Lisp_Object* {
|
proc apply_arguments_to_function(Lisp_Object* arguments, Function* function) -> Lisp_Object* {
|
||||||
Environment* new_env = Memory::create_child_environment(function->parent_environment);
|
Environment* new_env;
|
||||||
|
try new_env = Memory::create_child_environment(function->parent_environment);
|
||||||
|
|
||||||
Lisp_Object* sym, *val; // used as temp storage to use `try`
|
Lisp_Object* sym, *val; // used as temp storage to use `try`
|
||||||
|
|
||||||
// positional arguments
|
// positional arguments
|
||||||
@@ -427,9 +429,10 @@ proc is_truthy(Lisp_Object* expression, Environment* env) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc interprete_file (char* file_name) -> Lisp_Object* {
|
proc interprete_file (char* file_name) -> Lisp_Object* {
|
||||||
Memory::init(4096 * 256, 4096 * 256);
|
Memory::init(4096 * 256, 1024, 4096 * 256);
|
||||||
Environment* root_env = Globals::root_environment;
|
Environment* root_env = Globals::root_environment;
|
||||||
Environment* user_env = Memory::create_child_environment(root_env);
|
Environment* user_env;
|
||||||
|
try user_env = Memory::create_child_environment(root_env);
|
||||||
Parser::environment_for_macros = user_env;
|
Parser::environment_for_macros = user_env;
|
||||||
|
|
||||||
// char* file_content;
|
// char* file_content;
|
||||||
@@ -450,9 +453,15 @@ proc interprete_file (char* file_name) -> Lisp_Object* {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc interprete_stdin() -> void {
|
proc interprete_stdin() -> void {
|
||||||
Memory::init(4096 * 256, 4096 * 256);
|
Memory::init(4096 * 256, 1024, 4096 * 256);
|
||||||
Environment* root_env = Globals::root_environment;
|
Environment* root_env = Globals::root_environment;
|
||||||
Environment* user_env = Memory::create_child_environment(root_env);
|
Environment* user_env = Memory::create_child_environment(root_env);
|
||||||
|
if (Globals::error) {
|
||||||
|
log_error();
|
||||||
|
delete_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Parser::environment_for_macros = user_env;
|
Parser::environment_for_macros = user_env;
|
||||||
|
|
||||||
printf("Welcome to the lispy interpreter.\n");
|
printf("Welcome to the lispy interpreter.\n");
|
||||||
@@ -470,8 +479,10 @@ proc interprete_stdin() -> void {
|
|||||||
while (true) {
|
while (true) {
|
||||||
printf(">");
|
printf(">");
|
||||||
line = read_expression();
|
line = read_expression();
|
||||||
parsed = Parser::parse_single_expression(line);
|
defer {
|
||||||
free(line);
|
free(line);
|
||||||
|
};
|
||||||
|
parsed = Parser::parse_single_expression(line);
|
||||||
if (Globals::error) {
|
if (Globals::error) {
|
||||||
log_error();
|
log_error();
|
||||||
delete_error();
|
delete_error();
|
||||||
|
|||||||
+7
-8
@@ -1,13 +1,12 @@
|
|||||||
proc string_equal(const char input[], const char check[]) -> bool {
|
proc string_equal(const char input[], const char check[]) -> bool {
|
||||||
if (input == check) return true;
|
if (input == check) return true;
|
||||||
|
|
||||||
int i;
|
for(int i = 0; input[i] == check[i]; i++) {
|
||||||
for(i = 0; input[i] != '\0' || check[i] != '\0'; i++) {
|
if (input[i] == '\0')
|
||||||
if(input[i] != check[i]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
proc string_equal(String* str, const char check[]) -> bool {
|
proc string_equal(String* str, const char check[]) -> bool {
|
||||||
@@ -91,8 +90,8 @@ proc read_entire_file(char* filename) -> char* {
|
|||||||
/* Go to the end of the file. */
|
/* Go to the end of the file. */
|
||||||
if (fseek(fp, 0L, SEEK_END) == 0) {
|
if (fseek(fp, 0L, SEEK_END) == 0) {
|
||||||
/* Get the size of the file. */
|
/* Get the size of the file. */
|
||||||
long bufsize = ftell(fp);
|
long bufsize = ftell(fp) + 1;
|
||||||
if (bufsize == -1) {
|
if (bufsize == 0) {
|
||||||
fputs("Empty file", stderr);
|
fputs("Empty file", stderr);
|
||||||
goto closeFile;
|
goto closeFile;
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-9
@@ -13,7 +13,7 @@ namespace Memory {
|
|||||||
// ------------------
|
// ------------------
|
||||||
int environment_memory_size;
|
int environment_memory_size;
|
||||||
Int_Array_List* free_spots_in_environment_memory;
|
Int_Array_List* free_spots_in_environment_memory;
|
||||||
Lisp_Object* environment_memory;
|
Environment* environment_memory;
|
||||||
int next_index_in_environment_memory = 0;
|
int next_index_in_environment_memory = 0;
|
||||||
|
|
||||||
// ------------------
|
// ------------------
|
||||||
@@ -135,7 +135,7 @@ namespace Memory {
|
|||||||
}
|
}
|
||||||
index = next_index_in_object_memory++;
|
index = next_index_in_object_memory++;
|
||||||
} else {
|
} else {
|
||||||
// else fill a free spot
|
// else fill a free spot, and remove the free spot
|
||||||
index = free_spots_in_object_memory->data[free_spots_in_object_memory->next_index--];
|
index = free_spots_in_object_memory->data[free_spots_in_object_memory->next_index--];
|
||||||
}
|
}
|
||||||
Lisp_Object* object = object_memory+index;
|
Lisp_Object* object = object_memory+index;
|
||||||
@@ -145,14 +145,17 @@ namespace Memory {
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
proc init(int oms, int sms) {
|
proc init(int oms, int ems, int sms) {
|
||||||
object_memory_size = oms;
|
object_memory_size = oms;
|
||||||
|
environment_memory_size = ems;
|
||||||
string_memory_size = sms;
|
string_memory_size = sms;
|
||||||
|
|
||||||
free_spots_in_object_memory = create_Int_array_list();
|
free_spots_in_object_memory = create_Int_array_list();
|
||||||
|
free_spots_in_environment_memory = create_Int_array_list();
|
||||||
free_spots_in_string_memory = create_Void_Ptr_array_list();
|
free_spots_in_string_memory = create_Void_Ptr_array_list();
|
||||||
|
|
||||||
object_memory = (Lisp_Object*)malloc(object_memory_size * sizeof(Lisp_Object));
|
object_memory = (Lisp_Object*)malloc(object_memory_size * sizeof(Lisp_Object));
|
||||||
|
environment_memory = (Environment*)malloc(environment_memory_size * sizeof(Environment));
|
||||||
string_memory = (String*)malloc(string_memory_size * sizeof(char));
|
string_memory = (String*)malloc(string_memory_size * sizeof(char));
|
||||||
|
|
||||||
next_free_spot_in_string_memory = string_memory;
|
next_free_spot_in_string_memory = string_memory;
|
||||||
@@ -165,14 +168,18 @@ namespace Memory {
|
|||||||
try_void t = create_lisp_object();
|
try_void t = create_lisp_object();
|
||||||
set_type(t, Lisp_Object_Type::T);
|
set_type(t, Lisp_Object_Type::T);
|
||||||
|
|
||||||
Globals::root_environment = create_built_ins_environment();
|
try_void Globals::root_environment = create_built_ins_environment();
|
||||||
Parser::standard_in = create_string("stdin");
|
try_void Parser::standard_in = create_string("stdin");
|
||||||
}
|
}
|
||||||
|
|
||||||
proc reset() -> void {
|
proc reset() -> void {
|
||||||
free_spots_in_object_memory->next_index = 0;
|
free_spots_in_object_memory->next_index = 0;
|
||||||
|
free_spots_in_environment_memory->next_index = 0;
|
||||||
free_spots_in_string_memory->next_index = 0;
|
free_spots_in_string_memory->next_index = 0;
|
||||||
next_index_in_object_memory = 2; // because t and nil are always there
|
|
||||||
|
// because t and nil are always there we start the index at 2
|
||||||
|
next_index_in_object_memory = 2;
|
||||||
|
next_index_in_environment_memory = 0;
|
||||||
next_free_spot_in_string_memory = string_memory;
|
next_free_spot_in_string_memory = string_memory;
|
||||||
|
|
||||||
Globals::root_environment = create_built_ins_environment();
|
Globals::root_environment = create_built_ins_environment();
|
||||||
@@ -268,8 +275,27 @@ namespace Memory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc create_child_environment(Environment* parent) -> Environment* {
|
proc create_child_environment(Environment* parent) -> Environment* {
|
||||||
Environment* env = new(Environment);
|
|
||||||
|
|
||||||
|
int index;
|
||||||
|
// if we have no free spots then append at the end
|
||||||
|
if (free_spots_in_environment_memory->next_index == 0) {
|
||||||
|
// if we still have space
|
||||||
|
if (environment_memory_size == next_index_in_environment_memory) {
|
||||||
|
create_out_of_memory_error(
|
||||||
|
"There is not enough space in the environment"
|
||||||
|
"memory to allocate additional environments. "
|
||||||
|
"Maybe try increasing the Memory size when "
|
||||||
|
"calling Memory::init()");
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
index = next_index_in_environment_memory++;
|
||||||
|
} else {
|
||||||
|
// else fill a free spot, and remove the free spot
|
||||||
|
index = free_spots_in_environment_memory->data[free_spots_in_environment_memory->next_index--];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Environment* env = environment_memory+index;
|
||||||
int start_capacity = 16;
|
int start_capacity = 16;
|
||||||
|
|
||||||
env->parents = create_Environment_array_list();
|
env->parents = create_Environment_array_list();
|
||||||
@@ -286,11 +312,14 @@ namespace Memory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc create_empty_environment() -> Environment* {
|
proc create_empty_environment() -> Environment* {
|
||||||
return create_child_environment(nullptr);
|
Environment* ret;
|
||||||
|
try ret = create_child_environment(nullptr);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
proc create_built_ins_environment() -> Environment* {
|
proc create_built_ins_environment() -> Environment* {
|
||||||
Environment* ret = create_child_environment(nullptr);
|
Environment* ret;
|
||||||
|
try ret = create_child_environment(nullptr);
|
||||||
load_built_ins_into_environment(ret);
|
load_built_ins_into_environment(ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-18
@@ -197,7 +197,7 @@ proc test_eval_operands() -> testresult {
|
|||||||
char operands_string[] = "((eval 1) (+ 1 2) \"okay\" (eval :haha))";
|
char operands_string[] = "((eval 1) (+ 1 2) \"okay\" (eval :haha))";
|
||||||
Lisp_Object* operands = Parser::parse_single_expression(operands_string);
|
Lisp_Object* operands = Parser::parse_single_expression(operands_string);
|
||||||
int operands_length;
|
int operands_length;
|
||||||
operands = eval_arguments(operands, Memory::create_built_ins_environment(), &operands_length);
|
try operands = eval_arguments(operands, Memory::create_built_ins_environment(), &operands_length);
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_equal_int(list_length(operands), 4);
|
assert_equal_int(list_length(operands), 4);
|
||||||
@@ -341,7 +341,8 @@ proc test_parse_expression() -> testresult {
|
|||||||
proc test_built_in_add() -> testresult {
|
proc test_built_in_add() -> testresult {
|
||||||
char exp_string[] = "(+ 10 4)";
|
char exp_string[] = "(+ 10 4)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -354,7 +355,8 @@ proc test_built_in_add() -> testresult {
|
|||||||
proc test_built_in_substract() -> testresult {
|
proc test_built_in_substract() -> testresult {
|
||||||
char exp_string[] = "(- 10 4)";
|
char exp_string[] = "(- 10 4)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -368,7 +370,8 @@ proc test_built_in_substract() -> testresult {
|
|||||||
proc test_built_in_multiply() -> testresult {
|
proc test_built_in_multiply() -> testresult {
|
||||||
char exp_string[] = "(* 10 4)";
|
char exp_string[] = "(* 10 4)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -382,7 +385,8 @@ proc test_built_in_multiply() -> testresult {
|
|||||||
proc test_built_in_divide() -> testresult {
|
proc test_built_in_divide() -> testresult {
|
||||||
char exp_string[] = "(/ 20 4)";
|
char exp_string[] = "(/ 20 4)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -396,7 +400,8 @@ proc test_built_in_divide() -> testresult {
|
|||||||
proc test_built_in_if() -> testresult {
|
proc test_built_in_if() -> testresult {
|
||||||
char exp_string1[] = "(if 1 4 5)";
|
char exp_string1[] = "(if 1 4 5)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -405,7 +410,7 @@ proc test_built_in_if() -> testresult {
|
|||||||
|
|
||||||
char exp_string2[] = "(if () 4 5)";
|
char exp_string2[] = "(if () 4 5)";
|
||||||
expression = Parser::parse_single_expression(exp_string2);
|
expression = Parser::parse_single_expression(exp_string2);
|
||||||
result = eval_expr(expression, Memory::create_built_ins_environment());
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -418,7 +423,8 @@ proc test_built_in_if() -> testresult {
|
|||||||
proc test_built_in_and() -> testresult {
|
proc test_built_in_and() -> testresult {
|
||||||
char exp_string1[] = "(and 1 \"asd\" 4)";
|
char exp_string1[] = "(and 1 \"asd\" 4)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -427,7 +433,7 @@ proc test_built_in_and() -> testresult {
|
|||||||
// a false case
|
// a false case
|
||||||
char exp_string2[] = "(and () \"asd\" 4)";
|
char exp_string2[] = "(and () \"asd\" 4)";
|
||||||
expression = Parser::parse_single_expression(exp_string2);
|
expression = Parser::parse_single_expression(exp_string2);
|
||||||
result = eval_expr(expression, Memory::create_built_ins_environment());
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -439,7 +445,8 @@ proc test_built_in_and() -> testresult {
|
|||||||
proc test_built_in_or() -> testresult {
|
proc test_built_in_or() -> testresult {
|
||||||
char exp_string1[] = "(or \"asd\" nil)";
|
char exp_string1[] = "(or \"asd\" nil)";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -448,7 +455,7 @@ proc test_built_in_or() -> testresult {
|
|||||||
// a false case
|
// a false case
|
||||||
char exp_string2[] = "(or () ())";
|
char exp_string2[] = "(or () ())";
|
||||||
expression = Parser::parse_single_expression(exp_string2);
|
expression = Parser::parse_single_expression(exp_string2);
|
||||||
result = eval_expr(expression, Memory::create_built_ins_environment());
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -461,7 +468,8 @@ proc test_built_in_or() -> testresult {
|
|||||||
proc test_built_in_not() -> testresult {
|
proc test_built_in_not() -> testresult {
|
||||||
char exp_string1[] = "(not ())";
|
char exp_string1[] = "(not ())";
|
||||||
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
|
||||||
Lisp_Object* result = eval_expr(expression, Memory::create_built_ins_environment());
|
Lisp_Object* result;
|
||||||
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
// a true case
|
// a true case
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
@@ -471,7 +479,7 @@ proc test_built_in_not() -> testresult {
|
|||||||
// a false case
|
// a false case
|
||||||
char exp_string2[] = "(not \"asd xD\")";
|
char exp_string2[] = "(not \"asd xD\")";
|
||||||
expression = Parser::parse_single_expression(exp_string2);
|
expression = Parser::parse_single_expression(exp_string2);
|
||||||
result = eval_expr(expression, Memory::create_built_ins_environment());
|
try result = eval_expr(expression, Memory::create_built_ins_environment());
|
||||||
|
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
assert_not_null(result);
|
assert_not_null(result);
|
||||||
@@ -481,7 +489,8 @@ proc test_built_in_not() -> testresult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc test_built_in_type() -> testresult {
|
proc test_built_in_type() -> testresult {
|
||||||
Environment* env = Memory::create_built_ins_environment();
|
Environment* env;
|
||||||
|
try env = Memory::create_built_ins_environment();
|
||||||
|
|
||||||
// normal type testing
|
// normal type testing
|
||||||
char exp_string1[] = "(prog (define a 10)(type a))";
|
char exp_string1[] = "(prog (define a 10)(type a))";
|
||||||
@@ -528,7 +537,8 @@ proc test_built_in_type() -> testresult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc test_singular_t_and_nil() -> testresult {
|
proc test_singular_t_and_nil() -> testresult {
|
||||||
Environment* env = Memory::create_built_ins_environment();
|
Environment* env;
|
||||||
|
try env = Memory::create_built_ins_environment();
|
||||||
|
|
||||||
// nil testing
|
// nil testing
|
||||||
char exp_string1[] = "()";
|
char exp_string1[] = "()";
|
||||||
@@ -562,12 +572,15 @@ proc test_singular_t_and_nil() -> testresult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc test_file(const char* file) -> testresult {
|
proc test_file(const char* file) -> testresult {
|
||||||
|
Environment* root_env;
|
||||||
|
Environment* user_env;
|
||||||
|
|
||||||
Memory::reset();
|
Memory::reset();
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
|
|
||||||
Environment* root_env = Memory::create_built_ins_environment();
|
root_env = Memory::create_built_ins_environment();
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
Environment* user_env = Memory::create_child_environment(root_env);
|
user_env = Memory::create_child_environment(root_env);
|
||||||
assert_no_error();
|
assert_no_error();
|
||||||
|
|
||||||
Parser::environment_for_macros = user_env;
|
Parser::environment_for_macros = user_env;
|
||||||
@@ -582,7 +595,7 @@ proc test_file(const char* file) -> testresult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc run_all_tests() -> bool {
|
proc run_all_tests() -> bool {
|
||||||
Memory::init(4096 * 2000, 4096 * 16);
|
Memory::init(4096 * 2000, 1024, 4096 * 16);
|
||||||
Parser::environment_for_macros = Globals::root_environment;
|
Parser::environment_for_macros = Globals::root_environment;
|
||||||
|
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user