1+ #! /bin/bash
2+
3+ # check if file is present and executable
4+ if [ ! -f expr ]; then
5+ echo " File 'expr' found!"
6+ exit 1
7+ fi
8+
9+ if [ ! -x expr ]; then
10+ echo " File 'expr' not executable!"
11+ exit 1
12+ fi
13+
14+ echo " === Testing expr calculator ==="
15+
16+ # Test 1: Simple addition
17+ T=1
18+ result=$( ./expr 2 3 +)
19+ expected=" result: 5.000"
20+ if [[ " $result " == " $expected " ]]; then
21+ echo " Test $T PASS: 2 + 3 = 5"
22+ else
23+ echo " Test $T FAIL: Expected '$expected ', got '$result '"
24+ fi
25+
26+ # Test 2: Commutativity of addition
27+ T=2
28+ result=$( ./expr 3 2 +)
29+ expected=" result: 5.000"
30+ if [[ " $result " == " $expected " ]]; then
31+ echo " Test $T PASS: 3 + 2 = 5"
32+ else
33+ echo " Test $T FAIL: Expected '$expected ', got '$result '"
34+ fi
35+
36+ # Test 3: Subtraction
37+ T=3
38+ result=$( ./expr 10 3 -)
39+ expected=" result: 7.000"
40+ if [[ " $result " == " $expected " ]]; then
41+ echo " Test $T PASS: 10 - 3 = 7"
42+ else
43+ echo " Test $T FAIL: Expected '$expected ', got '$result '"
44+ fi
45+
46+ # Test 4: Complex expression
47+ T=4
48+ # ------------------------------------
49+ # Expected:
50+ # 5 --> [5]
51+ # 1 --> [5, 1]
52+ # 2 --> [5, 1, 2]
53+ # + --> (1 + 2 = 3) --> [5, 3]
54+ # 4 --> [5, 3, 4]
55+ # * --> (3 * 4 = 12) --> [5, 12]
56+ # + --> (5 + 12 = 17) --> [17]
57+ # 3 --> [17, 3]
58+ # - --> (17 - 3 = 14) --> [14]
59+ # ------------------------------------
60+ result=$( ./expr 5 1 2 + 4 \* + 3 -)
61+ expected=" result: 14.000"
62+ if [[ " $result " == " $expected " ]]; then
63+ echo " Test $T PASS: Complex RPN expression"
64+ else
65+ echo " Test $T FAIL: Expected '$expected ', got '$result '"
66+ fi
67+
68+ # Test 5: Division by zero
69+ T=5
70+ result=$( ./expr 5 0 / 2>&1 )
71+ if [[ " $result " == * " division by zero" * ]]; then
72+ echo " Test $T PASS: Division by zero detected"
73+ else
74+ echo " Test $T FAIL: Should detect division by zero"
75+ fi
76+
77+ # Test 6: Missing operator
78+ T=6
79+ result=$( ./expr 5 1)
80+ expected=" Error: Operator is missing!"
81+ if [[ " $result " == " $expected " ]]; then
82+ echo " Test $T PASS: Missing operator"
83+ else
84+ echo " Test $T FAIL: Expected '$expected ', got '$result '"
85+ fi
86+
87+ echo " === Tests Complete ==="
0 commit comments