we testing sucessfull again

This commit is contained in:
Felix Brendel
2019-06-06 15:28:57 +02:00
parent c0e79075bc
commit 582022601c
9 changed files with 87 additions and 84 deletions
+6 -5
View File
@@ -90,10 +90,10 @@ proc load_built_ins_into_environment(Environment* env) -> void {
#define cLambda [=](Lisp_Object* arguments, Environment* env) mutable -> Lisp_Object*
proc defun = [&](const char* name, auto fun) {
define_symbol(
Memory::get_or_create_lisp_object_symbol(name),
Memory::create_lisp_object_cfunction(fun),
env);
// TODO(Felix): inline the params again after debugging
auto sym = Memory::get_or_create_lisp_object_symbol(name);
auto sfun = Memory::create_lisp_object_cfunction(fun);
define_symbol(sym, sfun, env);
};
proc parse_lambda_starting_from_args = [&](Lisp_Object* arguments, Environment* env, bool is_special = false) -> Lisp_Object* {
@@ -413,7 +413,7 @@ proc load_built_ins_into_environment(Environment* env) -> void {
try assert_arguments_length(2, arguments_length);
Lisp_Object* target = evaluated_arguments->value.pair.first;
Lisp_Object* source = evaluated_arguments->value.pair.rest->value.pair.first;
#
if (target == Memory::nil ||
target == Memory::t ||
Memory::get_type(target) == Lisp_Object_Type::Keyword ||
@@ -519,6 +519,7 @@ proc load_built_ins_into_environment(Environment* env) -> void {
newPairHead = newPair;
} else {
try newPairHead->value.pair.rest = Memory::create_lisp_object_pair(Memory::nil, Memory::nil);
newPairHead = newPairHead->value.pair.rest;
newPairHead->value.pair.first = spliced->value.pair.first;
newPairHead->value.pair.rest = spliced->value.pair.rest;
+1
View File
@@ -4,6 +4,7 @@ proc define_symbol(Lisp_Object* symbol, Lisp_Object* value, Environment* env) ->
// also searching for thesymbol from the back, so we will find the
// latest defined one first, but a bit messy. Later we should use
// a hashmap here. @refactor
if (env->next_index == env->capacity) {
env->capacity *= 2;
env->keys = (char**)realloc(env->keys, env->capacity * sizeof(char*));
+2
View File
@@ -380,6 +380,8 @@ proc eval_expr(Lisp_Object* node, Environment* env) -> Lisp_Object* {
case Lisp_Object_Type::Number:
case Lisp_Object_Type::Keyword:
case Lisp_Object_Type::String:
case Lisp_Object_Type::Function:
case Lisp_Object_Type::CFunction:
return node;
case Lisp_Object_Type::Symbol: {
Lisp_Object* symbol;
+23 -22
View File
@@ -197,7 +197,7 @@ proc test_eval_operands() -> testresult {
char operands_string[] = "((eval 1) (+ 1 2) \"okay\" (eval :haha))";
Lisp_Object* operands = Parser::parse_single_expression(operands_string);
int operands_length;
try operands = eval_arguments(operands, Memory::create_built_ins_environment(), &operands_length);
try operands = eval_arguments(operands, Globals::root_environment, &operands_length);
assert_no_error();
assert_equal_int(list_length(operands), 4);
@@ -342,7 +342,7 @@ proc test_built_in_add() -> testresult {
char exp_string[] = "(+ 10 4)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -356,7 +356,8 @@ proc test_built_in_substract() -> testresult {
char exp_string[] = "(- 10 4)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -371,7 +372,7 @@ proc test_built_in_multiply() -> testresult {
char exp_string[] = "(* 10 4)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -386,7 +387,7 @@ proc test_built_in_divide() -> testresult {
char exp_string[] = "(/ 20 4)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -401,7 +402,7 @@ proc test_built_in_if() -> testresult {
char exp_string1[] = "(if 1 4 5)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -410,7 +411,7 @@ proc test_built_in_if() -> testresult {
char exp_string2[] = "(if () 4 5)";
expression = Parser::parse_single_expression(exp_string2);
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -424,7 +425,7 @@ proc test_built_in_and() -> testresult {
char exp_string1[] = "(and 1 \"asd\" 4)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -433,7 +434,7 @@ proc test_built_in_and() -> testresult {
// a false case
char exp_string2[] = "(and () \"asd\" 4)";
expression = Parser::parse_single_expression(exp_string2);
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -446,7 +447,7 @@ proc test_built_in_or() -> testresult {
char exp_string1[] = "(or \"asd\" nil)";
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -455,7 +456,7 @@ proc test_built_in_or() -> testresult {
// a false case
char exp_string2[] = "(or () ())";
expression = Parser::parse_single_expression(exp_string2);
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -469,7 +470,7 @@ proc test_built_in_not() -> testresult {
char exp_string1[] = "(not ())";
Lisp_Object* expression = Parser::parse_single_expression(exp_string1);
Lisp_Object* result;
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
// a true case
assert_no_error();
@@ -479,7 +480,7 @@ proc test_built_in_not() -> testresult {
// a false case
char exp_string2[] = "(not \"asd xD\")";
expression = Parser::parse_single_expression(exp_string2);
try result = eval_expr(expression, Memory::create_built_ins_environment());
try result = eval_expr(expression, Globals::root_environment);
assert_no_error();
assert_not_null(result);
@@ -490,7 +491,7 @@ proc test_built_in_not() -> testresult {
proc test_built_in_type() -> testresult {
Environment* env;
try env = Memory::create_built_ins_environment();
try env = Globals::root_environment;
// normal type testing
char exp_string1[] = "(begin (define a 10)(type a))";
@@ -538,7 +539,7 @@ proc test_built_in_type() -> testresult {
proc test_singular_t_and_nil() -> testresult {
Environment* env;
try env = Memory::create_built_ins_environment();
try env = Globals::root_environment;
// nil testing
char exp_string1[] = "()";
@@ -589,7 +590,7 @@ proc test_file(const char* file) -> testresult {
}
proc run_all_tests() -> bool {
Memory::init(4096 * 2000, 1024 * 32, 4096 * 16);
Memory::init(4096 * 2000, 1024 * 32, 4096 * 16 * 10);
// get the direction of the exe
char* exe_path = exe_dir();
@@ -628,12 +629,12 @@ proc run_all_tests() -> bool {
printf("\n-- Test Files --\n");
// invoke_test_script("evaluation_of_default_args");
// invoke_test_script("lexical_scope");
// invoke_test_script("class_macro");
// invoke_test_script("import_and_load");
// invoke_test_script("sicp");
// invoke_test_script("macro_expand");
invoke_test_script("evaluation_of_default_args");
invoke_test_script("lexical_scope");
invoke_test_script("class_macro");
invoke_test_script("import_and_load");
invoke_test_script("sicp");
invoke_test_script("macro_expand");
return result;
}