diff --git a/Makefile b/Makefile index 4fa4724..2329c78 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,9 @@ AUTHOR=Avril (Flanchan) SRC_C = $(wildcard src/*.c) SRC_CXX = $(wildcard src/*.cpp) +TEST_SRC_C = $(wildcard src/test/*.c) +TEST_SRC_CXX = $(wildcard src/test/*.cpp) + INCLUDE=include COMMON_FLAGS= -W -Wall -pedantic -fno-strict-aliasing $(addprefix -I,$(INCLUDE)) @@ -34,18 +37,25 @@ OBJ_C = $(addprefix obj/c/,$(SRC_C:.c=.o)) OBJ_CXX = $(addprefix obj/cxx/,$(SRC_CXX:.cpp=.o)) OBJ = $(OBJ_C) $(OBJ_CXX) +TEST_OBJ_C = $(addprefix obj/c/,$(TEST_SRC_C:.c=.o)) +TEST_OBJ_CXX = $(addprefix obj/cxx/,$(TEST_SRC_CXX:.cpp=.o)) +TEST_OBJ = $(TEST_OBJ_C) $(TEST_OBJ_CXX) + # Phonies .PHONY: release -release: | dirs $(PROJECT).so $(PROJECT).a +release: | dirs lib$(PROJECT).so lib$(PROJECT).a .PHONY: debug -debug: | dirs $(PROJECT)-debug.so $(PROJECT)-debug.a +debug: | dirs lib$(PROJECT)-debug.so lib$(PROJECT)-debug.a + +.PHONY: test +test: | dirs $(PROJECT)-test # Targets dirs: - @mkdir -p obj/c{,xx}/src + @mkdir -p obj/c{,xx}/src{,/test} obj/c/%.o: %.c $(CC) -c $< $(CFLAGS) -o $@ $(LDFLAGS) @@ -53,34 +63,42 @@ obj/c/%.o: %.c obj/cxx/%.o: %.cpp $(CXX) -c $< $(CXXFLAGS) -o $@ $(LDFLAGS) -$(PROJECT).a: CFLAGS+= $(RELEASE_CFLAGS) -$(PROJECT).a: CXXFLAGS += $(RELEASE_CXXFLAGS) -$(PROJECT).a: $(OBJ) +lib$(PROJECT).a: CFLAGS+= $(RELEASE_CFLAGS) +lib$(PROJECT).a: CXXFLAGS += $(RELEASE_CXXFLAGS) +lib$(PROJECT).a: $(OBJ) ar -rcs $@ $^ - $(STRIP) $@ + ranlib $@ - -$(PROJECT).so: CFLAGS+= -fPIC $(RELEASE_CFLAGS) -$(PROJECT).so: CXXFLAGS += -fPIC $(RELEASE_CXXFLAGS) -$(PROJECT).so: LDFLAGS += $(RELEASE_LDFLAGS) -$(PROJECT).so: $(OBJ) +lib$(PROJECT).so: CFLAGS+= -fPIC $(RELEASE_CFLAGS) +lib$(PROJECT).so: CXXFLAGS += -fPIC $(RELEASE_CXXFLAGS) +lib$(PROJECT).so: LDFLAGS += $(RELEASE_LDFLAGS) +lib$(PROJECT).so: $(OBJ) gcc -shared $^ -o $@ $(STRIP) $@ -$(PROJECT)-debug.a: CFLAGS+= $(DEBUG_CFLAGS) -$(PROJECT)-debug.a: CXXFLAGS += $(DEBUG_CXXFLAGS) -$(PROJECT)-debug.a: $(OBJ) +lib$(PROJECT)-debug.a: CFLAGS+= $(DEBUG_CFLAGS) +lib$(PROJECT)-debug.a: CXXFLAGS += $(DEBUG_CXXFLAGS) +lib$(PROJECT)-debug.a: $(OBJ) ar -rcs $@ $^ + ranlib $@ -$(PROJECT)-debug.so: CFLAGS+= -fPIC $(DEBUG_CFLAGS) -$(PROJECT)-debug.so: CXXFLAGS += -fPIC $(DEBUG_CXXFLAGS) -$(PROJECT)-debug.so: LDFLAGS += $(DEBUG_LDFLAGS) -$(PROJECT)-debug.so: $(OBJ) +lib$(PROJECT)-debug.so: CFLAGS+= -fPIC $(DEBUG_CFLAGS) +lib$(PROJECT)-debug.so: CXXFLAGS += -fPIC $(DEBUG_CXXFLAGS) +lib$(PROJECT)-debug.so: LDFLAGS += $(DEBUG_LDFLAGS) +lib$(PROJECT)-debug.so: $(OBJ) gcc -shared $^ -o $@ +$(PROJECT)-test-static: $(TEST_OBJ) + gcc $^ -o $@ -L. -l:lib$(PROJECT).a + +$(PROJECT)-test: lib$(PROJECT).a + $(MAKE) $(PROJECT)-test-static + mv $(PROJECT)-test-static $@ + ./$@ + clean-rebuild: rm -rf obj clean: clean-rebuild - rm -f $(PROJECT){-debug,}.{so,a} - + rm -f lib$(PROJECT){-debug,}.{so,a} + rm -f $(PROJECT)-test diff --git a/src/test/main.cpp b/src/test/main.cpp index df602b1..2c8ab7b 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -1,11 +1,70 @@ +#include #include -SM_GENERATOR(read_number) +#include + +struct _test { + int a, b; +}; + +SM_GENERATOR(sm_test_2) { - + int* a = SM_VAR(-10); + + SM_BEGIN; + while( (*a) < 0 ) { + printf("(2) a = %d\n", *a); + SM_YIELD_VALUE(*a); + (*a)+=1; + } + printf("Done!\n"); + SM_END; +} + +SM_GENERATOR(sm_test) +{ + int* a = SM_VAR(10); + + auto c = SM_SLOT(_test); + float* d = SM_SLOT(float); + + *c = { 200, 300 }; + *d = 10.f; + + SM_BEGIN; + *a = 5; + SM_YIELD_VALUE(*a); + printf("IN a = %d\n", *a); + *a = 1; + SM_YIELD_VALUE(*a); + printf("IN a = %d\n", *a); + //printf("Starting function 2\n"); + SM_YIELD(sm_test_2); + //printf("2 done\n"); + + SM_END; } int main() { + auto state = sm_new_state(); + auto gen = sm_generate(&sm_test); + + sm_state_setopt(state, INTERMEDIATE_RETURNS, false); + + sm_output output; + int out_int=0; + while(sm_next(&gen, state, &output)) { + if(!sm_output_value(output, &out_int)) + continue; + printf("OUT \t\ta = %d\n", out_int); // prints the last one, is this a good or bad thing? + } + + printf("\n\nFinal output: %d\n", out_int); + sm_free_output(&output); + + sm_free_generator(gen); + sm_free_state(state); + return 0; } diff --git a/src/test/yield_test.cpp b/src/test/yield_test.cpp deleted file mode 100644 index 2c8ab7b..0000000 --- a/src/test/yield_test.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include - -#include - -struct _test { - int a, b; -}; - -SM_GENERATOR(sm_test_2) -{ - int* a = SM_VAR(-10); - - SM_BEGIN; - while( (*a) < 0 ) { - printf("(2) a = %d\n", *a); - SM_YIELD_VALUE(*a); - (*a)+=1; - } - printf("Done!\n"); - SM_END; -} - -SM_GENERATOR(sm_test) -{ - int* a = SM_VAR(10); - - auto c = SM_SLOT(_test); - float* d = SM_SLOT(float); - - *c = { 200, 300 }; - *d = 10.f; - - SM_BEGIN; - *a = 5; - SM_YIELD_VALUE(*a); - printf("IN a = %d\n", *a); - *a = 1; - SM_YIELD_VALUE(*a); - printf("IN a = %d\n", *a); - //printf("Starting function 2\n"); - SM_YIELD(sm_test_2); - //printf("2 done\n"); - - SM_END; -} - -int main() -{ - auto state = sm_new_state(); - auto gen = sm_generate(&sm_test); - - sm_state_setopt(state, INTERMEDIATE_RETURNS, false); - - sm_output output; - int out_int=0; - while(sm_next(&gen, state, &output)) { - if(!sm_output_value(output, &out_int)) - continue; - printf("OUT \t\ta = %d\n", out_int); // prints the last one, is this a good or bad thing? - } - - printf("\n\nFinal output: %d\n", out_int); - sm_free_output(&output); - - sm_free_generator(gen); - sm_free_state(state); - - return 0; -}