✅ acceptance test script.
parent
d3f90a5ed1
commit
8a930db339
|
@ -62,7 +62,6 @@ void compiler_run(compiler_t* compiler, node_t* node)
|
||||||
assert(node->children.size == 1);
|
assert(node->children.size == 1);
|
||||||
compiler_run(compiler, node_child(node, 0));
|
compiler_run(compiler, node_child(node, 0));
|
||||||
mod_push_instr(compiler->mod, OP_ASSERT, RZ_NO_PARAM);
|
mod_push_instr(compiler->mod, OP_ASSERT, RZ_NO_PARAM);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
|
|
20
lib/loader.c
20
lib/loader.c
|
@ -16,7 +16,7 @@ void loader_free(loader_t* loader)
|
||||||
assert(loader);
|
assert(loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loader_ldfile(loader_t* loader, char const* path, int debug)
|
int loader_ldfile(loader_t* loader, char const* path, int debug)
|
||||||
{
|
{
|
||||||
assert(loader);
|
assert(loader);
|
||||||
str_t source;
|
str_t source;
|
||||||
|
@ -46,7 +46,7 @@ void loader_ldfile(loader_t* loader, char const* path, int debug)
|
||||||
if (str_empty(&source))
|
if (str_empty(&source))
|
||||||
{
|
{
|
||||||
str_free(&source);
|
str_free(&source);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tysy_t tysy;
|
tysy_t tysy;
|
||||||
|
@ -104,7 +104,20 @@ void loader_ldfile(loader_t* loader, char const* path, int debug)
|
||||||
vm_t vm;
|
vm_t vm;
|
||||||
vm_init(&vm, &err);
|
vm_init(&vm, &err);
|
||||||
|
|
||||||
vm_exec_mod(&vm, &mod);
|
int status = vm_exec_mod(&vm, &mod);
|
||||||
|
|
||||||
|
if (status != 0)
|
||||||
|
{
|
||||||
|
vm_free(&vm);
|
||||||
|
mod_free(&mod);
|
||||||
|
parser_free(&parser);
|
||||||
|
lexer_free(&lex);
|
||||||
|
str_free(&source);
|
||||||
|
tysy_free(&tysy);
|
||||||
|
err_free(&err);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
|
@ -142,4 +155,5 @@ void loader_ldfile(loader_t* loader, char const* path, int debug)
|
||||||
}
|
}
|
||||||
|
|
||||||
err_free(&err);
|
err_free(&err);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,6 @@ typedef struct {
|
||||||
void loader_init(loader_t* loader);
|
void loader_init(loader_t* loader);
|
||||||
void loader_free(loader_t* loader);
|
void loader_free(loader_t* loader);
|
||||||
|
|
||||||
void loader_ldfile(loader_t* loader, char const* path, int debug);
|
int loader_ldfile(loader_t* loader, char const* path, int debug);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
12
lib/vm.c
12
lib/vm.c
|
@ -43,7 +43,7 @@ size_t vm_stack_str(vm_t* vm, char* buffer, size_t size)
|
||||||
return sz;
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vm_exec_mod(vm_t* vm, mod_t* mod)
|
int vm_exec_mod(vm_t* vm, mod_t* mod)
|
||||||
{
|
{
|
||||||
assert(vm);
|
assert(vm);
|
||||||
vm->pc = 0;
|
vm->pc = 0;
|
||||||
|
@ -55,11 +55,13 @@ void vm_exec_mod(vm_t* vm, mod_t* mod)
|
||||||
mod->program.ops[vm->pc],
|
mod->program.ops[vm->pc],
|
||||||
mod->program.params[vm->pc]);
|
mod->program.params[vm->pc]);
|
||||||
|
|
||||||
if (!status)
|
if (status != 0)
|
||||||
{
|
{
|
||||||
return;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param)
|
int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param)
|
||||||
|
@ -102,7 +104,7 @@ int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "\33[31mASSERT\33[0m[:%d] assertion failed\n",
|
fprintf(stderr, "\33[31mASSERT\33[0m[:%d] assertion failed\n",
|
||||||
value->line);
|
value->line);
|
||||||
return 0;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
vm->pc++;
|
vm->pc++;
|
||||||
|
@ -116,5 +118,5 @@ int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
2
lib/vm.h
2
lib/vm.h
|
@ -22,7 +22,7 @@ param_t vm_pop(vm_t* vm);
|
||||||
|
|
||||||
size_t vm_stack_str(vm_t* vm, char* buffer, size_t size);
|
size_t vm_stack_str(vm_t* vm, char* buffer, size_t size);
|
||||||
|
|
||||||
void vm_exec_mod(vm_t* vm, mod_t* mod);
|
int vm_exec_mod(vm_t* vm, mod_t* mod);
|
||||||
int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param);
|
int vm_exec_instr(vm_t* vm, mod_t* mod, Opcode op, param_t param);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -54,7 +54,13 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
while (optind < argc)
|
while (optind < argc)
|
||||||
{
|
{
|
||||||
loader_ldfile(&loader, argv[optind++], debug);
|
int status = loader_ldfile(&loader, argv[optind++], debug);
|
||||||
|
|
||||||
|
if (status != 0)
|
||||||
|
{
|
||||||
|
loader_free(&loader);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loader_free(&loader);
|
loader_free(&loader);
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
assert true
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
H="========"
|
||||||
|
FILES="$(find . -name '*.roza' | sort)"
|
||||||
|
TOTAL=0
|
||||||
|
PASSED=0
|
||||||
|
|
||||||
|
FAILED_LST=""
|
||||||
|
PASSED_LST=""
|
||||||
|
TRACE_LST=""
|
||||||
|
|
||||||
|
for file in $FILES
|
||||||
|
do
|
||||||
|
TRACE="$(roza $file 2>&1)"
|
||||||
|
RES=$?
|
||||||
|
|
||||||
|
# echo -en "\e[33m$file\e[0m ... "
|
||||||
|
|
||||||
|
if [ $RES -ne 0 ]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo -e "$file \e[31mfailed\e[0m"
|
||||||
|
echo "$TRACE"
|
||||||
|
echo
|
||||||
|
FAILED_LST="$FAILED_LST $file "
|
||||||
|
TRACE_LST="$TRACE_LST $TRACE "
|
||||||
|
else
|
||||||
|
PASSED=$(($PASSED + 1))
|
||||||
|
PASSED_LST="$PASSED_LST $file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
TOTAL=$(($TOTAL + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ $PASSED -eq $TOTAL ]
|
||||||
|
then
|
||||||
|
echo -e "\e[32m$H All tests passed $H\e[0m"
|
||||||
|
else
|
||||||
|
echo -e "\e[31m$H Some tests failed $H\e[0m"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "PASSED: $PASSED"
|
||||||
|
for ok in $PASSED_LST
|
||||||
|
do
|
||||||
|
echo -e "\t$ok \e[32mpassed\e[0m"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "FAILED: $(($TOTAL - $PASSED))"
|
||||||
|
for ko in $FAILED_LST
|
||||||
|
do
|
||||||
|
echo -e "\t$ko \e[31mfailed\e[0m"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "TOTAL: $TOTAL"
|
Loading…
Reference in New Issue