From: Kim Nguyễn Date: Thu, 25 Jul 2013 09:26:56 +0000 (+0200) Subject: Factor Remakefie and add more tests for parallel query composition. X-Git-Tag: v0.1~58 X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=commitdiff_plain;h=fa7e819743a4a6d008ec086dfdeb2e30df2da701 Factor Remakefie and add more tests for parallel query composition. --- diff --git a/Remakefile.in b/Remakefile.in index 157437f..f8552fe 100644 --- a/Remakefile.in +++ b/Remakefile.in @@ -92,17 +92,22 @@ distclean: clean test_clean . tools/ocamldriver.sh %.cmi: - $(REMAKE) $*.mli - if test -z "$(OCAMLNATIVE)"; then - $(OCAMLC) -c $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) $*.mli + base=$* + target=$@ + NATIVE=$(OCAMLNATIVE) + REMAKE="$(REMAKE) -v OCAMLNATIVE=$NATIVE" + OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)" + SRC=$(SRC) + if test -z "$NATIVE"; then + COMPILE="$(OCAMLC) $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)" else - $(OCAMLOPT) -c $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) $*.mli - + COMPILE="$(OCAMLOPT) $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS)" fi + . tools/ocamldriver.sh ## Tests -test: tools $(BIN) +test: for i in tests/*.xml do for j in 1 2 3 @@ -114,106 +119,16 @@ test: tools $(BIN) test_clean: rm -rf tests/*.summary tests/*.results/*_"$(PACKAGE)"_*.* -%.test1.summary: - base="$@" - base=${base%.xml.test1.summary} - $(REMAKE) "$base".xml "$base".xml.queries - rm -f "$@" - MSG="Test 1 (single query: tatoo vs java implementation)" - echo "$MSG" >> "$@" - echo "$MSG" - cat "$base".xml.queries | grep -v '^#' | while read q query; do - echo -n "$base"".xml $q $query ... " - REF="$base".xml.results/"$q"_jaxp.xml - $(REMAKE) "$REF" - OUTPUT="$base".xml.results/"$q"_"$(PACKAGE)"_test1.xml - LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test1.log - cp "$@" /tmp - src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \ - "$query" -o "$OUTPUT" > "$LOG" 2>&1 - cp "$@" /tmp - echo "Query: $q : $query" >> "$@" - cat "$LOG" | grep '^STATS' >> "$@" - echo -n "Diff: " >> "$@" - if tools/xml_diff.native "$REF" "$OUTPUT" >/dev/null 2>&1; then - echo ok - echo ok >> "$@" - else - echo failed - echo failed >> "$@" - exit 1 - fi - echo '-------------------------------------------' >> "$@" - done - -%.test2.summary: - base="$@" - base=${base%.xml.test2.summary} - $(REMAKE) "$base".xml "$base".xml.queries - rm -f "$@" - MSG="Test 2 (all queries sequentially vs all queries in parallel)" - echo "$MSG" >> "$@" - echo "$MSG" - allqueries=`cat "$base".xml.queries | grep -v '^#' | while read q query; do echo "'$query'"; done` - echo -n "Running all queries ... " - OUTPUTA="$base".xml.results/test2a_"$(PACKAGE)".xml - LOG="$base".xml.results/test2a_"$(PACKAGE)".log - echo -n "sequential ... " - echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \ - -o "$OUTPUTA" > "$LOG" 2>&1 - cat "$LOG" | grep '^STATS' >> "$@" - - OUTPUTB="$base".xml.results/test2b_"$(PACKAGE)".xml - LOG="$base".xml.results/test2b_"$(PACKAGE)".log - echo -n "parallel ... " - echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -p -s -d "$base".xml \ - -o "$OUTPUTB" > "$LOG" 2>&1 - cat "$LOG" | grep '^STATS' >> "$@" - echo -n "Diff: " >> "$@" - if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then - echo ok - echo ok >> "$@" - else - echo failed - echo failed >> "$@" - exit 1 - fi - echo '-------------------------------------------' >> "$@" - -%.test3.summary: - base="$@" - base=${base%.xml.test3.summary} - $(REMAKE) "$base".xml "$base".xml.queries - rm -f "$@" - MSG="Test 3 (multiple queries composition: sequential vs parallel)" - echo "$MSG" >> "$@" - echo "$MSG" - cat "$base".xml.queries | grep -v '^#' | while read q query; do - echo -n "$base"".xml $q $query ... sequential ... " - OUTPUTA="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml - LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log - src/@PACKAGE_TARNAME@.native@EXE@ -s -d -C "$base".xml \ - -o "$OUTPUTA" $(tools/split_path.native$(EXE) "$query") > "$LOG" 2>&1 - echo "Query: $q : $query" >> "$@" - cat "$LOG" | grep '^STATS' >> "$@" - - echo -n "parallel ... " - OUTPUTB="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml - LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log - src/@PACKAGE_TARNAME@.native@EXE@ -s -d -p -C "$base".xml \ - -o "$OUTPUTB" $(tools/split_path.native$(EXE) "$query") > "$LOG" 2>&1 - echo "Query: $q : $query" >> "$@" - cat "$LOG" | grep '^STATS' >> "$@" - - - echo -n "Diff: " >> "$@" - if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then - echo ok - echo ok >> "$@" - else - echo failed - echo failed >> "$@" - exit 1 - fi - echo '-------------------------------------------' >> "$@" - done +%.summary: tools $(BIN) + target=$@ + base=$* + test=${base#*.xml.} + xml=${base%.$test} + REMAKE=$(REMAKE) + BIN=$(BIN) + SPLIT=tools/split_path.native$(EXE) + XMLDIFF=tools/xml_diff.native$(EXE) + PACKAGE=$(PACKAGE) + $REMAKE $xml ${xml}.queries tests/${test}.sh + rm -f "$target" + . tests/${test}.sh diff --git a/src/xpath/ast.ml b/src/xpath/ast.ml index 7810a0e..9a0d4d7 100644 --- a/src/xpath/ast.ml +++ b/src/xpath/ast.ml @@ -128,14 +128,14 @@ and print_test fmt (ts,kind) = | Element | Attribute -> pp fmt "%s" begin if ts == star then "*" - else QName.to_string (QNameSet.choose ts) + else QName.to_string (QName.remove_prefix (QNameSet.choose ts)) end | Comment -> pp fmt "%s" "comment()" | ProcessingInstruction -> pp fmt "processing-instruction(%s)" begin if ts == star then "" - else "'" ^ (QName.to_string (QNameSet.choose ts)) ^ "'" + else "\"" ^ (QName.to_string (QName.remove_prefix (QNameSet.choose ts))) ^ "\"" end | Node -> pp fmt "%s" "node()" | Document -> pp fmt "%s" "" diff --git a/tests/test1.sh b/tests/test1.sh new file mode 100644 index 0000000..2b02994 --- /dev/null +++ b/tests/test1.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +MSG="Test 1 (single query: tatoo vs java implementation)" +echo "$MSG" >> "$target" +echo "$MSG" +cat ${xml}.queries | grep -v '^#' | while read q query; do + echo -n "${xml} $q $query ... " + REF=${xml}.results/"$q"_jaxp.xml + $REMAKE "$REF" + OUTPUT=${xml}.results/"$q"_"$PACKAGE"_test1.xml + LOG=${xml}.results/"$q"_"$PACKAGE"_test1.log + "$BIN" -s -d ${xml} "$query" -o "$OUTPUT" > "$LOG" 2>&1 + echo "Query: $q : $query" >> "$target" + cat "$LOG" | grep '^STATS' >> "$target" + echo -n "Diff: " >> "$target" + if $XMLDIFF "$REF" "$OUTPUT" >/dev/null 2>&1; then + echo ok + echo ok >> "$target" + else + echo failed + echo failed >> "$target" + exit 1 + fi + echo '-------------------------------------------' >> "$target" +done diff --git a/tests/test2.sh b/tests/test2.sh new file mode 100644 index 0000000..9b0ef34 --- /dev/null +++ b/tests/test2.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +MSG="Test 2 (all queries sequentially vs all queries in parallel)" +echo "$MSG" >> "$target" +echo "$MSG" +allqueries=`cat "${xml}".queries | grep -v '^#' | while read q query; do echo "'$query'"; done` +echo -n "Running all queries ... " +OUTPUTA="$xml".results/test2a_"$PACKAGE".xml +LOG="$xml".results/test2a_"$PACKAGE".log +echo -n "sequential ... " +echo "$allqueries" | xargs $BIN -s -d "$xml" -o "$OUTPUTA" > "$LOG" 2>&1 +cat "$LOG" | grep '^STATS' >> "$target" + +OUTPUTB="$xml".results/test2b_"$PACKAGE".xml +LOG="$xml".results/test2b_"$PACKAGE".log +echo -n "parallel ... " +echo "$allqueries" | xargs $BIN -p -s -d "$xml" -o "$OUTPUTB" > "$LOG" 2>&1 +cat "$LOG" | grep '^STATS' >> "$target" +echo -n "Diff: " >> "$target" +if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then + echo ok + echo ok >> "$target" +else + echo failed + echo failed >> "$target" + exit 1 +fi +echo '-------------------------------------------' >> "$target" diff --git a/tests/test3.sh b/tests/test3.sh new file mode 100644 index 0000000..d10bf04 --- /dev/null +++ b/tests/test3.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +MSG="Test 3 (multiple queries composition: sequential vs parallel)" +echo "$MSG" >> "$target" +echo "$MSG" +cat "${xml}".queries | grep -v '^#' | while read q query; do + echo -n "${xml} $q $query ... sequential ... " + OUTPUTA="${xml}".results/"$q"_"$PACKAGE"_test3a.xml + LOG="${xml}".results/"$q"_"$PACKAGE"_test3a.log + $SPLIT "$query" | xargs $BIN -s -C -d "${xml}" -o "$OUTPUTA" > "$LOG" 2>&1 + echo "Query: $q : $query" >> "$target" + cat "$LOG" | grep '^STATS' >> "$target" + + echo -n "parallel ... " + OUTPUTB="${xml}".results/"$q"_"$PACKAGE"_test3b.xml + LOG="${xml}".results/"$q"_"$PACKAGE"_test3b.log + $SPLIT "$query" | xargs $BIN -s -p -C -d "${xml}" -o "$OUTPUTB" > "$LOG" 2>&1 + echo "Query: $q : $query" >> "$target" + cat "$LOG" | grep '^STATS' >> "$target" + + echo -n "Diff: " >> "$target" + if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then + echo ok + echo ok >> "$target" + else + echo failed + echo failed >> "$target" + exit 1 + fi + echo '-------------------------------------------' >> "$target" +done diff --git a/tools/ocamldriver.sh b/tools/ocamldriver.sh index 792330c..0a51cb6 100644 --- a/tools/ocamldriver.sh +++ b/tools/ocamldriver.sh @@ -19,6 +19,18 @@ if test "$PACKDIR"; then fi fi +if test "$EXT" = i; then + if test -f ${base}.mli; then + $REMAKE ${base}.mli; + fi + + modules=`$OCAMLDEP -modules ${base}.ml | cut -f 2- -d ':'` + objects=`tools/ocamlmoduledep.sh -inter $NATIVE $PACKINCLUDE -I $SRC $modules` + $REMAKE $objects + $COMPILE -o ${target} -c $PACKINCLUDE ${base}.mli + exit 0 +fi + if test "$DOPACK"; then modules=`cat ${base}.pack` objects=`echo $modules | xargs tools/ocamlmoduledep.sh $NATIVE $PACKINCLUDE -I $SRC ` diff --git a/tools/ocamlmoduledep.sh b/tools/ocamlmoduledep.sh index 3bab186..befd4cd 100755 --- a/tools/ocamlmoduledep.sh +++ b/tools/ocamlmoduledep.sh @@ -10,6 +10,7 @@ usage() { INCLUDES="" MODULES="" NATIVE=0 +INTER=0 while true; do case $1 in -I) @@ -21,6 +22,9 @@ $2" -native) NATIVE=1 ;; + -inter) + INTER=1 + ;; [A-Z]*) MODULES="$MODULES $1" ;; @@ -44,7 +48,9 @@ for MODULE in $MODULES; do echo "$INCLUDES" | while read include; do base="$include/$module" if test -z "$include"; then continue; fi - if test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack; then + if test \( "$INTER" = "1" \) -a \( -f "$base".mli \) ; then + echo -n "$base"."cmi " + elif test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack; then echo -n "$base"."$ext " break elif test -f "$base".mli; then