mpi/ec: fix when 'unsigned long' is 32-bit but limb size is 64-bit
[libgcrypt.git] / tests / basic_all_hwfeature_combinations.sh
1 #!/bin/bash
2 # Run basic tests with all HW feature combinations
3 # Copyright 2017 Jussi Kivilinna <jussi.kivilinna@iki.fi>
4 #
5 # This file is free software; as a special exception the author gives
6 # unlimited permission to copy and/or distribute it, with or without
7 # modifications, as long as this notice is preserved.
8 #
9 # This file is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
11 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 #
13
14 # Use BINEXT to set executable extension
15 #  For example for Windows executables: BINEXT=.exe
16 if [ "x$BINEXT" != "x" ] && [ -e "tests/version$BINEXT" ]; then
17         binext="$BINEXT"
18 else
19         binext=""
20 fi
21
22 # Use BINPRE to set executable prefix
23 #  For example to run Windows executable with WINE: BINPRE="wine "
24 if [ "x$BINPRE" != "x" ]; then
25         binpre="$BINPRE"
26 else
27         binpre=""
28 fi
29
30 # Use NJOBS to define number of parallel tasks
31 if [ "x$NJOBS" != "x" ]; then
32         njobs="$NJOBS"
33 else
34         # default to cpu count
35         ncpus=$(nproc --all)
36         if [ "x@cpus" != "x" ]; then
37                 njobs=$ncpus
38         else
39                 # could not get cpu count, use 4 parallel tasks instead
40                 njobs=4
41         fi
42 fi
43
44 get_supported_hwfeatures() {
45         $binpre "tests/version$binext" 2>&1 | \
46                 grep "hwflist" | \
47                 sed -e 's/hwflist://' -e 's/:/ /g' -e 's/\x0d/\x0a/g'
48 }
49
50 hwfs=($(get_supported_hwfeatures))
51 retcodes=()
52 optslist=()
53 echo "Total HW-feature combinations: $((1<<${#hwfs[@]}))"
54 for ((cbits=0; cbits < (1<<${#hwfs[@]}); cbits++)); do
55   for ((mask=0; mask < ${#hwfs[@]}; mask++)); do
56     match=$(((1<<mask) & cbits))
57     if [ "x$match" != "x0" ]; then
58       echo -n "--disable-hwf ${hwfs[$mask]} "
59     fi
60   done
61   echo ""
62 done | sort | (
63   # Run all combinations
64   nbasic=0
65   nwait=0
66   failed=0
67   output=""
68   while read opts; do
69     currn=$nbasic
70     curr_jobs=($(jobs -p))
71     while [ "${#curr_jobs[@]}" -ge "8" ]; do
72       # Wait for one job to complete
73       wait ${retcodes[$nwait]}
74       retval=$?
75       if [ "x$retval" != "x0" ]; then
76         output="$output\nERROR: HWF disable failed: [${optslist[$nwait]}]"
77         failed=1
78       else
79         output="$output\nSUCCESS: HWF disable OK: [${optslist[$nwait]}]"
80       fi
81       nwait=$((nwait+1))
82       curr_jobs=($(jobs -p))
83       if [ $failed != 0 ]; then
84         break
85       fi
86     done
87     if [ $failed != 0 ]; then
88       break
89     fi
90     nbasic=$((nbasic+1))
91     echo "[$nbasic/$((1<<${#hwfs[@]}))] Basic test with '$opts'"
92     optslist[$currn]="$opts"
93     nice nice $binpre "tests/basic$binext" $opts & retcodes[$currn]=$!
94   done
95
96   # Fetch remaining return codes
97   for ((; nwait < nbasic; nwait++)); do
98     # Wait for one job to complete
99     wait ${retcodes[$nwait]}
100     retval=$?
101     if [ "x$retval" != "x0" ]; then
102       output="$output\nERROR: HWF disable failed: [${optslist[$nwait]}]"
103       failed=1
104     else
105       output="$output\nSUCCESS: HWF disable OK: [${optslist[$nwait]}]"
106     fi
107   done
108
109   echo -e "$output"
110   exit $failed
111 )