blob: cfd318c1d6b621877db64643af377356638e45c9 (
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
|
#!/usr/bin/env zsh
setopt err_exit
typeset -i benchmark=0 apionly=0
while [[ $1 == --* ]] {
case $1 in
--benchmark) benchmark=1 ;;
--api-only) apionly=1 ;;
esac
shift
}
typeset envstore=${1-envstore}
trap "print -P '\n%N:%i: %B%F{red}Test faild!%F{default}%b\nrm -rf $testdir'" ZERR
trap "$envstore clear" INT
cat <<- ente
Usage: $0 [--benchmark] [--api-only] [path to envstore]
Note: this script will remove/overwrite your envstore store file.
The envstore script needs to be compatible with the original envstore API,
that is, it should implement the commends "clear", "rm", "eval",
"save var" and "save var value"
ente
echo "# $envstore clear"
$envstore clear
echo "# $envstore save var"
export hello=world
$envstore save hello
unset hello
echo "# $envstore eval"
eval $($envstore eval)
[[ $hello == world ]]
unset hello
echo "# $envstore rm"
$envstore rm hello
eval $($envstore eval)
[[ -z $hello ]]
echo "# $envstore save var value"
$envstore save hello world
echo "# $envstore eval"
eval $($envstore eval)
[[ $hello == world ]]
unset hello
echo "# $envstore clear"
$envstore clear
eval $($envstore eval)
[[ -z $hello ]]
echo "# $envstore save + eval (spaces in value), save var"
export hello='your mom'
$envstore save hello
unset hello
eval $($envstore eval)
[[ $hello == 'your mom' ]]
unset hello
$envstore clear
echo "# $envstore save + eval (spaces in value), save var value"
$envstore save hello 'your mom'
eval $($envstore eval)
[[ $hello == 'your mom' ]]
unset hello
echo "# $envstore save (overwrite)"
$envstore save hello world
eval $($envstore eval)
[[ $hello == world ]]
$envstore clear
echo "# $envstore save (' in value)"
$envstore save hello "the ' dude"
eval $($envstore eval)
[[ $hello == "the ' dude" ]]
unset hello
echo "# $envstore save (UTF-8)"
export hello='mÿde Rentner… und so'
$envstore save hello
unset hello
eval $($envstore eval)
[[ $hello == 'mÿde Rentner… und so' ]]
unset hello
$envstore clear
if ((apionly == 0)) {
echo "# invalid invocations"
! $envstore save
unset nonexistent
! $envstore save nonexistent
! $envstore rm
}
print -P '\n%F{green}Test passed%F{default}\n'
if ((benchmark)) {
trap '' ZERR
echo "## some benchmarks now..."
TIMEFMT='%*E real, %*U user, %*S system - %P%% CPU - %J'
echo "# adding 5000 vars (this could take a _long_ time)"
for i in {0..5000}; {
(( i % 500 )) || echo "# $((5000-i)) to go"
$envstore save $i $i$i$i
}
echo
repeat 2 {time $envstore eval > /dev/null}
time $envstore rm 999 > /dev/null
repeat 2 {time $envstore clear}
}
|