blob: ad00993549916d859892cb420d6018043d09d818 [file] [log] [blame]
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +01001#!/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
9testing "dc basic syntax (stdin, multiple args)" \
10 "dc" \
11 "30\n" \
12 "" "10 20+p"
13
14testing "dc basic syntax (argv, single arg)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010015 "dc -e'10 20+p'" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010016 "30\n" \
17 "" ""
18
19testing "dc basic syntax (argv, multiple args)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010020 "dc -e10 -e20+p" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010021 "30\n" \
22 "" ""
23
24testing "dc complex with spaces (single arg)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010025 "dc -e'8 8 * 2 2 + / p'" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010026 "16\n" \
27 "" ""
28
29testing "dc complex without spaces (single arg)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010030 "dc -e'8 8*2 2+/p'" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010031 "16\n" \
32 "" ""
33
34testing "dc complex with spaces (multiple args)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010035 "dc -e8 -e8 -e\* -e2 -e2 -e+ -e/ -ep" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010036 "16\n" \
37 "" ""
38
39testing "dc complex without spaces (multiple args)" \
Denys Vlasenkoa1331372018-12-06 18:46:42 +010040 "dc -e8 -e8\*2 -e2+/p" \
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +010041 "16\n" \
42 "" ""
43
Chen Qi32c8ce42019-04-17 09:39:25 +080044optional FEATURE_DC_BIG
45# All tests below depend on FEATURE_DC_BIG
46
Brian Foley74548792019-09-05 10:46:22 +020047testing "dc: x should execute strings" \
48 "dc -e'[40 2 +] x f'" \
49 "42\n" \
50 "" ""
51
52testing "dc: x should not execute or pop non-strings" \
53 "dc -e'42 x f'" \
54 "42\n" \
55 "" ""
56
Brian Foleyb64470b2019-09-05 10:50:13 +020057testing "dc: x should work with strings created from a" \
58 "dc -e'42 112 a x'" \
59 "42\n" \
60 "" ""
61
Brian Foley10509a72019-09-05 10:53:21 +020062testing "dc: p should print invalid escapes" \
63 "dc -e '[\q] p'" \
64 "\\q\n" \
65 "" ""
66
67testing "dc: p should print trailing backslashes" \
68 "dc -e '[q\] p'" \
69 "q\\\\\n" \
70 "" ""
71
72testing "dc: p should parse/print single backslashes" \
73 "dc -e '[\] p'" \
74 "\\\\\n" \
75 "" ""
76
77testing "dc: p should print single backslash strings" \
78 "dc -e '92 a p'" \
79 "\\\\\n" \
80 "" ""
81
Denys Vlasenko6842c602019-01-04 05:41:47 +010082testing "dc read" \
83 "dc -finput" \
84 "2\n9\n1\n" \
85 "1?2\nf" "9\n"
86
Denys Vlasenko1db367a2019-01-04 06:18:00 +010087testing "dc read string" \
88 "dc -finput" \
89 "2\nstr\n1\n" \
90 "1?2\nf" "[str]\n"
91
Denys Vlasenkobadf6832018-12-22 18:04:08 +010092testing "dc '>a' (conditional execute string) 1" \
93 "dc" \
94 "1\n9\n" \
95 "" "[1p]sa [2p]sb 1 2>a\n9p"
96
97testing "dc '>a' (conditional execute string) 2" \
98 "dc" \
99 "9\n" \
100 "" "[1p]sa [2p]sb 2 1>a\n9p"
101
102testing "dc '>aeb' (conditional execute string with else)" \
103 "dc" \
104 "2\n9\n" \
105 "" "[1p]sa [2p]sb 2 1>aeb\n9p"
106
Denys Vlasenko8fac1c72018-12-25 20:50:41 +0100107testing "dc space can be a register" \
108 "dc" \
109 "2\n9\n" \
110 "" "[2p]s \n[3p]\nl x\n9p"
111
112testing "dc newline can be a register" \
113 "dc" \
114 "2\n9\n" \
115 "" "[2p]s\n[3p]l\nx\n9p"
116
Denys Vlasenkoace81cd2021-02-26 14:05:28 +0100117testing "dc Z (length) for numbers" \
118 "dc" \
119 "1\n1\n3\n1\n3\n1\n" \
120 "" "0Zp\n0.000Zp\n100Zp\n0.01Zp\n0.00120Zp\n0.0012 0.0012 - Zp\n"
121
Denys Vlasenko9a23b072018-12-12 21:41:40 +0100122for f in dc_*.dc; do
123 r="`basename "$f" .dc`_results.txt"
124 test -f "$r" || continue
125 # testing "test name" "command" "expected result" "file input" "stdin"
126 testing "dc $f" \
127 "{ { dc $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
128 "E:0\nE:0\n" \
129 "" ""
130done
131
132for f in dcx_*.dc; do
133 r="`basename "$f" .dc`_results.txt"
134 test -f "$r" || continue
135 # testing "test name" "command" "expected result" "file input" "stdin"
136 testing "dc -x $f" \
137 "{ { dc -x $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
138 "E:0\nE:0\n" \
139 "" ""
140done
141
Bernhard Reutner-Fischer70e30e82015-02-16 17:12:04 +0100142exit $FAILCOUNT