busybox/testsuite/dc.tests
<<
>>
Prefs
   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