fixed core methods and added test

This commit is contained in:
2018-10-03 23:26:02 +02:00
parent 59012a41b7
commit 6612918cf7
4 changed files with 548 additions and 0 deletions

14
interpreter/test/Makefile Normal file
View File

@@ -0,0 +1,14 @@
CC=gcc
all: test_interpreter
interpreter: clean
$(CC) -g ../../stack.c ../interpreter.c ../core_methods.c ../../method_dispatcher/method_dispatcher.c test_interpreter.c -o interpreter
test_interpreter: interpreter
valgrind ./interpreter
clean:

View File

@@ -0,0 +1,64 @@
#include <stdlib.h>
#include <stdio.h>
#include "../interpreter.h"
#include "../core_methods.h"
#include "../../method_dispatcher/method_dispatcher.h"
size_t copy_cache(uint16_t * cache
, uint16_t offset
, size_t cache_size
, void * cache_function_data);
int main(void)
{
dispatch_tree_t tree = dispatch_tree_t_new();
dispatch_tree_autoinserter_t inserter = dispatch_tree_autoinserter_t_new(tree);
uint16_t ldi = dispatch_tree_autoinserter_t_insert(inserter, (bci_core_method_t) bci_cm_ldi);
uint16_t add = dispatch_tree_autoinserter_t_insert(inserter, (bci_core_method_t) bci_cm_add);
uint16_t * program = calloc(sizeof(uint16_t), 20);
program[0] = ldi;
program[1] = 0xfefe;
program[2] = ldi | 1;
program[3] = 2;
program[4] = ldi | 2;
program[5] = 3;
program[6] = add | 1;
program[7] = 2;
machine_state_t state = machine_state_t_new(
program
, 8
, 20
, 20
, copy_cache
, tree);
machine_state_t_exec_cycle(state);
machine_state_t_exec_cycle(state);
machine_state_t_exec_cycle(state);
machine_state_t_exec_cycle(state);
printf("data_reg[0]: %x\n", state->data_reg[0]);
printf("data_reg[1]: %x\n", state->data_reg[1]);
printf("data_reg[2]: %x\n", state->data_reg[2]);
printf("program_counter: %d\n", state->program_counter);
dispatch_tree_autoinserter_t_del(inserter);
machine_state_t_del(state);
free(program);
return 0;
}
size_t copy_cache(uint16_t * cache
, uint16_t offset
, size_t cache_size
, void * cache_function_data)
{
size_t i;
for(i = 0; i < cache_size; i++)
{
printf("\tCP [%zd]->[%zd]: %x\n", i + offset, i, ((uint16_t *) cache_function_data)[i + offset]);
cache[i] = ((uint16_t *) cache_function_data)[i + offset];
}
return i;
}