#!/bin/sh
set -eu

runs_per_order=${RUNS_PER_ORDER:-100}
result_prefix=${RESULT_PREFIX:-results-native}

hyperfine --warmup 10 --runs "$runs_per_order" --shell=none --export-json "/bench/${result_prefix}-forward.json" \
  --command-name xmlwf 'xmlwf /bench/input.xml' \
  --command-name 'xmlwf namespaces' 'xmlwf -n /bench/input.xml' \
  --command-name 'xmllint stream' 'xmllint --stream --noout --nonet /bench/input.xml' \
  --command-name RXP 'rxp -xs /bench/input.xml' \
  --command-name 'RXP namespaces' 'rxp -Nxs /bench/input.xml' \
  --command-name XMLStarlet 'xmlstarlet val -w -q /bench/input.xml' \
  --command-name Xerces-C 'SAX2Count -v=never -s -n /bench/input.xml' \
  --command-name 'Xerces-C namespaces' 'SAX2Count -v=never -s /bench/input.xml' \
  --command-name 'C# XmlReader NativeAOT' '/opt/csharp/aot/XmlReaderLint/XmlReaderLint /bench/input.xml' \
  --command-name 'C# TurboXml NativeAOT' '/opt/csharp/aot/TurboXmlLint/TurboXmlLint /bench/input.xml' \
  --command-name 'C# AngleSharp NativeAOT' '/opt/csharp/aot/AngleSharpLint/AngleSharpLint /bench/input.xml' \
  --command-name 'JAXB GraalVM Native' '/opt/jaxb-xml-lint-native /bench/input.xml' \
  --command-name 'C# XmlReader JIT' '/opt/csharp/jit/XmlReaderLint/XmlReaderLint /bench/input.xml' \
  --command-name 'C# TurboXml JIT' '/opt/csharp/jit/TurboXmlLint/TurboXmlLint /bench/input.xml' \
  --command-name 'C# AngleSharp JIT' '/opt/csharp/jit/AngleSharpLint/AngleSharpLint /bench/input.xml' \
  --command-name anyxml-Rust 'xmlprocess show /bench/input.xml' \
  --command-name 'Python xmltodict' "sh -c 'exec python -m xmltodict 2147483647 </bench/input.xml'" \
  --command-name 'Python xq' 'xq empty /bench/input.xml' \
  --command-name 'Perl XML::Twig' 'xml_grep --strict --files --cond 0 /bench/input.xml' \
  --command-name 'PHP sclable' '/opt/php-sclable/vendor/bin/xmllint -s --silent /bench/input.xml' \
  --command-name 'PHP mickaelandrieu' '/opt/php-mickael/vendor/bin/xml-linter -q /bench/input.xml' \
  --command-name JAXB 'java -jar /opt/jaxb-xml-lint.jar /bench/input.xml' \
  --command-name BaseX 'java -cp /opt/BaseX.jar org.basex.BaseX -ODTD=false -OXINCLUDE=false -i/bench/input.xml -z .' \
  --command-name SaxonJ 'java -cp /opt/saxon/saxon-he-12.10.jar:/opt/saxon/lib/* net.sf.saxon.Query --allowedProtocols:#none -dtd:off -s:/bench/input.xml -qs:count\(/*\) -o:/dev/null' \
  --command-name 'Saxon .NET' 'SaxonHE12NetXQuery -dtd:off -s:/bench/input.xml -qs:count\(/*\) -o:/dev/null' \
  --command-name 'xmllint DOM' 'xmllint --noout --nonet /bench/input.xml'

hyperfine --warmup 10 --runs "$runs_per_order" --shell=none --export-json "/bench/${result_prefix}-reverse.json" \
  --command-name 'xmllint DOM' 'xmllint --noout --nonet /bench/input.xml' \
  --command-name 'Saxon .NET' 'SaxonHE12NetXQuery -dtd:off -s:/bench/input.xml -qs:count\(/*\) -o:/dev/null' \
  --command-name SaxonJ 'java -cp /opt/saxon/saxon-he-12.10.jar:/opt/saxon/lib/* net.sf.saxon.Query --allowedProtocols:#none -dtd:off -s:/bench/input.xml -qs:count\(/*\) -o:/dev/null' \
  --command-name BaseX 'java -cp /opt/BaseX.jar org.basex.BaseX -ODTD=false -OXINCLUDE=false -i/bench/input.xml -z .' \
  --command-name JAXB 'java -jar /opt/jaxb-xml-lint.jar /bench/input.xml' \
  --command-name 'PHP mickaelandrieu' '/opt/php-mickael/vendor/bin/xml-linter -q /bench/input.xml' \
  --command-name 'PHP sclable' '/opt/php-sclable/vendor/bin/xmllint -s --silent /bench/input.xml' \
  --command-name 'Perl XML::Twig' 'xml_grep --strict --files --cond 0 /bench/input.xml' \
  --command-name 'Python xq' 'xq empty /bench/input.xml' \
  --command-name 'Python xmltodict' "sh -c 'exec python -m xmltodict 2147483647 </bench/input.xml'" \
  --command-name anyxml-Rust 'xmlprocess show /bench/input.xml' \
  --command-name 'C# AngleSharp JIT' '/opt/csharp/jit/AngleSharpLint/AngleSharpLint /bench/input.xml' \
  --command-name 'C# TurboXml JIT' '/opt/csharp/jit/TurboXmlLint/TurboXmlLint /bench/input.xml' \
  --command-name 'C# XmlReader JIT' '/opt/csharp/jit/XmlReaderLint/XmlReaderLint /bench/input.xml' \
  --command-name 'JAXB GraalVM Native' '/opt/jaxb-xml-lint-native /bench/input.xml' \
  --command-name 'C# AngleSharp NativeAOT' '/opt/csharp/aot/AngleSharpLint/AngleSharpLint /bench/input.xml' \
  --command-name 'C# TurboXml NativeAOT' '/opt/csharp/aot/TurboXmlLint/TurboXmlLint /bench/input.xml' \
  --command-name 'C# XmlReader NativeAOT' '/opt/csharp/aot/XmlReaderLint/XmlReaderLint /bench/input.xml' \
  --command-name 'Xerces-C namespaces' 'SAX2Count -v=never -s /bench/input.xml' \
  --command-name Xerces-C 'SAX2Count -v=never -s -n /bench/input.xml' \
  --command-name XMLStarlet 'xmlstarlet val -w -q /bench/input.xml' \
  --command-name 'RXP namespaces' 'rxp -Nxs /bench/input.xml' \
  --command-name RXP 'rxp -xs /bench/input.xml' \
  --command-name 'xmllint stream' 'xmllint --stream --noout --nonet /bench/input.xml' \
  --command-name 'xmlwf namespaces' 'xmlwf -n /bench/input.xml' \
  --command-name xmlwf 'xmlwf /bench/input.xml'
