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
|