summaryrefslogtreecommitdiffstats
path: root/examples/shellmath/testCases.in
blob: 54e3a822dbbb3d9e15ccca16d2dacf6dcbdea560 (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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
################################################################
# The general testcase syntax is 
#    assertionType  expectedValue   functionUnderTest [args ... ]
#
# where assertionType is either of:
#    Code      to indicate the (bash-style) integer return code
#    String    to indicate the string "printed" as a side effect
#
# and functionUnderTest is the function name
# with the "_shellmath_" prefix removed.
################################################################

################################
# Tests for SUPPORTING FUNCTIONS
################################

# Tests for getReturnCode()
Code 0   getReturnCode SUCCESS
Code 1   getReturnCode FAIL
Code 2   getReturnCode ILLEGAL_NUMBER

## Tests for validateAndParse():
## Validate a number, determine its type and sign, split it into parts

# Detect Invalid input
Code    2      validateAndParse NaN
String    ""   validateAndParse NaN
# Positive integers
String  "4 0 0 0 0"    validateAndParse 4
# Negative integers
String  "9 0 1 0 0"    validateAndParse -9
# Decimals
String  "4 2 0 1 0"  validateAndParse 4.2
# Negative decimals
String "4 2 1 1 0"  validateAndParse -4.2
# Scientific / exponential notation: Check all code branches
String  "340000 0 0 0 1" validateAndParse 3.4e5
String  "344 4 0 1 1"    validateAndParse 3.444e2
String  "34567 0 0 0 1"  validateAndParse 3.4567e4
String  "0 003456 0 1 1" validateAndParse 3.456e-3
String  "34 56 0 1 1"    validateAndParse 345.6e-1
String  "0 23011 0 1 1"  validateAndParse 23.011e-2
String  "23 011 0 1 1"   validateAndParse 23.011e0

####################
# Tests for ADDITION
####################
String 4     add 4
String 9     add 4 5

# Same-length decimal tails with no leading zeros, no carry across decimal point
String 2.214    add 1.105 1.109

# Carry across decimal point
String 3.8    add 1.9 1.9
String -3.8    add -1.9 -1.9

# Different-length decimals, one with leading zero
String 2.195    add 1.105 1.09
String -2.195    add -1.105 -1.09

# Same-length tails having leading zeros
String 2.014    add 1.005 1.009
String -2.014    add -1.005 -1.009
# Different-length tails with and without leading zeros
String 3.31462    add 1.905 1.40962
String 2.01462    add 1.005 1.00962

# Subtraction
String 2.5   subtract 5.2 2.7
String -2.5   subtract 2.7 5.2
String 2.5   add 5.2 -2.7

# Integer part equal to 0
String 1.5  add 0.6 0.9
String 1.5  add .6 .9
String -0.3 add 0.6 -0.9
String -0.3 add .6 -.9

# Recursive/multiple addition
String 12     add 2 4 6
String 6.6    add 1.1 2.2 3.3

##########################
# Tests for MULTIPLICATION
##########################
String 4     multiply 4
String 20     multiply 4 5

String 21.32   multiply 4.1 5.2
String -21.32   multiply -4.1 5.2

# Carry-heavy products
String 98.901  multiply 9.9 9.99

# Leading zeros after decimal point:
# Track place value with zero-padding
String 1.0201  multiply 1.01 1.01
String 0.0001  multiply 0.01 0.01
String 0.0001  add 0 0.0001

# Staggered decimal precisions
String 0.000001 multiply 0.01 0.0001

# Interpret in base 10
String 2.2781  multiply 1.09 2.09

# Recursive multiplication
String 35.1384  multiply 1.1 2.2 3.3 4.4

####################
# Tests for DIVISION
####################
String 4     divide 4
String 4     divide 20 5

String 0.5   divide 1 2
String -0.5   divide -1 2

# Mixed fractions
String 34.54   divide 3454 100

# Non-terminating decimals
String 0.166666666666666667   divide  1 6

# Decimal arguments
String 0.25     divide 0.5 2
String 0.04165  divide 0.1666 4

###########################
# Tests for scientific math
###########################
String 8.8e4      add  1.1e4  7.7e4
String 4.239e1    add  1.224e1 3.015e1
String -6.6e4     add  1.1e4  -7.7e4
String -66000     add  11000  -77000
String 1.23123e2  add 1.23e2 1.23e-1
String 8.1403e7   multiply 2.03e5 4.01e2
String 1.0e-7     multiply 1.0e-3 1.0e-4
String 1.0e-7     multiply 1e-3 1e-4