restored folder structure
This commit is contained in:
@@ -1,14 +1,12 @@
|
||||
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
|
||||
all: test_stack
|
||||
|
||||
stack: clean
|
||||
$(CC) -g ../stack.c test_stack.c -o stack
|
||||
|
||||
test_stack: stack
|
||||
valgrind ./stack
|
||||
|
||||
clean:
|
||||
|
||||
-rm stack
|
||||
|
@@ -1,69 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.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]);
|
||||
assert(state->data_reg[0] == 0xfefe);
|
||||
printf("data_reg[1]: %x\n", state->data_reg[1]);
|
||||
assert(state->data_reg[1] == 5);
|
||||
printf("data_reg[2]: %x\n", state->data_reg[2]);
|
||||
assert(state->data_reg[2] == 3);
|
||||
printf("program_counter: %d\n", state->program_counter);
|
||||
assert(state->program_counter == 8);
|
||||
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;
|
||||
}
|
||||
|
34
interpreter/test/test_stack.c
Normal file
34
interpreter/test/test_stack.c
Normal file
@@ -0,0 +1,34 @@
|
||||
#include <stdio.h>
|
||||
#include "../stack.h"
|
||||
#include <assert.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
bci_stack_t stack = NULL;
|
||||
int i;
|
||||
uint16_t res;
|
||||
char status = 0;
|
||||
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
bci_stack_t_push(&stack, (uint16_t) i);
|
||||
}
|
||||
--i;
|
||||
while(!status)
|
||||
{
|
||||
status = bci_stack_t_pop(&stack, &res);
|
||||
if(!status)
|
||||
{
|
||||
assert(res == i--);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
bci_stack_t_push(&stack, (uint16_t) i);
|
||||
}
|
||||
bci_stack_t_del(&stack);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user