Add galaxy verification script.

master
Lars W. (lwho) 2014-09-06 22:43:23 +02:00
parent 0a481d29c5
commit fff869efd4
1 changed files with 116 additions and 0 deletions

116
scripts/galgen_verify.sh Executable file
View File

@ -0,0 +1,116 @@
#!/bin/bash
export ASAN_OPTIONS="abort_on_error=1:alloc_dealloc_mismatch=0"
PIONEER="sanitizer-release/src/pioneer"
THREADS=3
tmpdir=$(mktemp -d --tmpdir galgen_verify.XXXXXX)
function cleanup {
rm -f "$tmpdir"/?.out
rm -f "$tmpdir"/verify.out
rmdir "$tmpdir"
}
trap cleanup EXIT
centers=()
function run_it {
local i
local threads=0
for ((i=0;i<${#centers[@]};++i)) ; do
local center="${centers[$i]}"
echo "$center $("$PIONEER" -gd - "$radius" $center | md5sum)" > $tmpdir/$threads.out &
threads=$((threads+1))
if [ $threads -ge $THREADS ] ; then
wait
cat $tmpdir/?.out
rm $tmpdir/?.out
threads=0
fi
done
if [ $threads -gt 0 ] ; then
wait
cat $tmpdir/?.out
rm $tmpdir/?.out
fi
centers=()
}
function generate {
local file="$1"
local radius="$2"
local shells="$3"
local step=$((radius*2 + 1))
local x
local y
local z
local shell
local layer
{
echo "radius $radius shells $shells"
echo 0,0,0 "$("$PIONEER" -gd - "$radius" 0,0,0 | md5sum)"
centers=()
for ((shell=1;shell<=shells;++shell)) ; do
echo "shell $shell bottom -$shell"
z=$((-shell*step))
for ((y=-shell*step; y<=shell*step; y+=step)) ; do
for ((x=-shell*step; x<=shell*step; x+=step)) ; do
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
done
done
run_it
for ((layer=-shell+1; layer<=shell-1; ++layer)) ; do
z=$((layer*step))
echo "shell $shell middle $layer"
y=$((-shell*step))
for ((x=-shell*step; x<=shell*step; x+=step)) ; do
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
done
for ((y=(-shell+1)*step; y<=(shell-1)*step; y+=step)) ; do
x=$((-shell*step))
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
x=$((shell*step))
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
done
y=$((shell*step))
for ((x=-shell*step; x<=shell*step; x+=step)) ; do
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
done
run_it
done
echo "shell $shell top $shell"
z=$((shell*step))
for ((y=-shell*step; y<=shell*step; y+=step)) ; do
for ((x=-shell*step; x<=shell*step; x+=step)) ; do
centers+=("$x,$y,$z")
#echo "$x,$y,$z $("$PIONEER" -gd - "$radius" $x,$y,$z | md5sum)"
done
done
run_it
done
} > "$file"
}
op="${1:?'generate or verify expected'}"
file="${2:?'no file given'}"
if [ "$op" = "generate" ] ; then
generate "$file" "${3:?'no radius given'}" "${4:?'no number of shells given'}"
elif [ "$op" = "verify" ] ; then
read dummy1 radius dummy2 shells < "$file"
if [ "$dummy1" != "radius" -o "$dummy2" != "shells" ] ; then
echo "Parse error"
exit 1
fi
generate "$tmpdir/verify.out" "$radius" "$shells"
sdiff -s -d "$file" "$tmpdir/verify.out"
rm "$tmpdir/verify.out"
else
echo "generate or verify expected" >&2
exit 1
fi