Start 1.33.0 development cycle
[oweals/busybox.git] / testsuite / dc.tests
1 #!/bin/sh
2 # Copyright 2015 by Bernhard Reutner-Fischer
3 # Licensed under GPLv2 or later, see file LICENSE in this source tree.
4
5 . ./testing.sh
6
7 # testing "test name" "command" "expected result" "file input" "stdin"
8
9 testing "dc basic syntax (stdin, multiple args)" \
10         "dc" \
11         "30\n" \
12         "" "10 20+p"
13
14 testing "dc basic syntax (argv, single arg)" \
15         "dc -e'10 20+p'" \
16         "30\n" \
17         "" ""
18
19 testing "dc basic syntax (argv, multiple args)" \
20         "dc -e10 -e20+p" \
21         "30\n" \
22         "" ""
23
24 testing "dc complex with spaces (single arg)" \
25         "dc -e'8 8 * 2 2 + / p'" \
26         "16\n" \
27         "" ""
28
29 testing "dc complex without spaces (single arg)" \
30         "dc -e'8 8*2 2+/p'" \
31         "16\n" \
32         "" ""
33
34 testing "dc complex with spaces (multiple args)" \
35         "dc -e8 -e8 -e\* -e2 -e2 -e+ -e/ -ep" \
36         "16\n" \
37         "" ""
38
39 testing "dc complex without spaces (multiple args)" \
40         "dc -e8 -e8\*2 -e2+/p" \
41         "16\n" \
42         "" ""
43
44 optional FEATURE_DC_BIG
45 # All tests below depend on FEATURE_DC_BIG
46
47 testing "dc: x should execute strings" \
48         "dc -e'[40 2 +] x f'" \
49         "42\n" \
50         "" ""
51
52 testing "dc: x should not execute or pop non-strings" \
53         "dc -e'42 x f'" \
54         "42\n" \
55         "" ""
56
57 testing "dc: x should work with strings created from a" \
58         "dc -e'42 112 a x'" \
59         "42\n" \
60         "" ""
61
62 testing "dc: p should print invalid escapes" \
63         "dc -e '[\q] p'" \
64         "\\q\n" \
65         "" ""
66
67 testing "dc: p should print trailing backslashes" \
68         "dc -e '[q\] p'" \
69         "q\\\\\n" \
70         "" ""
71
72 testing "dc: p should parse/print single backslashes" \
73         "dc -e '[\] p'" \
74         "\\\\\n" \
75         "" ""
76
77 testing "dc: p should print single backslash strings" \
78         "dc -e '92 a p'" \
79         "\\\\\n" \
80         "" ""
81
82 testing "dc read" \
83         "dc -finput" \
84         "2\n9\n1\n" \
85         "1?2\nf" "9\n"
86
87 testing "dc read string" \
88         "dc -finput" \
89         "2\nstr\n1\n" \
90         "1?2\nf" "[str]\n"
91
92 testing "dc '>a' (conditional execute string) 1" \
93         "dc" \
94         "1\n9\n" \
95         "" "[1p]sa [2p]sb 1 2>a\n9p"
96
97 testing "dc '>a' (conditional execute string) 2" \
98         "dc" \
99         "9\n" \
100         "" "[1p]sa [2p]sb 2 1>a\n9p"
101
102 testing "dc '>aeb' (conditional execute string with else)" \
103         "dc" \
104         "2\n9\n" \
105         "" "[1p]sa [2p]sb 2 1>aeb\n9p"
106
107 testing "dc space can be a register" \
108         "dc" \
109         "2\n9\n" \
110         "" "[2p]s \n[3p]\nl x\n9p"
111
112 testing "dc newline can be a register" \
113         "dc" \
114         "2\n9\n" \
115         "" "[2p]s\n[3p]l\nx\n9p"
116
117 for f in dc_*.dc; do
118         r="`basename "$f" .dc`_results.txt"
119         test -f "$r" || continue
120         # testing "test name" "command" "expected result" "file input" "stdin"
121         testing "dc $f" \
122                 "{ { dc $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
123                 "E:0\nE:0\n" \
124                 "" ""
125 done
126
127 for f in dcx_*.dc; do
128         r="`basename "$f" .dc`_results.txt"
129         test -f "$r" || continue
130         # testing "test name" "command" "expected result" "file input" "stdin"
131         testing "dc -x $f" \
132                 "{ { dc -x $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
133                 "E:0\nE:0\n" \
134                 "" ""
135 done
136
137 exit $FAILCOUNT