From 29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:21:29 +0200 Subject: Adding upstream version 1:0.1.9998svn3589+dfsg. Signed-off-by: Daniel Baumann --- src/sed/testsuite/dc.sed | 322 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 src/sed/testsuite/dc.sed (limited to 'src/sed/testsuite/dc.sed') diff --git a/src/sed/testsuite/dc.sed b/src/sed/testsuite/dc.sed new file mode 100644 index 0000000..5267589 --- /dev/null +++ b/src/sed/testsuite/dc.sed @@ -0,0 +1,322 @@ +#!/bin/sed -nf +# dc.sed - an arbitrary precision RPN calculator +# Created by Greg Ubben early 1995, late 1996 +# +# Dedicated to MAC's memory of the IBM 1620 ("CADET") computer. +# @(#)GSU dc.sed 1.1 06-Mar-1999 [non-explanatory] +# +# Examples: +# sqrt(2) to 10 digits: echo "10k 2vp" | dc.sed +# 20 factorial: echo "[d1-d1 != fractional-bases +# SunOS limits: 199/199 commands (though could pack in 10-20 more) +# Limitations: scale <= 999; |obase| >= 1; input digits in [0..F] +# Completed: 1am Feb 4, 1997 + +s/^/|P|K0|I10|O10|?~/ + +: next +s/|?./|?/ +s/|?#[ -}]*/|?/ +/|?!*[lLsS;:<>=]\{0,1\}$/N +/|?!*[-+*/%^<>=]/b binop +/^|.*|?[dpPfQXZvxkiosStT;:]/b binop +/|?[_0-9A-F.]/b number +/|?\[/b string +/|?l/b load +/|?L/b Load +/|?[sS]/b save +/|?c/ s/[^|]*// +/|?d/ s/[^~]*~/&&/ +/|?f/ s//&[pSbz0}s\1L\1l{xS\1]dS{xL}/ +/|?:/ s/|?:\([^{}]\)/|?~[s}L{s}L{s}L}s\1q]S}S}S{[L}1-d0>}S}l\1s\1L\1l{xS\1]dS{x/ +/|?[ ~ cdfxKIOT]/b next +/|?\n/b next +/|?[pP]/b print +/|?k/ s/^\([0-9]\{1,3\}\)\([.~].*|K\)[^|]*/\2\1/ +/|?i/ s/^\(-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}\)\(~.*|I\)[^|]*/\2\1/ +/|?o/ s/^\(-\{0,1\}[1-9][0-9]*\.\{0,1\}[0-9]*\)\(~.*|O\)[^|]*/\2\1/ +/|?[kio]/b pop +/|?t/b trunc +/|??/b input +/|?Q/b break +/|?q/b quit +h +/|?[XZz]/b count +/|?v/b sqrt +s/.*|?\([^Y]\).*/\1 is unimplemented/ +s/\n/\\n/g +l +g +b next + +: print +/^-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}~.*|?p/!b Print +/|O10|/b Print + +# Print a number in a non-decimal output base. Uses registers a,b,c,d. +# Handles fractional output bases (O<-1 or O>=1), unlike other dc's. +# Converts the fraction correctly on negative output bases, unlike +# UNIX dc. Also scales the fraction more accurately than UNIX dc. +# +s,|?p,&KSa0kd[[-]Psa0la-]Sad0>a[0P]sad0=a[A*2+]saOtd0>a1-ZSd[[[[ ]P]sclb1\ +!=cSbLdlbtZ[[[-]P0lb-sb]sclb0>c1+]sclb0!c]scdld>cscSdLbP]q]Sb\ +[t[1P1-d0bO1!c[A]sbdA=c[B]sbd\ +B=c[C]sbdC=c[D]sbdD=c[E]sbdE=c[F]sb]xscLbP]~Sd[dtdZOZ+k1O/Tdsb[.5]*[.1]O\ +X^*dZkdXK-1+ktsc0kdSb-[Lbdlb*lc+tdSbO*-lb0!=aldx]dsaxLbsb]sad1!>a[[.]POX\ ++sb1[SbO*dtdldx-LbO*dZlb!]\)/0\1/ +/^[^~]*~-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}~/ !s/~[^~]*\(.*|?!*[^!=<>]\)/~0\1/ +h +/|?\*/b mul +/|?\//b div +/|?%/b rem +/|?^/b exp + +/|?[+-]/ s/^\(-*\)\([^~]*~\)\(-*\)\([^~]*~\).*|?\(-\{0,1\}\).*/\2\4s\3o\1\3\5/ +s/\([^.~]*\)\([^~]*~[^.~]*\)\(.*\)/<\1,\2,\3|=-~.0,123456789<>/ +/|?/{ + s/^\([<>]\)\(-[^~]*~-.*\1\)\(.\)/\3\2/ + s/^\(.\)\(.*|?!*\)\1/\2!\1/ + s/|?![^!]\(.\)/&l\1x/ + s/[^~]*~[^~]*~\(.*|?\)!*.\(.*\)|=.*/\1\2/ + b next +} +s/\(-*\)\1|=.*/;9876543210;9876543210/ +/o-/ s/;9876543210/;0123456789/ +s/^>\([^~]*~\)\([^~]*~\)s\(-*\)\(-*o\3\(-*\)\)/>\2\1s\5\4/ + +s/,\([0-9]*\)\.*\([^,]*\),\([0-9]*\)\.*\([0-9]*\)/\1,\2\3.,\4;0/ +: right1 + s/,\([0-9]\)\([^,]*\),;*\([0-9]\)\([0-9]*\);*0*/\1,\2\3,\4;0/ +t right1 +s/.\([^,]*\),~\(.*\);0~s\(-*\)o-*/\1~\30\2~/ + +: addsub1 + s/\(.\{0,1\}\)\(~[^,]*\)\([0-9]\)\(\.*\),\([^;]*\)\(;\([^;]*\(\3[^;]*\)\).*X*\1\(.*\)\)/\2,\4\5\9\8\7\6/ + s/,\([^~]*~\).\{10\}\(.\)[^;]\{0,9\}\([^;]\{0,1\}\)[^;]*/,\2\1\3/ +# could be done in one s/// if we could have >9 back-refs... +/^~.*~;/!b addsub1 + +: endbin +s/.\([^,]*\),\([0-9.]*\).*/\1\2/ +G +s/\n[^~]*~[^~]*// + +: normal +s/^\(-*\)0*\([0-9.]*[0-9]\)[^~]*/\1\2/ +s/^[^1-9~]*~/0~/ +b next + +: mul +s/\(-*\)\([0-9]*\)\.*\([0-9]*\)~\(-*\)\([0-9]*\)\.*\([0-9]*\).*|K\([^|]*\).*/\1\4\2\5.!\3\6,|\2<\3~\5>\6:\7;9876543210009909/ + +: mul1 + s/![0-9]\([^<]*\)<\([0-9]\{0,1\}\)\([^>]*\)>\([0-9]\{0,1\}\)/0!\1\2<\3\4>/ + /![0-9]/ s/\(:[^;]*\)\([1-9]\)\(0*\)\([^0]*\2\(.\).*X*\3\(9*\)\)/\1\5\6\4/ +/<~[^>]*>:0*;/!t mul1 + +s/\(-*\)\1\([^>]*\).*/;\2^>:9876543210aaaaaaaaa/ + +: mul2 + s/\([0-9]~*\)^/^\1/ + s/<\([0-9]*\)\(.*[~^]\)\([0-9]*\)>/\1<\2>\3/ + + : mul3 + s/>\([0-9]\)\(.*\1.\{9\}\(a*\)\)/\1>\2;9\38\37\36\35\34\33\32\31\30/ + s/\(;[^<]*\)\([0-9]\)<\([^;]*\).*\2[0-9]*\(.*\)/\4\1<\2\3/ + s/a[0-9]/a/g + s/a\{10\}/b/g + s/b\{10\}/c/g + /|0*[1-9][^>]*>0*[1-9]/b mul3 + + s/;/a9876543210;/ + s/a.\{9\}\(.\)[^;]*\([^,]*\)[0-9]\([.!]*\),/\2,\1\3/ + y/cb/ba/ +/|<^/!b mul2 +b endbin + +: div +# CDDET +/^[-.0]*[1-9]/ !i\ +divide by 0 +//!b pop +s/\(-*\)\([0-9]*\)\.*\([^~]*~-*\)\([0-9]*\)\.*\([^~]*\)/\2.\3\1;0\4.\5;0/ +: div1 + s/^\.0\([^.]*\)\.;*\([0-9]\)\([0-9]*\);*0*/.\1\2.\3;0/ + s/^\([^.]*\)\([0-9]\)\.\([^;]*;\)0*\([0-9]*\)\([0-9]\)\./\1.\2\30\4.\5/ +t div1 +s/~\(-*\)\1\(-*\);0*\([^;]*[0-9]\)[^~]*/~123456789743222111~\2\3/ +s/\(.\(.\)[^~]*\)[^9]*\2.\{8\}\(.\)[^~]*/\3~\1/ +s,|?.,&SaSadSaKdlaZ+LaX-1+[sb1]Sbd1>bkLatsbLa[dSa2lbla*-*dLa!=a]dSaxsakLasbLb*t, +b next + +: rem +s,|?%,&Sadla/LaKSa[999]k*Lak-, +b next + +: exp +# This decimal method is just a little faster than the binary method done +# totally in dc: 1LaKLb [kdSb*LbK]Sb [[.5]*d0ktdSaa[dk]sadKa]dsaxsasaLbsaLatLbk K1-kt, +b next + +# END OF GSU dc.sed -- cgit v1.2.3