diff options
| author | J08nY | 2017-08-29 16:59:14 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-29 16:59:14 +0200 |
| commit | 3e9be5f5db1bccb5eb11d51cf615182eb394afb6 (patch) | |
| tree | 93977fbc769daaf1b89620753070e4f408b7bf41 | |
| parent | f98b11a252ca227cf0376a3cd7cf1d69f6686385 (diff) | |
| parent | 4b5d03eda289aa477e693cad8b598a398bb7e04c (diff) | |
| download | ecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.tar.gz ecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.tar.zst ecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.zip | |
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | .travis.yml | 2 | ||||
| -rw-r--r-- | CMakeLists.txt | 8 | ||||
| -rw-r--r-- | Makefile | 10 | ||||
| -rw-r--r-- | src/math/subgroups.c | 2 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | test/Makefile | 15 | ||||
| -rw-r--r-- | test/data/econvert_format.csv (renamed from test/econvert_format.csv) | 0 | ||||
| -rw-r--r-- | test/data/econvert_format.json (renamed from test/econvert_format.json) | 0 | ||||
| -rw-r--r-- | test/data/f2m_10_a.csv (renamed from test/f2m_10_a.csv) | 0 | ||||
| -rw-r--r-- | test/data/f2m_10_a.csv.in (renamed from test/f2m_10_a.csv.in) | 0 | ||||
| -rw-r--r-- | test/data/f2m_10_a.json (renamed from test/f2m_10_a.json) | 0 | ||||
| -rw-r--r-- | test/data/fp_10_a.csv (renamed from test/fp_10_a.csv) | 0 | ||||
| -rw-r--r-- | test/data/fp_10_a.csv.in (renamed from test/fp_10_a.csv.in) | 0 | ||||
| -rw-r--r-- | test/data/fp_10_a.json (renamed from test/fp_10_a.json) | 0 | ||||
| -rwxr-xr-x | test/ecgen.sh | 12 | ||||
| m--------- | test/lib/criterion | 0 | ||||
| -rw-r--r-- | test/src/Makefile | 42 | ||||
| -rw-r--r-- | test/src/math/test_subgroups.c | 28 | ||||
| -rw-r--r-- | test/src/test/utils.c | 14 | ||||
| -rw-r--r-- | test/src/test/utils.h | 12 | ||||
| -rw-r--r-- | test/verify.gp | 0 |
23 files changed, 151 insertions, 16 deletions
@@ -1,9 +1,8 @@ ### Custom -/data/ -/gen/ /lib/pari/ /ecgen /econvert +/test/src/test_ecgen ### Doxygen /docs/html/ diff --git a/.gitmodules b/.gitmodules index 450ea9a..7340c03 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "test/lib/JSON.sh"] path = test/lib/JSON.sh url = https://github.com/jimklimov/JSON.sh +[submodule "test/lib/criterion"] + path = test/lib/criterion + url = https://github.com/Snaipe/Criterion diff --git a/.travis.yml b/.travis.yml index d10cd52..da792fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ before_install: - sudo dpkg --force-all -i libreadline7_7.0-0ubuntu2_amd64.deb libpari-gmp-tls5_2.9.3-1_amd64.deb libpari-dev_2.9.3-1_amd64.deb pari-gp_2.9.3-1_amd64.deb script: - - TEST=1 make -j2 test + - TEST=1 make -j2 unittest after_success: - bash <(curl -s https://codecov.io/bash) diff --git a/CMakeLists.txt b/CMakeLists.txt index b696f5e..a13030d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 2.8.11) project(ecgen C) set(CMAKE_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/lib) -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -g -Wall -Werror -pedantic") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG -O3 -Wall") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -g -Wall -Werror -pedantic") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG -O3 -Wall") include_directories(src) include_directories(lib) @@ -19,4 +19,6 @@ add_executable(ecgen ${ECGEN_SRC}) add_executable(econvert ${ECONVERT_SRC}) target_link_libraries(ecgen pthread rt pari ${parson} ${sha1}) -target_link_libraries(econvert pthread rt pari ${parson} ${sha1})
\ No newline at end of file +target_link_libraries(econvert pthread rt pari ${parson} ${sha1}) + +add_subdirectory(test)
\ No newline at end of file @@ -10,11 +10,13 @@ all: clean: +$(MAKE) -C src clean + +$(MAKE) -C test clean rm -rf *.gcov clean-all: +$(MAKE) -C lib clean +$(MAKE) -C src clean-all + +$(MAKE) -C test clean-all rm -rf *.gcov rm -rf doc/* @@ -24,6 +26,9 @@ docs: test: all +$(MAKE) -C test test +unittest: all + +$(MAKE) -C test unittest + help: @echo "ecgen, tool for generating Elliptic curve domain parameters" @echo @@ -33,14 +38,15 @@ help: @echo " - econvert : build the format conversion binary" @echo " - docs : generate doxygen docs" @echo " - test : test the main binary" + @echo " - unittest : " @echo " - clean : cleans up after a build" @echo " - clean-all : cleans all" @echo " - format : run clang-format on source files" @echo " - help : print this help" -.PHONY: all clean clean-all docs test help +.PHONY: all clean clean-all docs test unittest help -ifeq (, $(filter all clean clean-all docs test help, $(MAKECMDGOALS))) +ifeq (, $(filter all clean clean-all docs test unittest help, $(MAKECMDGOALS))) # Just pass all targets to a Makefile in src $(MAKECMDGOALS): +$(MAKE) -C src $@ diff --git a/src/math/subgroups.c b/src/math/subgroups.c index 903401e..3b84d5c 100644 --- a/src/math/subgroups.c +++ b/src/math/subgroups.c @@ -61,7 +61,7 @@ static GEN subgroups_exponents(GEN order) { GEN subgroups_prime(const curve_t *curve, const config_t *cfg) { if (cfg->prime || isprime(curve->order)) { - return gtovec(curve->order); + return gtocol(curve->order); } else { return subgroups_factors(curve->order); } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..066defb --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 2.8.11) +project(test_ecgen C) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/criterion/include) + +find_library(criterion NAMES criterion PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/criterion/build) + +file(GLOB TEST_SRC "src/math/*.c" "src/gen/*.c" "src/cm/*.c" "src/invalid/*.c" "src/io/*.c" "src/exhaustive/*.c" "src/util/*.c") +file(GLOB TESTING_SRC "src/test/*.c") +add_executable(test_ecgen ${TEST_SRC} ${TESTING_SRC} ${SRC}) + +target_link_libraries(test_ecgen pthread rt pari ${parson} ${sha1} ${criterion}) + +enable_testing() +add_test(NAME test_ecgen COMMAND test_ecgen)
\ No newline at end of file diff --git a/test/Makefile b/test/Makefile index 10de2dc..7ac8236 100644 --- a/test/Makefile +++ b/test/Makefile @@ -7,8 +7,21 @@ test: ecgen econvert +unittest: unit ecgen econvert + +unit: + cd lib/criterion && mkdir -p build && cd build && cmake .. && cmake --build . + +$(MAKE) -C src all + ecgen: ./ecgen.sh econvert: - ./econvert.sh
\ No newline at end of file + ./econvert.sh + +clean: + +$(MAKE) -C src clean + +clean-all: + cd lib/criterion && rm -r build + +$(MAKE) -C src clean-all
\ No newline at end of file diff --git a/test/econvert_format.csv b/test/data/econvert_format.csv index 358d807..358d807 100644 --- a/test/econvert_format.csv +++ b/test/data/econvert_format.csv diff --git a/test/econvert_format.json b/test/data/econvert_format.json index 8bb9bc2..8bb9bc2 100644 --- a/test/econvert_format.json +++ b/test/data/econvert_format.json diff --git a/test/f2m_10_a.csv b/test/data/f2m_10_a.csv index 913fe0f..913fe0f 100644 --- a/test/f2m_10_a.csv +++ b/test/data/f2m_10_a.csv diff --git a/test/f2m_10_a.csv.in b/test/data/f2m_10_a.csv.in index 33d08e3..33d08e3 100644 --- a/test/f2m_10_a.csv.in +++ b/test/data/f2m_10_a.csv.in diff --git a/test/f2m_10_a.json b/test/data/f2m_10_a.json index e04fbd8..e04fbd8 100644 --- a/test/f2m_10_a.json +++ b/test/data/f2m_10_a.json diff --git a/test/fp_10_a.csv b/test/data/fp_10_a.csv index b9ec96c..b9ec96c 100644 --- a/test/fp_10_a.csv +++ b/test/data/fp_10_a.csv diff --git a/test/fp_10_a.csv.in b/test/data/fp_10_a.csv.in index 4f4cff3..4f4cff3 100644 --- a/test/fp_10_a.csv.in +++ b/test/data/fp_10_a.csv.in diff --git a/test/fp_10_a.json b/test/data/fp_10_a.json index 666491a..666491a 100644 --- a/test/fp_10_a.json +++ b/test/data/fp_10_a.json diff --git a/test/ecgen.sh b/test/ecgen.sh index 2f69c60..c1cbc07 100755 --- a/test/ecgen.sh +++ b/test/ecgen.sh @@ -17,16 +17,16 @@ function runs() { function csv() { start_test - assert_matches "${ecgen} --fp -tcsv --input=fp_10_a.csv.in 10" "$(cat fp_10_a.csv)" - assert_matches "${ecgen} --f2m -tcsv --input=f2m_10_a.csv.in 10" "$(cat f2m_10_a.csv)" + assert_matches "${ecgen} --fp -tcsv --input=data/fp_10_a.csv.in 10" "$(cat data/fp_10_a.csv)" + assert_matches "${ecgen} --f2m -tcsv --input=data/f2m_10_a.csv.in 10" "$(cat data/f2m_10_a.csv)" } function json() { start_test - assert_raises "${ecgen} --fp -tjson --input=fp_10_a.csv.in 10" - assert_raises "${ecgen} --f2m -tjson --input=f2m_10_a.csv.in 10" - fp=$(${ecgen} --fp -tjson --input=fp_10_a.csv.in 10 2>/dev/null) - f2m=$(${ecgen} --f2m -tjson --input=f2m_10_a.csv.in 10 2>/dev/null) + assert_raises "${ecgen} --fp -tjson --input=data/fp_10_a.csv.in 10" + assert_raises "${ecgen} --f2m -tjson --input=data/f2m_10_a.csv.in 10" + fp=$(${ecgen} --fp -tjson --input=data/fp_10_a.csv.in 10 2>/dev/null) + f2m=$(${ecgen} --f2m -tjson --input=data/f2m_10_a.csv.in 10 2>/dev/null) assert_raises "${JSON}" 0 "${fp}" assert_matches "${JSON} -x field\\\",\\\"p" "0x000b" "${fp}" assert_matches "${JSON} -x \\\"a\\\"" "0x0001" "${fp}" diff --git a/test/lib/criterion b/test/lib/criterion new file mode 160000 +Subproject 514b4d820e2f8fb4daa2b95b69c981853656cb7 diff --git a/test/src/Makefile b/test/src/Makefile new file mode 100644 index 0000000..27e6ea2 --- /dev/null +++ b/test/src/Makefile @@ -0,0 +1,42 @@ +#### +# +# ecgen, tool for generating Elliptic curve domain parameters +# Copyright (C) 2017 J08nY +# +#### + + +CC ?= gcc +CFLAGS = -Wall +TEST ?= 0 +ifeq ($(TEST), 1) + CFLAGS += --coverage -g -O0 +endif +LDFLAGS = -L../../lib/parson -L../../lib/sha1 -L../../lib/pari -L../lib/criterion/build +INCLUDES = -I. -I../../src -I../../lib -I../lib/criterion/include +LIBS = -lrt -lpari -lpthread -lparson -lsha1 -lcriterion + +TEST_SRC = $(wildcard *.c) $(wildcard */*.c) +TEST_OBJ = $(patsubst %.c,%.o, $(TEST_SRC)) +TESTS = $(patsubst %.c,%, $(TEST_SRC)) + +ECGEN_SRC = $(wildcard ../../src/*/*.c) +ECGEN_OBJ = $(patsubst %.c,%.o, $(ECGEN_SRC)) + +all: test_ecgen + LD_LIBRARY_PATH=../lib/criterion/build ./test_ecgen + +test_ecgen: $(TEST_OBJ) $(ECGEN_OBJ) + $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS) $(LIBS) + +%.o: %.c + $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< + +clean-all: clean + rm -f ./test_ecgen + +clean: + find . -type f -name '*.o' -exec rm {} + + find . -type f -name '*.gcda' -exec rm {} + + find . -type f -name '*.gcno' -exec rm {} + + find . -type f -name '*.gcov' -exec rm {} + diff --git a/test/src/math/test_subgroups.c b/test/src/math/test_subgroups.c new file mode 100644 index 0000000..ad42282 --- /dev/null +++ b/test/src/math/test_subgroups.c @@ -0,0 +1,28 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#include "gen/types.h" +#include "math/subgroups.h" +#include <criterion/criterion.h> +#include "test/utils.h" + +TestSuite(subgroups, .init=default_setup, .fini=default_teardown); + +Test(subgroups, test_prime_factors) { + curve_t curve = {.order = stoi(12)}; + config_t cfg = {.prime = false}; + GEN divs = subgroups_prime(&curve, &cfg); + GEN vec = gtocol0(gen_0, 2); + gel(vec, 1) = stoi(2); + gel(vec, 2) = stoi(3); + cr_assert(gequal(divs, vec), "Factors not equal!"); +} + +Test(subgroups, test_prime_prime) { + curve_t curve = {.order = stoi(5)}; + config_t cfg = {.prime = true}; + GEN divs = subgroups_prime(&curve, &cfg); + GEN vec = gtocol(stoi(5)); + cr_assert(gequal(divs, vec), "Factors not equal!"); +}
\ No newline at end of file diff --git a/test/src/test/utils.c b/test/src/test/utils.c new file mode 100644 index 0000000..a8a11db --- /dev/null +++ b/test/src/test/utils.c @@ -0,0 +1,14 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#include "utils.h" +#include <pari/pari.h> + +void default_setup(void) { + pari_init(1000000, 1000000); +} + +void default_teardown(void) { + pari_close(); +}
\ No newline at end of file diff --git a/test/src/test/utils.h b/test/src/test/utils.h new file mode 100644 index 0000000..2780bd2 --- /dev/null +++ b/test/src/test/utils.h @@ -0,0 +1,12 @@ +/* + * ecgen, tool for generating Elliptic curve domain parameters + * Copyright (C) 2017 J08nY + */ +#ifndef ECGEN_UTILS_H +#define ECGEN_UTILS_H + +void default_setup(void); + +void default_teardown(void); + +#endif //ECGEN_UTILS_H diff --git a/test/verify.gp b/test/verify.gp deleted file mode 100644 index e69de29..0000000 --- a/test/verify.gp +++ /dev/null |
