summaryrefslogtreecommitdiff
path: root/graphs/piscine/evalexpr/tests/tests.sh
blob: 920f09b91f96e187c40c5e271c0fdeada928180d (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
#!/bin/sh

REF_OUT="ref.out"
TEST_OUT="test.out"

testrpn()
{
    echo "$2" > "$REF_OUT"
    echo "Evaluating '$1' in RPN notation..."
    echo "$1" | ./evalexpr -rpn > "$TEST_OUT"
    diff "$REF_OUT" "$TEST_OUT" && echo "Success"
}

testeval()
{
    echo "$1" | bc 2> /dev/null > "$REF_OUT"
    echo "Evaluating '$1' in standard notation..."
    echo "$1" | ./evalexpr > "$TEST_OUT"
    diff "$REF_OUT" "$TEST_OUT" && echo "Success"
}

testerror()
{
    echo "Testing error code '$2'..."
    echo "$1" | ./evalexpr
    error="$(echo $?)"
    [ "$2" -eq "$error" ] && echo "Succesful failure" || echo "Wrong error $error"
}

clean()
{
    rm "$REF_OUT" "$TEST_OUT"
}

# RPN

echo "Tests for RPN:"
echo "======"

testrpn "1 1 +" 2
testrpn "5 2 2 ^ 3 + *" 35
testrpn "10 6 9 3 + 0 11 - * / * 17 + 5 +" 22
testrpn "3 4 5 * 3 + -" "-20"
testrpn "3 2 % 9 3 1 2 + * / -" 0

echo
echo "============================================="
echo

# Standard

echo "Tests for standard notation:"
echo "======"

testeval "1 + 1"
testeval " 1 + 1 +1  "
testeval "2 * 2"
testeval "5 * (2 + 4)"
testeval "5 * (2 % 4)"
testeval "  5 *(2 ^4)    "
testeval "  5 *(2 ^4   "

echo
echo "============================================="
echo

# Errors

echo "Error tests:"
echo "======"

testerror "" 0
testerror "a+1" 1
testerror "1%0" 3

echo "Testing error code '4'..."
./evalexpr --toto 2> /dev/null
echo $?

# Cleanup

clean