summaryrefslogtreecommitdiff
path: root/test/main
blob: c9ea5c68b0c492ded6262682743206f28ea5ab63 (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
#!/usr/bin/env zsh
setopt err_exit
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 [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

print -P '\n%F{green}Test passed%F{default}\n'

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}
repeat 2 {time $envstore rm 99999 > /dev/null}
repeat 2 {time $envstore clear}