aboutsummaryrefslogtreecommitdiff
path: root/testsuite/dc.tests
blob: 1708a483503e891b05e5e18fec9f0a3056420f50 (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
#!/bin/sh
# Copyright 2015 by Bernhard Reutner-Fischer
# Licensed under GPLv2 or later, see file LICENSE in this source tree.

. ./testing.sh

# testing "test name" "command" "expected result" "file input" "stdin"

testing "dc basic syntax (stdin, multiple args)" \
	"dc" \
	"30\n" \
	"" "10 20+p"

testing "dc basic syntax (argv, single arg)" \
	"dc -e'10 20+p'" \
	"30\n" \
	"" ""

testing "dc basic syntax (argv, multiple args)" \
	"dc -e10 -e20+p" \
	"30\n" \
	"" ""

testing "dc complex with spaces (single arg)" \
	"dc -e'8 8 * 2 2 + / p'" \
	"16\n" \
	"" ""

testing "dc complex without spaces (single arg)" \
	"dc -e'8 8*2 2+/p'" \
	"16\n" \
	"" ""

testing "dc complex with spaces (multiple args)" \
	"dc -e8 -e8 -e\* -e2 -e2 -e+ -e/ -ep" \
	"16\n" \
	"" ""

testing "dc complex without spaces (multiple args)" \
	"dc -e8 -e8\*2 -e2+/p" \
	"16\n" \
	"" ""

testing "dc read" \
	"dc -finput" \
	"2\n9\n1\n" \
	"1?2\nf" "9\n"

testing "dc read string" \
	"dc -finput" \
	"2\nstr\n1\n" \
	"1?2\nf" "[str]\n"

optional FEATURE_DC_BIG
# All tests below depend on FEATURE_DC_BIG

testing "dc '>a' (conditional execute string) 1" \
	"dc" \
	"1\n9\n" \
	"" "[1p]sa [2p]sb 1 2>a\n9p"

testing "dc '>a' (conditional execute string) 2" \
	"dc" \
	"9\n" \
	"" "[1p]sa [2p]sb 2 1>a\n9p"

testing "dc '>aeb' (conditional execute string with else)" \
	"dc" \
	"2\n9\n" \
	"" "[1p]sa [2p]sb 2 1>aeb\n9p"

testing "dc space can be a register" \
	"dc" \
	"2\n9\n" \
	"" "[2p]s \n[3p]\nl x\n9p"

testing "dc newline can be a register" \
	"dc" \
	"2\n9\n" \
	"" "[2p]s\n[3p]l\nx\n9p"

for f in dc_*.dc; do
	r="`basename "$f" .dc`_results.txt"
	test -f "$r" || continue
	# testing "test name" "command" "expected result" "file input" "stdin"
	testing "dc $f" \
		"{ { dc $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
		"E:0\nE:0\n" \
		"" ""
done

for f in dcx_*.dc; do
	r="`basename "$f" .dc`_results.txt"
	test -f "$r" || continue
	# testing "test name" "command" "expected result" "file input" "stdin"
	testing "dc -x $f" \
		"{ { dc -x $f 2>&1; echo E:\$? >&2; } | diff -u - $r; echo E:\$?; } 2>&1" \
		"E:0\nE:0\n" \
		"" ""
done

exit $FAILCOUNT