view src/parallel_execution/test/stack_test.c @ 246:421ea91dd76c

Change initContext type from __code to void
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 25 Jan 2017 03:07:59 +0900
parents 50d0d1b468aa
children 23767f714f4a
line wrap: on
line source

#include "../stack.h"
#include "../context.h"
#include "../origin_cs.h"
#include <assert.h>

__code stack_test1(struct Context* context, struct Task* task, struct Stack* stack) {
    task->code = C_stack_test1;
    stack->next = C_stack_test2;
    stack->data = (union Data*)task;
    goto meta(context, stack->stack->Stack.push);
}

__code stack_test1_stub(struct Context* context) {
    Task* task = &ALLOCATE(context, Task)->Task;
    struct Stack* stack = &(createSingleLinkedStack(context)->Stack);
    assert(stack->stack->SingleLinkedStack.top == NULL);
    context->data[D_Stack]->Stack.stack = (union Data*)stack;
    goto stack_test1(context,
            task,
            &context->data[D_Stack]->Stack);
}

__code stack_test2(struct Context* context, struct Task* task, struct Stack* stack) {
    task->code = C_stack_test2;
    stack->next = C_stack_test3;
    stack->data = (union Data*)task;
    goto meta(context, stack->stack->Stack.push);
}

__code stack_test2_stub(struct Context* context) {
    assert(context->data[D_Stack]->Stack.stack->Stack.stack->SingleLinkedStack.top->data->Task.code == C_stack_test1);
    Task* task = &ALLOCATE(context, Task)->Task;
    goto stack_test2(context,
            task,
            &context->data[D_Stack]->Stack);
}

__code stack_test3(struct Context* context, struct Stack* stack) {
    stack->next = C_stack_test4;
    goto meta(context, stack->stack->Stack.pop);
}

__code stack_test3_stub(struct Context* context) {
    assert(context->data[D_Stack]->Stack.stack->Stack.stack->SingleLinkedStack.top->data->Task.code == C_stack_test2);
    goto stack_test3(context,
            &context->data[D_Stack]->Stack);
}

__code stack_test4(struct Context* context) {
    goto meta(context, C_exit_code);
}

__code stack_test4_stub(struct Context* context) {
    assert(context->data[D_Stack]->Stack.data->Task.code == C_stack_test2);
    assert(context->data[D_Stack]->Stack.stack->Stack.stack->SingleLinkedStack.top->data->Task.code == C_stack_test1);
    goto stack_test4(context);
}

int main(int argc, char const* argv[]) {
    struct Context* main_context = NEW(struct Context);
    initContext(main_context);
    main_context->next = C_stack_test1;
    goto start_code(main_context);
}