diff --git a/Cargo.toml b/Cargo.toml index 7afc5e8..0ccbd04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,3 +19,4 @@ exclude = [ [features] suite = [] # test suite +suite_bench = [] # bench test suite diff --git a/Makefile b/Makefile index bcfe812..2636af6 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,19 @@ suite: (cd tests/suite && make) cargo test --features suite +.PHONY: suite_bench +suite_bench: + git submodule update --init modules/djot.js + for f in $$(find modules/djot.js/bench -name '*.dj' | xargs basename -a); do \ + ln -fs ../../modules/djot.js/bench/$$f tests/bench/$$f; \ + done + (cd tests/bench && make) + cargo test --features suite_bench + clean: cargo clean git submodule deinit -f --all rm -f tests/suite/*.test (cd tests/suite && make clean) + rm -f tests/bench/*.dj + (cd tests/bench && make clean) diff --git a/tests/bench/Makefile b/tests/bench/Makefile new file mode 100644 index 0000000..f99adad --- /dev/null +++ b/tests/bench/Makefile @@ -0,0 +1,39 @@ +.POSIX: + +TEST_DJ=$(shell find . -name '*.dj' | sort) +TEST=${TEST_DJ:.dj=} + +DJOT_JS=../../modules/djot.js +DJOT_JS_SRC=$(shell find ${DJOT_JS}/src -name '.ts') + +mod.rs: ${TEST_DJ} html + echo "use crate::suite_test;" > $@ + for name in ${TEST}; do \ + name_snake=$$(basename -a $$name | sed 's/-/_/g'); \ + echo "#[test]" >> $@; \ + echo "fn test_$$name_snake() {" >> $@; \ + printf ' let src = r###"' >> $@; \ + cat $$name.dj >> $@; \ + echo '"###;' >> $@; \ + printf ' let expected = r###"' >> $@; \ + cat $$name.html >> $@; \ + echo '"###;' >> $@; \ + echo " suite_test!(src, expected);" >> $@; \ + echo "}" >> $@; \ + done + +html: djot-js ${TEST_DJ} + echo ${TEST} + for name in ${TEST}; do cat $$name.dj | ./djot-js > $$name.html; done + touch $@ + +djot-js: ${DJOT_JS_SRC} + (cd "${DJOT_JS}" && npm install && npm run build) + echo "#!/bin/sh" > $@ + echo 'node ${DJOT_JS}/lib/cli.js "$$@"' >> $@ + chmod +x $@ + +clean: + rm -f *.rs *.html + rm -f html + rm -f djot-js diff --git a/tests/lib.rs b/tests/lib.rs index 3f2b71f..5b5f5fc 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -1,7 +1,9 @@ +#[cfg(feature = "suite_bench")] +mod bench; #[cfg(feature = "suite")] mod suite; -#[cfg(feature = "suite")] +#[cfg(any(feature = "suite", feature = "suite_bench"))] #[macro_export] macro_rules! suite_test { ($src:expr, $expected:expr) => {