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 9testing "dc basic syntax (stdin, multiple args)" \ 10 "dc" \ 11 "30\n" \ 12 "" "10 20+p" 13 14testing "dc basic syntax (argv, single arg)" \ 15 "dc -e'10 20+p'" \ 16 "30\n" \ 17 "" "" 18 19testing "dc basic syntax (argv, multiple args)" \ 20 "dc -e10 -e20+p" \ 21 "30\n" \ 22 "" "" 23 24testing "dc complex with spaces (single arg)" \ 25 "dc -e'8 8 * 2 2 + / p'" \ 26 "16\n" \ 27 "" "" 28 29testing "dc complex without spaces (single arg)" \ 30 "dc -e'8 8*2 2+/p'" \ 31 "16\n" \ 32 "" "" 33 34testing "dc complex with spaces (multiple args)" \ 35 "dc -e8 -e8 -e\* -e2 -e2 -e+ -e/ -ep" \ 36 "16\n" \ 37 "" "" 38 39testing "dc complex without spaces (multiple args)" \ 40 "dc -e8 -e8\*2 -e2+/p" \ 41 "16\n" \ 42 "" "" 43 44optional FEATURE_DC_BIG 45# All tests below depend on FEATURE_DC_BIG 46 47testing "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 57testing "dc: x should work with strings created from a" \ 58 "dc -e'42 112 a x'" \ 59 "42\n" \ 60 "" "" 61 62testing "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 82testing "dc read" \ 83 "dc -finput" \ 84 "2\n9\n1\n" \ 85 "1?2\nf" "9\n" 86 87testing "dc read string" \ 88 "dc -finput" \ 89 "2\nstr\n1\n" \ 90 "1?2\nf" "[str]\n" 91 92testing "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 107testing "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 117testing "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 122for 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 142exit $FAILCOUNT 143