summaryrefslogtreecommitdiff
path: root/test/util/pacsorttest.sh
blob: ff82a53ff2d8a5e112a1812b5e0643cf32bac5e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/bash
#
# pacsorttest - a test suite for pacsort
#
#   Copyright (c) 2011 by Dan McGee <dan@archlinux.org>
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.

# default binary if one was not specified as $1
bin='pacsort'
# holds counts of tests
total=0
failure=0

# args:
# runtest input expected test_description optional_opts
runtest() {
        # run the test
        diff -u <(printf "$1" | $bin $4) <(printf "$2")
        if [[ $? -ne 0 ]]; then
                echo "FAILURE: $3"
                ((failure++))
        fi
        ((total++))
}

# use first arg as our binary if specified
[[ -n "$1" ]] && bin="$1"

if ! type -p "$bin"; then
        echo "pacsort binary ($bin) could not be located"
        exit 1
fi

echo "Beginning pacsort tests"

# BEGIN TESTS

in="1\n2\n3\n4\n"
runtest $in $in "already ordered"

in="4\n2\n3\n1\n"
ex="1\n2\n3\n4\n"
runtest $in $ex "easy reordering"

in="1\n2\n3\n4"
ex="1\n2\n3\n4\n"
runtest $in $ex "add trailing newline"

in="1\n2\n4\n3"
ex="1\n2\n3\n4\n"
runtest $in $ex "add trailing newline"

in="1.0-1\n1.0\n1.0-2\n1.0\n"
runtest $in $in "stable sort"

# generate some long input/expected for the next few tests
declare normal reverse names_normal names_reverse
for ((i=1; i<600; i++))do
        normal="${normal}${i}\n"
        reverse="${reverse}$((600 - ${i}))\n"
        fields="${fields}colA bogus$((600 - ${i})) ${i}\n"
        fields_reverse="${fields_reverse}colA bogus${i} $((600 - ${i}))\n"
        separator="${separator}colA|bogus$((600 - ${i}))|${i}\n"
        separator_reverse="${separator_reverse}colA|bogus${i}|$((600 - ${i}))\n"
done

runtest $normal $normal "really long input"
runtest $reverse $normal "really long input"
runtest $reverse $reverse "really long input, reversed" "-r"
runtest $normal $reverse "really long input, reversed" "-r"

runtest "$fields" "$fields" "really long input, sort key" "-k3"
runtest "$fields_reverse" "$fields" "really long input, sort key" "-k3"
runtest "$fields_reverse" "$fields_reverse" "really long input, sort key, reversed" "-k 3 -r"
runtest "$fields" "$fields_reverse" "really long input, sort key, reversed" "-k 3 -r"

runtest "$separator" "$separator" "really long input, sort key, separator" "-k3 -t|"
runtest "$separator_reverse" "$separator" "really long input, sort key, separator" "-k3 -t|"
runtest "$separator_reverse" "$separator_reverse" "really long input, sort key, separator, reversed" "-k 3 -t| -r"
runtest "$separator" "$separator_reverse" "really long input, sort key, separator, reversed" "-k 3 -t| -r"

#END TESTS

echo
if [[ $failure -eq 0 ]]; then
        echo "All $total tests successful"
        exit 0
fi

echo "$failure of $total tests failed"
exit 1