#!/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" \ "" "" optional FEATURE_DC_BIG # All tests below depend on FEATURE_DC_BIG testing "dc: x should execute strings" \ "dc -e'[40 2 +] x f'" \ "42\n" \ "" "" testing "dc: x should not execute or pop non-strings" \ "dc -e'42 x f'" \ "42\n" \ "" "" testing "dc: x should work with strings created from a" \ "dc -e'42 112 a x'" \ "42\n" \ "" "" testing "dc: p should print invalid escapes" \ "dc -e '[\q] p'" \ "\\q\n" \ "" "" testing "dc: p should print trailing backslashes" \ "dc -e '[q\] p'" \ "q\\\\\n" \ "" "" testing "dc: p should parse/print single backslashes" \ "dc -e '[\] p'" \ "\\\\\n" \ "" "" testing "dc: p should print single backslash strings" \ "dc -e '92 a p'" \ "\\\\\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" 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" testing "dc Z (length) for numbers" \ "dc" \ "1\n1\n3\n1\n3\n1\n" \ "" "0Zp\n0.000Zp\n100Zp\n0.01Zp\n0.00120Zp\n0.0012 0.0012 - Zp\n" 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