feat(user/bkots):Execute via array elements, not string concat
[BK-2020-03.git] / unitproc / bkt-checkFlt
CommitLineData
1eb63ec2
SBS
1#!/bin/bash
2# Desc: Checks if arg is a float
3
4#==BEGIN Define script parameters==
5#===BEGIN Declare local script functions===
6yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
7die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
8try() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
9checkFlt() {
10 # Desc: Checks if arg is a float
0201a83d 11 # Usage: checkFlt arg
1eb63ec2
SBS
12 # Input: arg: float
13 # Output: - return code 0 (if arg is float)
14 # - return code 1 (if arg is not float)
0201a83d
SBS
15 # Example: if ! checkFlt $arg; then echo "not flt"; fi;
16 # Version: 0.0.2
1eb63ec2
SBS
17 # Depends: yell(), die(), bash 5.0.3
18 # Ref/Attrib: JDB https://stackoverflow.com/a/12643073 float regex
19 local returnState
20
21 #===Process Arg===
22 if [[ $# -ne 1 ]]; then
23 die "ERROR:Invalid number of arguments:$#";
24 fi;
25
26 RETEST1='^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$'; # Regular Expression to test
27 if [[ ! $1 =~ $RETEST1 ]] ; then
28 returnState="false";
29 else
30 returnState="true";
31 fi;
32
33 #===Determine function return code===
34 if [ "$returnState" = "true" ]; then
35 return 0;
36 else
37 return 1;
38 fi;
0201a83d 39} # Checks if arg is float
1eb63ec2
SBS
40
41#===END Declare local script functions===
42#==END Define script parameters==
43
44#==BEGIN test code==
45myVar1="4" ; echo "Test 1:Should succeed because int is float without decimal places or decimal.";
46(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
47
48myVar1="4.0" ; echo "Test 2:Should succeed because \"4.0\" is a float.";
49(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
50
51myVar1=".0" ; echo "Test 3:Should succeed even if float lack whole numbers left of decimal.";
52(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
53
54myVar1="4." ; echo "Test 4:Should succeed even if float lacks decimal places right of decimal.";
55(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
56
57myVar1="14.0" ; echo "Test 5:Should succeed with multiple whole numbers to left of decimal."
58(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
59
60myVar1="." ; echo "Test 6:Should fail because neither whole numbers nor decimal places are present.";
61(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
62
63myVar1="4"; myVar2="5"; echo "Test 7:Should fail because multiple numbers are provided.";
64(if checkFlt "$myVar1" "$myVar2"; then yell "success"; else yell "fail"; fi;) & sleep 1;
65
66myVar1="4 5"; echo "Test 8:Should fail because multiple numbers are provided.";
67(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
68
69myVar1="4.4.4"; echo "Test 9:Should fail because a float should contain only one decimal.";
70(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
71
72myVar1="foo"; echo "Test 10:Should fail because floats should only contain numbers and decimal characters."
73(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
74
75myVar1="foo"; myVar2="bar"; myVar3="baz"; echo "Test 11: Should fail because multiple arguments provided.";
76(if checkFlt "$myVar1" "$myVar2" "$myVar3"; then yell "success"; else yell "fail"; fi;) & sleep 1;
b2cb5f6a
SBS
77
78myVar1=""; echo "Test 12: Should fil because empty string.";
79(if checkFlt "$myVar1"; then yell "success"; else yell "fail"; fi;) & sleep 1;
1eb63ec2
SBS
80#==END test code==
81
82# Author: Steven Baltakatei Sandoval
83# License: GPLv3+