test suite: add djot.js bench files as tests

This commit is contained in:
Noah Hellman 2023-01-30 16:58:46 +01:00
parent 9ab8be5d30
commit 08332bed5e
4 changed files with 54 additions and 1 deletions

View file

@ -19,3 +19,4 @@ exclude = [
[features] [features]
suite = [] # test suite suite = [] # test suite
suite_bench = [] # bench test suite

View file

@ -9,8 +9,19 @@ suite:
(cd tests/suite && make) (cd tests/suite && make)
cargo test --features suite 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: clean:
cargo clean cargo clean
git submodule deinit -f --all git submodule deinit -f --all
rm -f tests/suite/*.test rm -f tests/suite/*.test
(cd tests/suite && make clean) (cd tests/suite && make clean)
rm -f tests/bench/*.dj
(cd tests/bench && make clean)

39
tests/bench/Makefile Normal file
View file

@ -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

View file

@ -1,7 +1,9 @@
#[cfg(feature = "suite_bench")]
mod bench;
#[cfg(feature = "suite")] #[cfg(feature = "suite")]
mod suite; mod suite;
#[cfg(feature = "suite")] #[cfg(any(feature = "suite", feature = "suite_bench"))]
#[macro_export] #[macro_export]
macro_rules! suite_test { macro_rules! suite_test {
($src:expr, $expected:expr) => { ($src:expr, $expected:expr) => {