summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/a.d5
-rw-r--r--testsuite/a.ed37
-rw-r--r--testsuite/a.err4
-rw-r--r--testsuite/a.pr3
-rw-r--r--testsuite/a.r24
-rw-r--r--testsuite/a.t9
-rw-r--r--testsuite/addr.d9
-rw-r--r--testsuite/addr.r2
-rw-r--r--testsuite/addr.t5
-rw-r--r--testsuite/addr1.err2
-rw-r--r--testsuite/addr1.pr1
-rw-r--r--testsuite/addr2.err2
-rw-r--r--testsuite/addr2.pr1
-rw-r--r--testsuite/addr3.err3
-rw-r--r--testsuite/addr4.err3
-rw-r--r--testsuite/ascii.t0
-rw-r--r--testsuite/bang.d5
-rw-r--r--testsuite/bang.r6
-rw-r--r--testsuite/bang.t6
-rw-r--r--testsuite/bang1.err2
-rw-r--r--testsuite/bang1.pr1
-rw-r--r--testsuite/bang2.err2
-rw-r--r--testsuite/bang2.pr1
-rw-r--r--testsuite/c.d5
-rw-r--r--testsuite/c.ed25
-rw-r--r--testsuite/c.err4
-rw-r--r--testsuite/c.pr3
-rw-r--r--testsuite/c.r7
-rw-r--r--testsuite/c.t12
-rwxr-xr-xtestsuite/check.sh91
-rw-r--r--testsuite/comment.d6
-rw-r--r--testsuite/comment.r6
-rw-r--r--testsuite/comment.t5
-rw-r--r--testsuite/d.d5
-rw-r--r--testsuite/d.ed12
-rw-r--r--testsuite/d.err4
-rw-r--r--testsuite/d.pr1
-rw-r--r--testsuite/d.r8
-rw-r--r--testsuite/d.t3
-rw-r--r--testsuite/e1.d5
-rw-r--r--testsuite/e1.ed3
-rw-r--r--testsuite/e1.err4
-rw-r--r--testsuite/e1.pr1
-rw-r--r--testsuite/e1.rbin23 -> 256 bytes
-rw-r--r--testsuite/e1.t3
-rw-r--r--testsuite/e2.d1
-rw-r--r--testsuite/e2.ed4
-rw-r--r--testsuite/e2.err4
-rw-r--r--testsuite/e2.pr1
-rw-r--r--testsuite/e2.rbin13 -> 256 bytes
-rw-r--r--testsuite/e2.t1
-rw-r--r--testsuite/e3.d1
-rw-r--r--testsuite/e3.ed5
-rw-r--r--testsuite/e3.err4
-rw-r--r--testsuite/e3.pr1
-rw-r--r--testsuite/e3.rbin21 -> 256 bytes
-rw-r--r--testsuite/e3.t1
-rw-r--r--testsuite/e4.d1
-rw-r--r--testsuite/e4.ed5
-rw-r--r--testsuite/e4.rbin21 -> 257 bytes
-rw-r--r--testsuite/e4.t1
-rw-r--r--testsuite/e5.ed7
-rw-r--r--testsuite/e5.r (renamed from testsuite/ascii.d)bin256 -> 256 bytes
-rw-r--r--testsuite/f1.err4
-rw-r--r--testsuite/f1.pr1
-rw-r--r--testsuite/f2.err4
-rw-r--r--testsuite/f2.pr1
-rw-r--r--testsuite/g.ed32
-rw-r--r--testsuite/g.r28
-rw-r--r--testsuite/g1.d5
-rw-r--r--testsuite/g1.err4
-rw-r--r--testsuite/g1.pr1
-rw-r--r--testsuite/g1.r20
-rw-r--r--testsuite/g1.t9
-rw-r--r--testsuite/g2.d5
-rw-r--r--testsuite/g2.err4
-rw-r--r--testsuite/g2.pr1
-rw-r--r--testsuite/g2.r1
-rw-r--r--testsuite/g2.t2
-rw-r--r--testsuite/g3.d5
-rw-r--r--testsuite/g3.err4
-rw-r--r--testsuite/g3.pr1
-rw-r--r--testsuite/g3.r5
-rw-r--r--testsuite/g3.t4
-rw-r--r--testsuite/g4.d5
-rw-r--r--testsuite/g4.err7
-rw-r--r--testsuite/g4.r7
-rw-r--r--testsuite/g4.t13
-rw-r--r--testsuite/g5.d3
-rw-r--r--testsuite/g5.r9
-rw-r--r--testsuite/g5.t2
-rw-r--r--testsuite/h.err2
-rw-r--r--testsuite/h.pr1
-rw-r--r--testsuite/i.d5
-rw-r--r--testsuite/i.ed37
-rw-r--r--testsuite/i.err2
-rw-r--r--testsuite/i.pr3
-rw-r--r--testsuite/i.r28
-rw-r--r--testsuite/i.t9
-rw-r--r--testsuite/j.d5
-rw-r--r--testsuite/j.ed14
-rw-r--r--testsuite/j.r13
-rw-r--r--testsuite/j.t2
-rw-r--r--testsuite/k.d5
-rw-r--r--testsuite/k.ed12
-rw-r--r--testsuite/k.r9
-rw-r--r--testsuite/k.t10
-rw-r--r--testsuite/k1.err (renamed from testsuite/k4.err)2
-rw-r--r--testsuite/k2.err2
-rw-r--r--testsuite/k2.pr1
-rw-r--r--testsuite/k3.err2
-rw-r--r--testsuite/k3.pr1
-rw-r--r--testsuite/k4.pr6
-rw-r--r--testsuite/m.d5
-rw-r--r--testsuite/m.err7
-rw-r--r--testsuite/m.pr5
-rw-r--r--testsuite/m.r5
-rw-r--r--testsuite/m.t7
-rw-r--r--testsuite/m_addr.ed20
-rw-r--r--testsuite/m_addr.r13
-rw-r--r--testsuite/nl.err1
-rw-r--r--testsuite/nl.pr1
-rw-r--r--testsuite/nl1.d5
-rw-r--r--testsuite/nl1.r8
-rw-r--r--testsuite/nl1.t8
-rw-r--r--testsuite/nl2.d5
-rw-r--r--testsuite/nl2.r6
-rw-r--r--testsuite/nl2.t4
-rw-r--r--testsuite/p1.err3
-rw-r--r--testsuite/p2.err3
-rw-r--r--testsuite/q.d0
-rw-r--r--testsuite/q.ed7
-rw-r--r--testsuite/q.err1
-rw-r--r--testsuite/q.pr1
-rw-r--r--testsuite/q.r13
-rw-r--r--testsuite/q1.err3
-rw-r--r--testsuite/q2.err3
-rw-r--r--testsuite/q3.err (renamed from testsuite/q.t)3
-rw-r--r--testsuite/q4.err6
-rw-r--r--testsuite/q5.err7
-rw-r--r--testsuite/q6.err4
-rw-r--r--testsuite/q7.err5
-rw-r--r--testsuite/q8.err7
-rw-r--r--testsuite/r.err2
-rw-r--r--testsuite/r.pr1
-rw-r--r--testsuite/r1.d5
-rw-r--r--testsuite/r1.ed16
-rw-r--r--testsuite/r1.rbin58 -> 2257 bytes
-rw-r--r--testsuite/r1.t3
-rw-r--r--testsuite/r2.d5
-rw-r--r--testsuite/r2.ed4
-rw-r--r--testsuite/r2.rbin68 -> 1111 bytes
-rw-r--r--testsuite/r2.t1
-rw-r--r--testsuite/r3.d5
-rw-r--r--testsuite/r3.ed6
-rw-r--r--testsuite/r3.r16
-rw-r--r--testsuite/r3.t2
-rw-r--r--testsuite/s.ed58
-rw-r--r--testsuite/s.r17
-rw-r--r--testsuite/s01.err3
-rw-r--r--testsuite/s02.err3
-rw-r--r--testsuite/s03.err3
-rw-r--r--testsuite/s04.err (renamed from testsuite/s4.err)2
-rw-r--r--testsuite/s05.err3
-rw-r--r--testsuite/s06.err3
-rw-r--r--testsuite/s07.err4
-rw-r--r--testsuite/s08.err (renamed from testsuite/s8.err)5
-rw-r--r--testsuite/s09.err (renamed from testsuite/s9.err)5
-rw-r--r--testsuite/s1.d5
-rw-r--r--testsuite/s1.err1
-rw-r--r--testsuite/s1.pr1
-rw-r--r--testsuite/s1.r5
-rw-r--r--testsuite/s1.t6
-rw-r--r--testsuite/s10.err5
-rw-r--r--testsuite/s10.pr5
-rw-r--r--testsuite/s11.err8
-rw-r--r--testsuite/s12.err3
-rw-r--r--testsuite/s13.err3
-rw-r--r--testsuite/s14.err4
-rw-r--r--testsuite/s15.err4
-rw-r--r--testsuite/s16.err3
-rw-r--r--testsuite/s17.err3
-rw-r--r--testsuite/s18.err3
-rw-r--r--testsuite/s19.err3
-rw-r--r--testsuite/s2.d5
-rw-r--r--testsuite/s2.err4
-rw-r--r--testsuite/s2.pr5
-rw-r--r--testsuite/s2.r5
-rw-r--r--testsuite/s2.t4
-rw-r--r--testsuite/s20.err5
-rw-r--r--testsuite/s21.err4
-rw-r--r--testsuite/s3.d0
-rw-r--r--testsuite/s3.err1
-rw-r--r--testsuite/s3.pr1
-rw-r--r--testsuite/s3.r1
-rw-r--r--testsuite/s3.t6
-rw-r--r--testsuite/s4.pr1
-rw-r--r--testsuite/s5.err1
-rw-r--r--testsuite/s5.pr1
-rw-r--r--testsuite/s6.err1
-rw-r--r--testsuite/s6.pr1
-rw-r--r--testsuite/s7.err5
-rw-r--r--testsuite/s7.pr6
-rw-r--r--testsuite/s8.pr5
-rw-r--r--testsuite/s9.pr5
-rw-r--r--testsuite/t.d5
-rw-r--r--testsuite/t.ed11
-rw-r--r--testsuite/t.r50
-rw-r--r--testsuite/t.t4
-rw-r--r--testsuite/t1.err2
-rw-r--r--testsuite/t1.pr1
-rw-r--r--testsuite/t2.err2
-rw-r--r--testsuite/t2.pr1
-rw-r--r--testsuite/test.bin (renamed from testsuite/ascii.r)bin256 -> 256 bytes
-rw-r--r--testsuite/test.txt13
-rw-r--r--testsuite/u.d5
-rw-r--r--testsuite/u.err2
-rw-r--r--testsuite/u.pr1
-rw-r--r--testsuite/u.r9
-rw-r--r--testsuite/u.t31
-rw-r--r--testsuite/v.d5
-rw-r--r--testsuite/v.ed13
-rw-r--r--testsuite/v.r26
-rw-r--r--testsuite/v.t6
-rw-r--r--testsuite/w.d5
-rw-r--r--testsuite/w.ed7
-rw-r--r--testsuite/w.r27
-rw-r--r--testsuite/w.t2
-rw-r--r--testsuite/w1.err4
-rw-r--r--testsuite/w1.pr1
-rw-r--r--testsuite/w2.err4
-rw-r--r--testsuite/w2.pr1
-rw-r--r--testsuite/w3.err4
-rw-r--r--testsuite/w3.pr1
-rw-r--r--testsuite/x.d5
-rw-r--r--testsuite/x.ed17
-rw-r--r--testsuite/x.err11
-rw-r--r--testsuite/x.pr1
-rw-r--r--testsuite/x.r40
-rw-r--r--testsuite/x.t8
-rw-r--r--testsuite/z.err4
-rw-r--r--testsuite/z.pr2
242 files changed, 853 insertions, 686 deletions
diff --git a/testsuite/a.d b/testsuite/a.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/a.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/a.ed b/testsuite/a.ed
new file mode 100644
index 0000000..314edc3
--- /dev/null
+++ b/testsuite/a.ed
@@ -0,0 +1,37 @@
+H
+# empty append at address 0 should set the current address to 0
+0a
+.
++4a
+# this is not a comment
+.
+# empty append at current address should not modify the current address
+a
+.
+a
+hello world!
+.
+a
+hello world!!
+.
+0a
+hello world!!!
+.
+!read one # shell escape should not modify the current address
+text for the read shell command above
+a
+shell escape marker
+.
+$a
+hello world!!!!
+.
+u
+u
+a
+hello world!!!!!
+.
+a
+to be undone
+.
+u
+w out.o
diff --git a/testsuite/a.err b/testsuite/a.err
index ec4b00b..7d6029a 100644
--- a/testsuite/a.err
+++ b/testsuite/a.err
@@ -1,3 +1,5 @@
-aa
+H
+ag
hello world
.
+w out.ro
diff --git a/testsuite/a.pr b/testsuite/a.pr
deleted file mode 100644
index ec4b00b..0000000
--- a/testsuite/a.pr
+++ /dev/null
@@ -1,3 +0,0 @@
-aa
-hello world
-.
diff --git a/testsuite/a.r b/testsuite/a.r
index 26257bd..9434d34 100644
--- a/testsuite/a.r
+++ b/testsuite/a.r
@@ -1,8 +1,20 @@
-hello world
-line 1
+hello world!!!
+shell escape marker
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+# this is not a comment
hello world!
-line 2
-line 3
-line 4
-line5
hello world!!
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
+hello world!!!!
+hello world!!!!!
diff --git a/testsuite/a.t b/testsuite/a.t
deleted file mode 100644
index ac98c40..0000000
--- a/testsuite/a.t
+++ /dev/null
@@ -1,9 +0,0 @@
-0a
-hello world
-.
-2a
-hello world!
-.
-$a
-hello world!!
-.
diff --git a/testsuite/addr.d b/testsuite/addr.d
deleted file mode 100644
index 8f7ba1b..0000000
--- a/testsuite/addr.d
+++ /dev/null
@@ -1,9 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
-1ine6
-line7
-line8
-line9
diff --git a/testsuite/addr.r b/testsuite/addr.r
deleted file mode 100644
index 04caf17..0000000
--- a/testsuite/addr.r
+++ /dev/null
@@ -1,2 +0,0 @@
-line 2
-line9
diff --git a/testsuite/addr.t b/testsuite/addr.t
deleted file mode 100644
index 750b224..0000000
--- a/testsuite/addr.t
+++ /dev/null
@@ -1,5 +0,0 @@
-1 d
-1 1 d
-1,2,d
-1;+ + ,d
-1,2;., + 2d
diff --git a/testsuite/addr1.err b/testsuite/addr1.err
index 29d6383..7b40b33 100644
--- a/testsuite/addr1.err
+++ b/testsuite/addr1.err
@@ -1 +1,3 @@
+H
100
+w out.ro
diff --git a/testsuite/addr1.pr b/testsuite/addr1.pr
deleted file mode 100644
index 29d6383..0000000
--- a/testsuite/addr1.pr
+++ /dev/null
@@ -1 +0,0 @@
-100
diff --git a/testsuite/addr2.err b/testsuite/addr2.err
index e96acb9..da4ffa9 100644
--- a/testsuite/addr2.err
+++ b/testsuite/addr2.err
@@ -1 +1,3 @@
+H
-100
+w out.ro
diff --git a/testsuite/addr2.pr b/testsuite/addr2.pr
deleted file mode 100644
index e96acb9..0000000
--- a/testsuite/addr2.pr
+++ /dev/null
@@ -1 +0,0 @@
--100
diff --git a/testsuite/addr3.err b/testsuite/addr3.err
new file mode 100644
index 0000000..e5a7fb7
--- /dev/null
+++ b/testsuite/addr3.err
@@ -0,0 +1,3 @@
+H
+0p
+w out.ro
diff --git a/testsuite/addr4.err b/testsuite/addr4.err
new file mode 100644
index 0000000..7f4f4ac
--- /dev/null
+++ b/testsuite/addr4.err
@@ -0,0 +1,3 @@
+H
+2,1p
+w out.ro
diff --git a/testsuite/ascii.t b/testsuite/ascii.t
deleted file mode 100644
index e69de29..0000000
--- a/testsuite/ascii.t
+++ /dev/null
diff --git a/testsuite/bang.d b/testsuite/bang.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/bang.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/bang.r b/testsuite/bang.r
deleted file mode 100644
index 237f034..0000000
--- a/testsuite/bang.r
+++ /dev/null
@@ -1,6 +0,0 @@
-line 1
-line 2
-line 3
-okay
-line 4
-line5
diff --git a/testsuite/bang.t b/testsuite/bang.t
deleted file mode 100644
index 1e6152e..0000000
--- a/testsuite/bang.t
+++ /dev/null
@@ -1,6 +0,0 @@
-3p
-!read one
-hello, world
-a
-okay
-.
diff --git a/testsuite/bang1.err b/testsuite/bang1.err
index 630af90..afce43f 100644
--- a/testsuite/bang1.err
+++ b/testsuite/bang1.err
@@ -1 +1,3 @@
+H
.!date
+w out.ro
diff --git a/testsuite/bang1.pr b/testsuite/bang1.pr
deleted file mode 100644
index 630af90..0000000
--- a/testsuite/bang1.pr
+++ /dev/null
@@ -1 +0,0 @@
-.!date
diff --git a/testsuite/bang2.err b/testsuite/bang2.err
index 79d8956..3493119 100644
--- a/testsuite/bang2.err
+++ b/testsuite/bang2.err
@@ -1 +1,3 @@
+H
!!
+w out.ro
diff --git a/testsuite/bang2.pr b/testsuite/bang2.pr
deleted file mode 100644
index 79d8956..0000000
--- a/testsuite/bang2.pr
+++ /dev/null
@@ -1 +0,0 @@
-!!
diff --git a/testsuite/c.d b/testsuite/c.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/c.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/c.ed b/testsuite/c.ed
new file mode 100644
index 0000000..98b8a3b
--- /dev/null
+++ b/testsuite/c.ed
@@ -0,0 +1,25 @@
+H
+0c
+at the top
+.
+4c
+in the middle
+.
+5c
+.
+c
+after the middle
+.
+$c
+at the bottom
+.
+u
+u
+-5,10c
+between middle/bottom
+.
+c
+to be undone
+.
+u
+w out.o
diff --git a/testsuite/c.err b/testsuite/c.err
index 658ec38..2775d49 100644
--- a/testsuite/c.err
+++ b/testsuite/c.err
@@ -1,3 +1,5 @@
-cc
+H
+c0
hello world
.
+w out.ro
diff --git a/testsuite/c.pr b/testsuite/c.pr
deleted file mode 100644
index 658ec38..0000000
--- a/testsuite/c.pr
+++ /dev/null
@@ -1,3 +0,0 @@
-cc
-hello world
-.
diff --git a/testsuite/c.r b/testsuite/c.r
index 0fb3e4f..4fc5e90 100644
--- a/testsuite/c.r
+++ b/testsuite/c.r
@@ -1,4 +1,9 @@
at the top
-between top/middle
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
in the middle
+after the middle
+of this law which pervades all animated nature. No fancied equality, no
+between middle/bottom
+no anxiety about providing the means of subsistence for themselves and
at the bottom
diff --git a/testsuite/c.t b/testsuite/c.t
deleted file mode 100644
index 5fba319..0000000
--- a/testsuite/c.t
+++ /dev/null
@@ -1,12 +0,0 @@
-0c
-at the top
-.
-4c
-in the middle
-.
-$c
-at the bottom
-.
-2,3c
-between top/middle
-.
diff --git a/testsuite/check.sh b/testsuite/check.sh
index 81ee128..1be15e1 100755
--- a/testsuite/check.sh
+++ b/testsuite/check.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# check script for GNU ed - The GNU line editor
-# Copyright (C) 2006-2016 Antonio Diaz Diaz.
+# Copyright (C) 2006-2017 Antonio Diaz Diaz.
#
# This script is free software; you have unlimited permission
# to copy, distribute and modify it.
@@ -10,6 +10,7 @@ export LC_ALL
objdir=`pwd`
testdir=`cd "$1" ; pwd`
ED="${objdir}"/ed
+framework_failure() { echo "failure in testing framework" ; exit 1 ; }
if [ ! -f "${ED}" ] || [ ! -x "${ED}" ] ; then
echo "${ED}: cannot execute"
@@ -18,88 +19,84 @@ fi
if [ -d tmp ] ; then rm -rf tmp ; fi
mkdir tmp
+cd "${objdir}"/tmp || framework_failure
-# Generate ed test scripts, with extensions .ed and .red, from
-# .t and .err files, respectively.
-printf "building test scripts for ed-%s...\n" "$2"
-cd "${testdir}"
-
-for i in *.t ; do
- base=`echo "$i" | sed 's/\.t$//'`
- (
- echo H
- echo "r ${testdir}/${base}.d"
- cat "$i"
- echo "w ${base}.o"
- ) > "${objdir}/tmp/${base}.ed"
-done
-
-for i in *.err ; do
- base=`echo "$i" | sed 's/\.err$//'`
- (
- echo H
- echo "r ${testdir}/${base}.err"
- cat "$i"
- echo "w ${base}.ro"
- ) > "${objdir}/tmp/${base}.red"
-done
-
-
-cd "${objdir}"/tmp
+cat "${testdir}"/test.txt > test.txt || framework_failure
+cat "${testdir}"/test.bin > test.bin || framework_failure
+touch zero || framework_failure
fail=0
printf "testing ed-%s...\n" "$2"
-# Run the .ed and .red scripts just generated
-# and compare their output against the .r and .pr files, which contain
-# the correct output.
-
-# Run the *.red scripts first, since these don't generate output;
-# they exit with non-zero status
-for i in *.red ; do
- if "${ED}" -s < "$i" > /dev/null 2>&1 ; then
+# Run the .err scripts first with a regular file connected to standard
+# input, since these don't generate output; they exit with non-zero status.
+for i in "${testdir}"/*.err ; do
+ if "${ED}" -s test.txt < "$i" > /dev/null 2>&1 ; then
echo "*** The script $i exited abnormally ***"
fail=127
fi
done
-# Run error scripts again as pipes - these should generate output and
-# exit with error (>0) status.
-for i in *.red ; do
- base=`echo "$i" | sed 's/\.red$//'`
- if cat ${base}.red | "${ED}" -s > /dev/null 2>&1 ; then
+# Run the .err scripts again with a regular file connected to standard
+# input, but with '--loose-exit-status'; they should exit with zero status.
+for i in "${testdir}"/*.err ; do
+ if "${ED}" -sl test.txt < "$i" > /dev/null 2>&1 ; then
+ true
+ else
+ echo "*** The script $i failed '--loose-exit-status' ***"
+ fail=127
+ fi
+done
+
+# Run the .err scripts again as pipes - these should exit with non-zero
+# status without altering the contents of the buffer; the produced
+# 'out.ro' must be identical to 'test.txt'.
+for i in "${testdir}"/*.err ; do
+ base=`echo "$i" | sed 's,^.*/,,;s,\.err$,,'` # remove dir and ext
+ if cat "$i" | "${ED}" -s test.txt > /dev/null 2>&1 ; then
echo "*** The piped script $i exited abnormally ***"
fail=127
else
- if cmp -s ${base}.ro "${testdir}"/${base}.pr ; then
+ if cmp -s out.ro test.txt ; then
true
else
+ mv -f out.ro ${base}.ro
echo "*** Output ${base}.ro of piped script $i is incorrect ***"
fail=127
fi
fi
+ rm -f out.ro
done
-# Run the remaining scripts; they exit with zero status
-for i in *.ed ; do
- base=`echo "$i" | sed 's/\.ed$//'`
- if "${ED}" -s < ${base}.ed > /dev/null 2>&1 ; then
- if cmp -s ${base}.o "${testdir}"/${base}.r ; then
+# Run the .ed scripts and compare their output against the .r files,
+# which contain the correct output.
+# The .ed scripts should exit with zero status.
+for i in "${testdir}"/*.ed ; do
+ base=`echo "$i" | sed 's,^.*/,,;s,\.ed$,,'` # remove dir and ext
+ if "${ED}" -s test.txt < "$i" > /dev/null 2> out.log ; then
+ if cmp -s out.o "${testdir}"/${base}.r ; then
true
else
+ mv -f out.o ${base}.o
echo "*** Output ${base}.o of script $i is incorrect ***"
fail=127
fi
else
+ mv -f out.log ${base}.log
echo "*** The script $i exited abnormally ***"
fail=127
fi
+ rm -f out.o out.log
done
+rm -f test.txt test.bin zero
+
if [ ${fail} = 0 ] ; then
echo "tests completed successfully."
cd "${objdir}" && rm -r tmp
else
echo "tests failed."
+ echo "Please, send a bug report to bug-ed@gnu.org."
+ echo "Include the (compressed) contents of '${objdir}/tmp' in the report."
fi
exit ${fail}
diff --git a/testsuite/comment.d b/testsuite/comment.d
deleted file mode 100644
index ec1e35a..0000000
--- a/testsuite/comment.d
+++ /dev/null
@@ -1,6 +0,0 @@
-hello
-world
-this is a simple
-line of text
-for testing the comment
-command in global lists
diff --git a/testsuite/comment.r b/testsuite/comment.r
deleted file mode 100644
index ae60d9d..0000000
--- a/testsuite/comment.r
+++ /dev/null
@@ -1,6 +0,0 @@
-heylo
-woryd
-this is a simpye
-yine of text
-for testing the comment
-command in gyobal lists
diff --git a/testsuite/comment.t b/testsuite/comment.t
deleted file mode 100644
index ab873f8..0000000
--- a/testsuite/comment.t
+++ /dev/null
@@ -1,5 +0,0 @@
-# lines beginning with a `#' should be ignored
-g/./# including in global commands \
-s/l/x/\
-# and in the command list \
-s/x/y/
diff --git a/testsuite/d.d b/testsuite/d.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/d.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/d.ed b/testsuite/d.ed
new file mode 100644
index 0000000..0312989
--- /dev/null
+++ b/testsuite/d.ed
@@ -0,0 +1,12 @@
+H
+2 d
+. d
+$ d
+-5 d
+u
+u
++3,+4d
+# to be undone
+1,$d
+u
+w out.o
diff --git a/testsuite/d.err b/testsuite/d.err
index f03f694..16cbbba 100644
--- a/testsuite/d.err
+++ b/testsuite/d.err
@@ -1 +1,3 @@
-dd
+H
+d1
+w out.ro
diff --git a/testsuite/d.pr b/testsuite/d.pr
deleted file mode 100644
index f03f694..0000000
--- a/testsuite/d.pr
+++ /dev/null
@@ -1 +0,0 @@
-dd
diff --git a/testsuite/d.r b/testsuite/d.r
index b7e242c..59e352f 100644
--- a/testsuite/d.r
+++ b/testsuite/d.r
@@ -1 +1,7 @@
-line 2
+This natural inequality of the two powers of population and of
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
diff --git a/testsuite/d.t b/testsuite/d.t
deleted file mode 100644
index c7c473f..0000000
--- a/testsuite/d.t
+++ /dev/null
@@ -1,3 +0,0 @@
-1d
-2;+1d
-$d
diff --git a/testsuite/e1.d b/testsuite/e1.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/e1.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/e1.ed b/testsuite/e1.ed
new file mode 100644
index 0000000..61d8f52
--- /dev/null
+++ b/testsuite/e1.ed
@@ -0,0 +1,3 @@
+H
+e test.bin
+w out.o
diff --git a/testsuite/e1.err b/testsuite/e1.err
index 827cc29..2b7728c 100644
--- a/testsuite/e1.err
+++ b/testsuite/e1.err
@@ -1 +1,3 @@
-ee e1.err
+H
+ee test.bin
+w out.ro
diff --git a/testsuite/e1.pr b/testsuite/e1.pr
deleted file mode 100644
index 827cc29..0000000
--- a/testsuite/e1.pr
+++ /dev/null
@@ -1 +0,0 @@
-ee e1.err
diff --git a/testsuite/e1.r b/testsuite/e1.r
index 9692412..c866266 100644
--- a/testsuite/e1.r
+++ b/testsuite/e1.r
Binary files differ
diff --git a/testsuite/e1.t b/testsuite/e1.t
deleted file mode 100644
index 4a348d5..0000000
--- a/testsuite/e1.t
+++ /dev/null
@@ -1,3 +0,0 @@
-3d
-e e1.ed
-1,2d
diff --git a/testsuite/e2.d b/testsuite/e2.d
deleted file mode 100644
index aa44630..0000000
--- a/testsuite/e2.d
+++ /dev/null
@@ -1 +0,0 @@
-E !echo hello world-
diff --git a/testsuite/e2.ed b/testsuite/e2.ed
new file mode 100644
index 0000000..73b8253
--- /dev/null
+++ b/testsuite/e2.ed
@@ -0,0 +1,4 @@
+H
+f test.bin
+e
+w out.o
diff --git a/testsuite/e2.err b/testsuite/e2.err
index 779a64b..06e88ec 100644
--- a/testsuite/e2.err
+++ b/testsuite/e2.err
@@ -1 +1,3 @@
-.e e2.err
+H
+.e test.bin
+w out.ro
diff --git a/testsuite/e2.pr b/testsuite/e2.pr
deleted file mode 100644
index 779a64b..0000000
--- a/testsuite/e2.pr
+++ /dev/null
@@ -1 +0,0 @@
-.e e2.err
diff --git a/testsuite/e2.r b/testsuite/e2.r
index 59ebf11..c866266 100644
--- a/testsuite/e2.r
+++ b/testsuite/e2.r
Binary files differ
diff --git a/testsuite/e2.t b/testsuite/e2.t
deleted file mode 100644
index aa44630..0000000
--- a/testsuite/e2.t
+++ /dev/null
@@ -1 +0,0 @@
-E !echo hello world-
diff --git a/testsuite/e3.d b/testsuite/e3.d
deleted file mode 100644
index aa44630..0000000
--- a/testsuite/e3.d
+++ /dev/null
@@ -1 +0,0 @@
-E !echo hello world-
diff --git a/testsuite/e3.ed b/testsuite/e3.ed
new file mode 100644
index 0000000..36ca4ac
--- /dev/null
+++ b/testsuite/e3.ed
@@ -0,0 +1,5 @@
+H
+e test.bin
+1d
+E !cat test.bin
+w out.o
diff --git a/testsuite/e3.err b/testsuite/e3.err
index 80a7fdc..6d36baa 100644
--- a/testsuite/e3.err
+++ b/testsuite/e3.err
@@ -1 +1,3 @@
-ee.err
+H
+etest.bin
+w out.ro
diff --git a/testsuite/e3.pr b/testsuite/e3.pr
deleted file mode 100644
index 80a7fdc..0000000
--- a/testsuite/e3.pr
+++ /dev/null
@@ -1 +0,0 @@
-ee.err
diff --git a/testsuite/e3.r b/testsuite/e3.r
index aa44630..c866266 100644
--- a/testsuite/e3.r
+++ b/testsuite/e3.r
Binary files differ
diff --git a/testsuite/e3.t b/testsuite/e3.t
deleted file mode 100644
index 1c50726..0000000
--- a/testsuite/e3.t
+++ /dev/null
@@ -1 +0,0 @@
-E
diff --git a/testsuite/e4.d b/testsuite/e4.d
deleted file mode 100644
index aa44630..0000000
--- a/testsuite/e4.d
+++ /dev/null
@@ -1 +0,0 @@
-E !echo hello world-
diff --git a/testsuite/e4.ed b/testsuite/e4.ed
new file mode 100644
index 0000000..5ce96b7
--- /dev/null
+++ b/testsuite/e4.ed
@@ -0,0 +1,5 @@
+H
+e test.bin
+# modifying the last line of a binary file adds a newline
+$s/x/x/
+w out.o
diff --git a/testsuite/e4.r b/testsuite/e4.r
index aa44630..fb695e1 100644
--- a/testsuite/e4.r
+++ b/testsuite/e4.r
Binary files differ
diff --git a/testsuite/e4.t b/testsuite/e4.t
deleted file mode 100644
index d905d9d..0000000
--- a/testsuite/e4.t
+++ /dev/null
@@ -1 +0,0 @@
-e
diff --git a/testsuite/e5.ed b/testsuite/e5.ed
new file mode 100644
index 0000000..5c548be
--- /dev/null
+++ b/testsuite/e5.ed
@@ -0,0 +1,7 @@
+H
+e test.bin
+# modifying the last line of a binary file adds a newline
+$s/x/x/
+# but undo restores the line to its previous state
+u
+w out.o
diff --git a/testsuite/ascii.d b/testsuite/e5.r
index c866266..c866266 100644
--- a/testsuite/ascii.d
+++ b/testsuite/e5.r
Binary files differ
diff --git a/testsuite/f1.err b/testsuite/f1.err
index e60975a..00c37e2 100644
--- a/testsuite/f1.err
+++ b/testsuite/f1.err
@@ -1 +1,3 @@
-.f f1.err
+H
+.f test.bin
+w out.ro
diff --git a/testsuite/f1.pr b/testsuite/f1.pr
deleted file mode 100644
index e60975a..0000000
--- a/testsuite/f1.pr
+++ /dev/null
@@ -1 +0,0 @@
-.f f1.err
diff --git a/testsuite/f2.err b/testsuite/f2.err
index 26d1c5e..b35cc86 100644
--- a/testsuite/f2.err
+++ b/testsuite/f2.err
@@ -1 +1,3 @@
-ff1.err
+H
+ftest.bin
+w out.ro
diff --git a/testsuite/f2.pr b/testsuite/f2.pr
deleted file mode 100644
index 26d1c5e..0000000
--- a/testsuite/f2.pr
+++ /dev/null
@@ -1 +0,0 @@
-ff1.err
diff --git a/testsuite/g.ed b/testsuite/g.ed
new file mode 100644
index 0000000..eefe72f
--- /dev/null
+++ b/testsuite/g.ed
@@ -0,0 +1,32 @@
+H
+g/./m0
+g//a\
+hello world
+# lines beginning with a `#' should be ignored
+g/hello /# including in global commands \
+s/lo/p!/\
+a\
+order\
+.\
+# and in the command list \
+i\
+caos\
+.\
+-1s/l/L
+u
+u
+17,33g/[A-I]/-1d\
++1c\
+hello world\
+.\
+47
+;d
+# don't change current address if no match
+g/xxx/1d
+;j
+g/heLp! world//caos/d\
+-;/order/;d
+# to be undone
+g/./s//x/g
+u
+w out.o
diff --git a/testsuite/g.r b/testsuite/g.r
new file mode 100644
index 0000000..a50255d
--- /dev/null
+++ b/testsuite/g.r
@@ -0,0 +1,28 @@
+their families.
+heLp! world
+no anxiety about providing the means of subsistence for themselves and
+heLp! world
+which should live in ease, happiness, and comparative leisure; and feel
+heLp! world
+decisive against the possible existence of a society, all the members of
+heLp! world
+of it even for a single century. And it appears, therefore, to be
+hello world
+caos
+agrarian regulations in their utmost extent, could remove the pressure
+heLp! world
+of this law which pervades all animated nature. No fancied equality, no
+heLp! world
+comparison of this. I see no way by which man can escape from the weight
+hello world
+caos
+All other arguments are of slight and subordinate consideration in
+hello world
+caos
+me appears insurmountable in the way to the perfectibility of society.
+heLp! world
+constantly keep their effects equal, form the great difficulty that to
+heLp! world
+production in the earth, and that great law of our nature which must
+heLp! world
+This natural inequality of the two powers of population and of
diff --git a/testsuite/g1.d b/testsuite/g1.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/g1.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/g1.err b/testsuite/g1.err
index f95ea22..70da494 100644
--- a/testsuite/g1.err
+++ b/testsuite/g1.err
@@ -1 +1,3 @@
-g/./s //x/
+H
+g
+w out.ro
diff --git a/testsuite/g1.pr b/testsuite/g1.pr
deleted file mode 100644
index f95ea22..0000000
--- a/testsuite/g1.pr
+++ /dev/null
@@ -1 +0,0 @@
-g/./s //x/
diff --git a/testsuite/g1.r b/testsuite/g1.r
deleted file mode 100644
index 9185f3a..0000000
--- a/testsuite/g1.r
+++ /dev/null
@@ -1,20 +0,0 @@
-line5
-help! world
-caos
-order
-line 4
-help! world
-caos
-order
-line 3
-help! world
-caos
-order
-line 2
-help! world
-caos
-order
-line 1
-help! world
-caos
-order
diff --git a/testsuite/g1.t b/testsuite/g1.t
deleted file mode 100644
index 8523db1..0000000
--- a/testsuite/g1.t
+++ /dev/null
@@ -1,9 +0,0 @@
-g/./m0
-g/./s/$/\
-hello world
-g/hello /s/lo/p!/\
-a\
-order\
-.\
-i\
-caos
diff --git a/testsuite/g2.d b/testsuite/g2.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/g2.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/g2.err b/testsuite/g2.err
index 0ff6a5a..698103d 100644
--- a/testsuite/g2.err
+++ b/testsuite/g2.err
@@ -1 +1,3 @@
-g//s/./x/
+H
+g//d
+w out.ro
diff --git a/testsuite/g2.pr b/testsuite/g2.pr
deleted file mode 100644
index 0ff6a5a..0000000
--- a/testsuite/g2.pr
+++ /dev/null
@@ -1 +0,0 @@
-g//s/./x/
diff --git a/testsuite/g2.r b/testsuite/g2.r
deleted file mode 100644
index 3b18e51..0000000
--- a/testsuite/g2.r
+++ /dev/null
@@ -1 +0,0 @@
-hello world
diff --git a/testsuite/g2.t b/testsuite/g2.t
deleted file mode 100644
index 831ee83..0000000
--- a/testsuite/g2.t
+++ /dev/null
@@ -1,2 +0,0 @@
-g/[2-4]/-1,+1c\
-hello world
diff --git a/testsuite/g3.d b/testsuite/g3.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/g3.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/g3.err b/testsuite/g3.err
index 01058d8..2f5ca12 100644
--- a/testsuite/g3.err
+++ b/testsuite/g3.err
@@ -1 +1,3 @@
-g
+H
+g/./s //x/
+w out.ro
diff --git a/testsuite/g3.pr b/testsuite/g3.pr
deleted file mode 100644
index 01058d8..0000000
--- a/testsuite/g3.pr
+++ /dev/null
@@ -1 +0,0 @@
-g
diff --git a/testsuite/g3.r b/testsuite/g3.r
deleted file mode 100644
index cc6fbdd..0000000
--- a/testsuite/g3.r
+++ /dev/null
@@ -1,5 +0,0 @@
-linc 3
-xine 1
-xine 2
-xinc 4
-xinc5
diff --git a/testsuite/g3.t b/testsuite/g3.t
deleted file mode 100644
index 2d052a6..0000000
--- a/testsuite/g3.t
+++ /dev/null
@@ -1,4 +0,0 @@
-g/./s//x/\
-3m0
-g/./s/e/c/\
-2,3m1
diff --git a/testsuite/g4.d b/testsuite/g4.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/g4.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/g4.err b/testsuite/g4.err
new file mode 100644
index 0000000..8797183
--- /dev/null
+++ b/testsuite/g4.err
@@ -0,0 +1,7 @@
+H
+# newlines in replacement are ambiguous; last delimiter can't be omitted
+g/./s/y/y\
+f text.bin
+# the previous s command should not set replacement
+s/./%/
+w out.ro
diff --git a/testsuite/g4.r b/testsuite/g4.r
deleted file mode 100644
index 350882d..0000000
--- a/testsuite/g4.r
+++ /dev/null
@@ -1,7 +0,0 @@
-hello
-zine 1
-line 2
-line 3
-line 4
-line5
-world
diff --git a/testsuite/g4.t b/testsuite/g4.t
deleted file mode 100644
index ec61816..0000000
--- a/testsuite/g4.t
+++ /dev/null
@@ -1,13 +0,0 @@
-g/./s/./x/\
-u\
-s/./y/\
-u\
-s/./z/\
-u
-u
-0a
-hello
-.
-$a
-world
-.
diff --git a/testsuite/g5.d b/testsuite/g5.d
deleted file mode 100644
index a92d664..0000000
--- a/testsuite/g5.d
+++ /dev/null
@@ -1,3 +0,0 @@
-line 1
-line 2
-line 3
diff --git a/testsuite/g5.r b/testsuite/g5.r
deleted file mode 100644
index 15a2675..0000000
--- a/testsuite/g5.r
+++ /dev/null
@@ -1,9 +0,0 @@
-line 1
-line 2
-line 3
-line 2
-line 3
-line 1
-line 3
-line 1
-line 2
diff --git a/testsuite/g5.t b/testsuite/g5.t
deleted file mode 100644
index e213481..0000000
--- a/testsuite/g5.t
+++ /dev/null
@@ -1,2 +0,0 @@
-g/./1,3t$\
-1d
diff --git a/testsuite/h.err b/testsuite/h.err
index a71e506..02c6d23 100644
--- a/testsuite/h.err
+++ b/testsuite/h.err
@@ -1 +1,3 @@
+H
.h
+w out.ro
diff --git a/testsuite/h.pr b/testsuite/h.pr
deleted file mode 100644
index a71e506..0000000
--- a/testsuite/h.pr
+++ /dev/null
@@ -1 +0,0 @@
-.h
diff --git a/testsuite/i.d b/testsuite/i.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/i.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/i.ed b/testsuite/i.ed
new file mode 100644
index 0000000..579c0ff
--- /dev/null
+++ b/testsuite/i.ed
@@ -0,0 +1,37 @@
+H
+# empty insert at address 0 should set the current address to 0
+0i
+.
++4i
+# this is not a comment
+.
+# empty insert at current address should not modify the current address
+i
+.
+i
+hello world!
+.
+i
+hello world!!
+.
+0i
+hello world!!!
+.
+i
+
+second line
+
+.
+$i
+hello world!!!!
+.
+u
+u
+i
+hello world!!!!!
+.
+i
+to be undone
+.
+u
+w out.o
diff --git a/testsuite/i.err b/testsuite/i.err
index b63f5ac..47073f6 100644
--- a/testsuite/i.err
+++ b/testsuite/i.err
@@ -1,3 +1,5 @@
+H
ii
hello world
.
+w out.ro
diff --git a/testsuite/i.pr b/testsuite/i.pr
deleted file mode 100644
index b63f5ac..0000000
--- a/testsuite/i.pr
+++ /dev/null
@@ -1,3 +0,0 @@
-ii
-hello world
-.
diff --git a/testsuite/i.r b/testsuite/i.r
index 5f27af0..e1a20ba 100644
--- a/testsuite/i.r
+++ b/testsuite/i.r
@@ -1,8 +1,22 @@
-hello world
-hello world!
-line 1
-line 2
-line 3
-line 4
+
+second line
+
+hello world!!!
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
hello world!!
-line5
+hello world!
+# this is not a comment
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+hello world!!!!!
+hello world!!!!
+their families.
diff --git a/testsuite/i.t b/testsuite/i.t
deleted file mode 100644
index 6de2233..0000000
--- a/testsuite/i.t
+++ /dev/null
@@ -1,9 +0,0 @@
-0i
-hello world
-.
-2i
-hello world!
-.
-$i
-hello world!!
-.
diff --git a/testsuite/j.d b/testsuite/j.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/j.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/j.ed b/testsuite/j.ed
new file mode 100644
index 0000000..4827cb5
--- /dev/null
+++ b/testsuite/j.ed
@@ -0,0 +1,14 @@
+H
+2,3j
+j
+7
+u
+u
+3j
+j
+3,3j
+j
+# to be undone
+1,$j
+u
+w out.o
diff --git a/testsuite/j.r b/testsuite/j.r
index 66f36a8..5eef11c 100644
--- a/testsuite/j.r
+++ b/testsuite/j.r
@@ -1,4 +1,9 @@
-line 1
-line 2line 3
-line 4
-line5
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which mustconstantly keep their effects equal, form the great difficulty that tome appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to bedecisive against the possible existence of a society, all the members ofwhich should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
diff --git a/testsuite/j.t b/testsuite/j.t
deleted file mode 100644
index 9b5d28d..0000000
--- a/testsuite/j.t
+++ /dev/null
@@ -1,2 +0,0 @@
-1,1j
-2,3j
diff --git a/testsuite/k.d b/testsuite/k.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/k.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/k.ed b/testsuite/k.ed
new file mode 100644
index 0000000..493759e
--- /dev/null
+++ b/testsuite/k.ed
@@ -0,0 +1,12 @@
+H
+7l
+2ka
+4kb
+9kc
+13kd
+i
+hello world
+.
+'a,'bd
+'c,'dd
+w out.o
diff --git a/testsuite/k.r b/testsuite/k.r
index eeb38db..ab1a79e 100644
--- a/testsuite/k.r
+++ b/testsuite/k.r
@@ -1,5 +1,6 @@
-line 3
+This natural inequality of the two powers of population and of
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
hello world
-line 4
-line5
-line 2
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
diff --git a/testsuite/k.t b/testsuite/k.t
deleted file mode 100644
index 53d588d..0000000
--- a/testsuite/k.t
+++ /dev/null
@@ -1,10 +0,0 @@
-2ka
-1d
-'am$
-1ka
-0a
-hello world
-.
-'ad
-u
-'am0
diff --git a/testsuite/k4.err b/testsuite/k1.err
index 3457642..bde56ce 100644
--- a/testsuite/k4.err
+++ b/testsuite/k1.err
@@ -1,6 +1,8 @@
+H
a
hello
.
.ka
'ad
'ap
+w out.ro
diff --git a/testsuite/k2.err b/testsuite/k2.err
index b34a18d..dfca298 100644
--- a/testsuite/k2.err
+++ b/testsuite/k2.err
@@ -1 +1,3 @@
+H
kA
+w out.ro
diff --git a/testsuite/k2.pr b/testsuite/k2.pr
deleted file mode 100644
index b34a18d..0000000
--- a/testsuite/k2.pr
+++ /dev/null
@@ -1 +0,0 @@
-kA
diff --git a/testsuite/k3.err b/testsuite/k3.err
index 70190c4..f59619f 100644
--- a/testsuite/k3.err
+++ b/testsuite/k3.err
@@ -1 +1,3 @@
+H
0ka
+w out.ro
diff --git a/testsuite/k3.pr b/testsuite/k3.pr
deleted file mode 100644
index 70190c4..0000000
--- a/testsuite/k3.pr
+++ /dev/null
@@ -1 +0,0 @@
-0ka
diff --git a/testsuite/k4.pr b/testsuite/k4.pr
deleted file mode 100644
index 3457642..0000000
--- a/testsuite/k4.pr
+++ /dev/null
@@ -1,6 +0,0 @@
-a
-hello
-.
-.ka
-'ad
-'ap
diff --git a/testsuite/m.d b/testsuite/m.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/m.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/m.err b/testsuite/m.err
index 3aec4c3..a5260ec 100644
--- a/testsuite/m.err
+++ b/testsuite/m.err
@@ -1,4 +1,3 @@
-a
-hello world
-.
-1,$m1
+H
+1,$m5
+w out.ro
diff --git a/testsuite/m.pr b/testsuite/m.pr
deleted file mode 100644
index edbb96f..0000000
--- a/testsuite/m.pr
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-hello world
-.
-1,$m1
-hello world
diff --git a/testsuite/m.r b/testsuite/m.r
deleted file mode 100644
index 186cf54..0000000
--- a/testsuite/m.r
+++ /dev/null
@@ -1,5 +0,0 @@
-line5
-line 1
-line 2
-line 3
-line 4
diff --git a/testsuite/m.t b/testsuite/m.t
deleted file mode 100644
index c39c088..0000000
--- a/testsuite/m.t
+++ /dev/null
@@ -1,7 +0,0 @@
-1,2m$
-1,2m$
-1,2m$
-$m0
-$m0
-2,3m1
-2,3m3
diff --git a/testsuite/m_addr.ed b/testsuite/m_addr.ed
new file mode 100644
index 0000000..28c77e5
--- /dev/null
+++ b/testsuite/m_addr.ed
@@ -0,0 +1,20 @@
+H
+3 ---- 2,1 2 3m;,,;;
+-2,.m7
+. ++,+++m.
+-1,m.
+.-4m-2
+-2m-1
+1,2;3,4,$;5,6,7
+;.m0
+u
+u
++;m7
+-m-6
++1m+4
+-3m?all?
+/their/-m-2
+# to be undone
+,1m$
+u
+,w out.o
diff --git a/testsuite/m_addr.r b/testsuite/m_addr.r
new file mode 100644
index 0000000..5051d68
--- /dev/null
+++ b/testsuite/m_addr.r
@@ -0,0 +1,13 @@
+their families.
+no anxiety about providing the means of subsistence for themselves and
+which should live in ease, happiness, and comparative leisure; and feel
+decisive against the possible existence of a society, all the members of
+of it even for a single century. And it appears, therefore, to be
+agrarian regulations in their utmost extent, could remove the pressure
+of this law which pervades all animated nature. No fancied equality, no
+comparison of this. I see no way by which man can escape from the weight
+All other arguments are of slight and subordinate consideration in
+me appears insurmountable in the way to the perfectibility of society.
+constantly keep their effects equal, form the great difficulty that to
+production in the earth, and that great law of our nature which must
+This natural inequality of the two powers of population and of
diff --git a/testsuite/nl.err b/testsuite/nl.err
deleted file mode 100644
index 8949a85..0000000
--- a/testsuite/nl.err
+++ /dev/null
@@ -1 +0,0 @@
-,1
diff --git a/testsuite/nl.pr b/testsuite/nl.pr
deleted file mode 100644
index 8949a85..0000000
--- a/testsuite/nl.pr
+++ /dev/null
@@ -1 +0,0 @@
-,1
diff --git a/testsuite/nl1.d b/testsuite/nl1.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/nl1.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/nl1.r b/testsuite/nl1.r
deleted file mode 100644
index 9d8854c..0000000
--- a/testsuite/nl1.r
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-hello world
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/nl1.t b/testsuite/nl1.t
deleted file mode 100644
index ea192e9..0000000
--- a/testsuite/nl1.t
+++ /dev/null
@@ -1,8 +0,0 @@
-1
-
-
-0a
-
-
-hello world
-.
diff --git a/testsuite/nl2.d b/testsuite/nl2.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/nl2.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/nl2.r b/testsuite/nl2.r
deleted file mode 100644
index fe99e41..0000000
--- a/testsuite/nl2.r
+++ /dev/null
@@ -1,6 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
-hello world
diff --git a/testsuite/nl2.t b/testsuite/nl2.t
deleted file mode 100644
index 73fd27b..0000000
--- a/testsuite/nl2.t
+++ /dev/null
@@ -1,4 +0,0 @@
-a
-hello world
-.
-0;/./
diff --git a/testsuite/p1.err b/testsuite/p1.err
new file mode 100644
index 0000000..9791c80
--- /dev/null
+++ b/testsuite/p1.err
@@ -0,0 +1,3 @@
+H
+ppp
+w out.ro
diff --git a/testsuite/p2.err b/testsuite/p2.err
new file mode 100644
index 0000000..056c914
--- /dev/null
+++ b/testsuite/p2.err
@@ -0,0 +1,3 @@
+H
+.P
+w out.ro
diff --git a/testsuite/q.d b/testsuite/q.d
deleted file mode 100644
index e69de29..0000000
--- a/testsuite/q.d
+++ /dev/null
diff --git a/testsuite/q.ed b/testsuite/q.ed
new file mode 100644
index 0000000..eb98c7d
--- /dev/null
+++ b/testsuite/q.ed
@@ -0,0 +1,7 @@
+H
+w out.o
+a
+hello
+.
+Q
+w out.o
diff --git a/testsuite/q.err b/testsuite/q.err
deleted file mode 100644
index 0a7e178..0000000
--- a/testsuite/q.err
+++ /dev/null
@@ -1 +0,0 @@
-.q
diff --git a/testsuite/q.pr b/testsuite/q.pr
deleted file mode 100644
index 0a7e178..0000000
--- a/testsuite/q.pr
+++ /dev/null
@@ -1 +0,0 @@
-.q
diff --git a/testsuite/q.r b/testsuite/q.r
index e69de29..f707ae0 100644
--- a/testsuite/q.r
+++ b/testsuite/q.r
@@ -0,0 +1,13 @@
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
diff --git a/testsuite/q1.err b/testsuite/q1.err
new file mode 100644
index 0000000..dd1066f
--- /dev/null
+++ b/testsuite/q1.err
@@ -0,0 +1,3 @@
+H
+.q
+w out.ro
diff --git a/testsuite/q2.err b/testsuite/q2.err
new file mode 100644
index 0000000..ca2939e
--- /dev/null
+++ b/testsuite/q2.err
@@ -0,0 +1,3 @@
+H
+.Q
+w out.ro
diff --git a/testsuite/q.t b/testsuite/q3.err
index 123a2c8..fbe1aa8 100644
--- a/testsuite/q.t
+++ b/testsuite/q3.err
@@ -1,4 +1,5 @@
-w q.o
+H
+w out.ro
a
hello
.
diff --git a/testsuite/q4.err b/testsuite/q4.err
new file mode 100644
index 0000000..2510100
--- /dev/null
+++ b/testsuite/q4.err
@@ -0,0 +1,6 @@
+H
+w out.ro
+a
+hello
+.
+# EOF should behave as a 'q' command
diff --git a/testsuite/q5.err b/testsuite/q5.err
new file mode 100644
index 0000000..14d7aaa
--- /dev/null
+++ b/testsuite/q5.err
@@ -0,0 +1,7 @@
+H
+w out.ro
+a
+hello
+.
+# EOF in the middle of a command should behave as a 'q' command
+w out.ro \ No newline at end of file
diff --git a/testsuite/q6.err b/testsuite/q6.err
new file mode 100644
index 0000000..b99a455
--- /dev/null
+++ b/testsuite/q6.err
@@ -0,0 +1,4 @@
+H
+w out.ro
+a
+# EOF in input mode should behave as a 'q' command
diff --git a/testsuite/q7.err b/testsuite/q7.err
new file mode 100644
index 0000000..ca8da06
--- /dev/null
+++ b/testsuite/q7.err
@@ -0,0 +1,5 @@
+H
+w out.ro
+a
+hello
+# EOF in the middle of a line in input mode should behave as a 'q' command \ No newline at end of file
diff --git a/testsuite/q8.err b/testsuite/q8.err
new file mode 100644
index 0000000..8450355
--- /dev/null
+++ b/testsuite/q8.err
@@ -0,0 +1,7 @@
+H
+w out.ro
+a
+hello
+.
+w !wc
+q
diff --git a/testsuite/r.err b/testsuite/r.err
index 1c44fa3..b41bbd5 100644
--- a/testsuite/r.err
+++ b/testsuite/r.err
@@ -1 +1,3 @@
+H
r a-good-book
+w out.ro
diff --git a/testsuite/r.pr b/testsuite/r.pr
deleted file mode 100644
index 1c44fa3..0000000
--- a/testsuite/r.pr
+++ /dev/null
@@ -1 +0,0 @@
-r a-good-book
diff --git a/testsuite/r1.d b/testsuite/r1.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/r1.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/r1.ed b/testsuite/r1.ed
new file mode 100644
index 0000000..e63660d
--- /dev/null
+++ b/testsuite/r1.ed
@@ -0,0 +1,16 @@
+H
+7r test.bin
+u
+u
+.r
+# empty read at current address should not modify the current address
+.r zero
+f test.bin
+-7r
+0r !echo hello world
+1
+r !! %
+# to be undone
+r test.txt
+u
+w out.o
diff --git a/testsuite/r1.r b/testsuite/r1.r
index a3ff506..15718c6 100644
--- a/testsuite/r1.r
+++ b/testsuite/r1.r
Binary files differ
diff --git a/testsuite/r1.t b/testsuite/r1.t
deleted file mode 100644
index d787a92..0000000
--- a/testsuite/r1.t
+++ /dev/null
@@ -1,3 +0,0 @@
-1;r !echo hello world
-1
-r !echo hello world
diff --git a/testsuite/r2.d b/testsuite/r2.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/r2.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/r2.ed b/testsuite/r2.ed
new file mode 100644
index 0000000..0b7d20e
--- /dev/null
+++ b/testsuite/r2.ed
@@ -0,0 +1,4 @@
+H
+# appending a binary file does not add a newline
+r test.bin
+w out.o
diff --git a/testsuite/r2.r b/testsuite/r2.r
index ac152ba..7f3bdea 100644
--- a/testsuite/r2.r
+++ b/testsuite/r2.r
Binary files differ
diff --git a/testsuite/r2.t b/testsuite/r2.t
deleted file mode 100644
index 4286f42..0000000
--- a/testsuite/r2.t
+++ /dev/null
@@ -1 +0,0 @@
-r
diff --git a/testsuite/r3.d b/testsuite/r3.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/r3.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/r3.ed b/testsuite/r3.ed
new file mode 100644
index 0000000..2e67568
--- /dev/null
+++ b/testsuite/r3.ed
@@ -0,0 +1,6 @@
+H
+# appending a binary file does not add a newline
+r test.bin
+# but undo does not remove any newline already present
+u
+w out.o
diff --git a/testsuite/r3.r b/testsuite/r3.r
index 9a1567d..f707ae0 100644
--- a/testsuite/r3.r
+++ b/testsuite/r3.r
@@ -1,3 +1,13 @@
-r r3.ed
-1;/H/+d
-w r3.o
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
diff --git a/testsuite/r3.t b/testsuite/r3.t
deleted file mode 100644
index cdc206d..0000000
--- a/testsuite/r3.t
+++ /dev/null
@@ -1,2 +0,0 @@
-r r3.ed
-1;/H/+d
diff --git a/testsuite/s.ed b/testsuite/s.ed
new file mode 100644
index 0000000..a643f1e
--- /dev/null
+++ b/testsuite/s.ed
@@ -0,0 +1,58 @@
+H
+s/fam//
+s/il/%/
+s/ies/off\&%1spr\ing/
+1s/of/01/2
++10s/and/02/g
+# set current address to last modified line (6)
+,s/way/03
+u
+u
+s,man,04,1p
+10szallzf&z1
+-3s!no!%&%!
+9s'it'&05&'gp
+12s|of|%|p1
+s/\([^ ][^ ]*\)/(\1)/pg
+2s
+/4/sp
+/\(No\)/sr
+/\(.\)/sgpr
+,s&$&$&
+5s//%/lg
+,s%^%^%
+5i
+hello/[]world
+.
+s/[/]/ /
+s/[[:digit:][]/ /
+s/[]]/ /
+7s=\((03)\) =\1\
+=
+-1s($($(
+2s/a/1/l
+s/a/2/n
+s/a/3/p
+s/a/4/ln
+s/e/5/lp
+s/e/6/np
+s/e/7/lnp
+s/i/8
+s/u/%/
+s/u/%
+3s/ /_/lnp3
+s0e0103
+4sg
+6s5
+9sp
+10s
+11sg
+12sg
+,s/ (nature)/$\
+(nature)/
++12s/ (for)/$\
+(for)/
+# to be undone
+,s/./x/g
+u
+w out.o
diff --git a/testsuite/s.r b/testsuite/s.r
new file mode 100644
index 0000000..c2b20b9
--- /dev/null
+++ b/testsuite/s.r
@@ -0,0 +1,17 @@
+^This natural inequality of the two powers 01 population and of$
+^(prod8ct8on) (in) (th5) (61rth,) (2nd) (th3t) (gr74t) (law) (of) (o8r)$
+(nature) (which) (must)$
+^constantly keep th1ir_effects equal, form the great difficulty that to$
+^m1 app1ars insurmountabl1 in th1 03 to th1 p1rf1ctibility of soci1ty.$
+hello world
+^All other arguments are of slight and subordinate consid1ration in$$
+^(comparison) (of) (this.) (I) (see) (no) (03)$
+(by) (which) (04) (can) (escape) (from) (the) (weight)$
+^of this law which pervades all animated nature. (No) fanci1d equality, %no%$
+^(a)grarian regulations in their utmost extent, could r1move the pressure$
+^of it05it 1v1n for a singl1 c1ntury. And it05it app1ars, th1r1for1, to b1$
+^d1cisive against the possible existence of a society, fall the members of$
+^which should live in ease, happiness, 02 comparative leisure; 02 feel$
+^(no) (anxiety) (about) (providing) (the) (means) (of05of) (subsistence)$
+(for) (themselves) (and)$
+^their off&%1spring.$
diff --git a/testsuite/s01.err b/testsuite/s01.err
new file mode 100644
index 0000000..c0fc270
--- /dev/null
+++ b/testsuite/s01.err
@@ -0,0 +1,3 @@
+H
+s . x
+w out.ro
diff --git a/testsuite/s02.err b/testsuite/s02.err
new file mode 100644
index 0000000..7cb57da
--- /dev/null
+++ b/testsuite/s02.err
@@ -0,0 +1,3 @@
+H
+s/x*/a/g
+w out.ro
diff --git a/testsuite/s03.err b/testsuite/s03.err
new file mode 100644
index 0000000..9fee8b1
--- /dev/null
+++ b/testsuite/s03.err
@@ -0,0 +1,3 @@
+H
+s/[xyx/a/
+w out.ro
diff --git a/testsuite/s4.err b/testsuite/s04.err
index 35b609f..b920b16 100644
--- a/testsuite/s4.err
+++ b/testsuite/s04.err
@@ -1 +1,3 @@
+H
s/\a\b\c/xyz/
+w out.ro
diff --git a/testsuite/s05.err b/testsuite/s05.err
new file mode 100644
index 0000000..6eed8ca
--- /dev/null
+++ b/testsuite/s05.err
@@ -0,0 +1,3 @@
+H
+s//xyz/
+w out.ro
diff --git a/testsuite/s06.err b/testsuite/s06.err
new file mode 100644
index 0000000..45b338a
--- /dev/null
+++ b/testsuite/s06.err
@@ -0,0 +1,3 @@
+H
+s
+w out.ro
diff --git a/testsuite/s07.err b/testsuite/s07.err
new file mode 100644
index 0000000..fd86a9c
--- /dev/null
+++ b/testsuite/s07.err
@@ -0,0 +1,4 @@
+H
+/./
+sr
+w out.ro
diff --git a/testsuite/s8.err b/testsuite/s08.err
index 5665767..9b1e2f4 100644
--- a/testsuite/s8.err
+++ b/testsuite/s08.err
@@ -1,4 +1,3 @@
-a
-hello
-.
+H
s/[h[=]/x/
+w out.ro
diff --git a/testsuite/s9.err b/testsuite/s09.err
index 1ff16dd..a75b2c1 100644
--- a/testsuite/s9.err
+++ b/testsuite/s09.err
@@ -1,4 +1,3 @@
-a
-hello
-.
+H
s/[h[:]/x/
+w out.ro
diff --git a/testsuite/s1.d b/testsuite/s1.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/s1.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/s1.err b/testsuite/s1.err
deleted file mode 100644
index d7ca0cf..0000000
--- a/testsuite/s1.err
+++ /dev/null
@@ -1 +0,0 @@
-s . x
diff --git a/testsuite/s1.pr b/testsuite/s1.pr
deleted file mode 100644
index d7ca0cf..0000000
--- a/testsuite/s1.pr
+++ /dev/null
@@ -1 +0,0 @@
-s . x
diff --git a/testsuite/s1.r b/testsuite/s1.r
deleted file mode 100644
index 4eb0980..0000000
--- a/testsuite/s1.r
+++ /dev/null
@@ -1,5 +0,0 @@
-liene 1
-(liene) (2)
-(liene) (3)
-liene (4)
-(()liene5)
diff --git a/testsuite/s1.t b/testsuite/s1.t
deleted file mode 100644
index cca3dcc..0000000
--- a/testsuite/s1.t
+++ /dev/null
@@ -1,6 +0,0 @@
-s/\([^ ][^ ]*\)/(\1)/g
-2s
-/3/s
-/\(4\)/sr
-/\(.\)/srg
-,s/i/&e/
diff --git a/testsuite/s10.err b/testsuite/s10.err
index 0d8d83d..8069299 100644
--- a/testsuite/s10.err
+++ b/testsuite/s10.err
@@ -1,4 +1,3 @@
-a
-hello
-.
+H
s/[h[.]/x/
+w out.ro
diff --git a/testsuite/s10.pr b/testsuite/s10.pr
deleted file mode 100644
index 1304de1..0000000
--- a/testsuite/s10.pr
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-hello
-.
-s/[h[.]/x/
-hello
diff --git a/testsuite/s11.err b/testsuite/s11.err
new file mode 100644
index 0000000..3a3d913
--- /dev/null
+++ b/testsuite/s11.err
@@ -0,0 +1,8 @@
+H
+# Missing pattern delimiter must not alter RE nor REPLACEMENT
+s/i/1/g
+s/1/i/
+s/
+s/1
+s//%/g
+w out.ro
diff --git a/testsuite/s12.err b/testsuite/s12.err
new file mode 100644
index 0000000..90dee78
--- /dev/null
+++ b/testsuite/s12.err
@@ -0,0 +1,3 @@
+H
+s/./&/g3
+w out.ro
diff --git a/testsuite/s13.err b/testsuite/s13.err
new file mode 100644
index 0000000..82e3194
--- /dev/null
+++ b/testsuite/s13.err
@@ -0,0 +1,3 @@
+H
+s/./&/3g
+w out.ro
diff --git a/testsuite/s14.err b/testsuite/s14.err
new file mode 100644
index 0000000..18555c5
--- /dev/null
+++ b/testsuite/s14.err
@@ -0,0 +1,4 @@
+H
+s/./&/
+sg3
+w out.ro
diff --git a/testsuite/s15.err b/testsuite/s15.err
new file mode 100644
index 0000000..f4341a9
--- /dev/null
+++ b/testsuite/s15.err
@@ -0,0 +1,4 @@
+H
+s/./&/
+s3g
+w out.ro
diff --git a/testsuite/s16.err b/testsuite/s16.err
new file mode 100644
index 0000000..4f6fba7
--- /dev/null
+++ b/testsuite/s16.err
@@ -0,0 +1,3 @@
+H
+s3.3&3p
+w out.ro
diff --git a/testsuite/s17.err b/testsuite/s17.err
new file mode 100644
index 0000000..225e2a3
--- /dev/null
+++ b/testsuite/s17.err
@@ -0,0 +1,3 @@
+H
+sg.g&gp
+w out.ro
diff --git a/testsuite/s18.err b/testsuite/s18.err
new file mode 100644
index 0000000..5cb703d
--- /dev/null
+++ b/testsuite/s18.err
@@ -0,0 +1,3 @@
+H
+sr.r&rp
+w out.ro
diff --git a/testsuite/s19.err b/testsuite/s19.err
new file mode 100644
index 0000000..0dda461
--- /dev/null
+++ b/testsuite/s19.err
@@ -0,0 +1,3 @@
+H
+sp.p&p
+w out.ro
diff --git a/testsuite/s2.d b/testsuite/s2.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/s2.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/s2.err b/testsuite/s2.err
deleted file mode 100644
index b5c851d..0000000
--- a/testsuite/s2.err
+++ /dev/null
@@ -1,4 +0,0 @@
-a
-a
-.
-s/x*/a/g
diff --git a/testsuite/s2.pr b/testsuite/s2.pr
deleted file mode 100644
index 949ac99..0000000
--- a/testsuite/s2.pr
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-a
-.
-s/x*/a/g
-a
diff --git a/testsuite/s2.r b/testsuite/s2.r
deleted file mode 100644
index ca305c8..0000000
--- a/testsuite/s2.r
+++ /dev/null
@@ -1,5 +0,0 @@
-li(n)e 1
-i(n)e 200
-li(n)e 3
-li(n)e 4
-li(n)e500
diff --git a/testsuite/s2.t b/testsuite/s2.t
deleted file mode 100644
index f365849..0000000
--- a/testsuite/s2.t
+++ /dev/null
@@ -1,4 +0,0 @@
-,s/./(&)/3
-s/$/00
-2s//%/g
-s/^l
diff --git a/testsuite/s20.err b/testsuite/s20.err
new file mode 100644
index 0000000..f48b2ff
--- /dev/null
+++ b/testsuite/s20.err
@@ -0,0 +1,5 @@
+H
+$m7
+,s/xxx/yyy/
+.m$
+w out.ro
diff --git a/testsuite/s21.err b/testsuite/s21.err
new file mode 100644
index 0000000..c76c519
--- /dev/null
+++ b/testsuite/s21.err
@@ -0,0 +1,4 @@
+H
+w out.ro
+s/a/EOF in the middle of a replacement with newlines \
+should behave as a 'q' command \ No newline at end of file
diff --git a/testsuite/s3.d b/testsuite/s3.d
deleted file mode 100644
index e69de29..0000000
--- a/testsuite/s3.d
+++ /dev/null
diff --git a/testsuite/s3.err b/testsuite/s3.err
deleted file mode 100644
index d68c7d0..0000000
--- a/testsuite/s3.err
+++ /dev/null
@@ -1 +0,0 @@
-s/[xyx/a/
diff --git a/testsuite/s3.pr b/testsuite/s3.pr
deleted file mode 100644
index d68c7d0..0000000
--- a/testsuite/s3.pr
+++ /dev/null
@@ -1 +0,0 @@
-s/[xyx/a/
diff --git a/testsuite/s3.r b/testsuite/s3.r
deleted file mode 100644
index d6cada2..0000000
--- a/testsuite/s3.r
+++ /dev/null
@@ -1 +0,0 @@
-hello world
diff --git a/testsuite/s3.t b/testsuite/s3.t
deleted file mode 100644
index fbf8803..0000000
--- a/testsuite/s3.t
+++ /dev/null
@@ -1,6 +0,0 @@
-a
-hello/[]world
-.
-s/[/]/ /
-s/[[:digit:][]/ /
-s/[]]/ /
diff --git a/testsuite/s4.pr b/testsuite/s4.pr
deleted file mode 100644
index 35b609f..0000000
--- a/testsuite/s4.pr
+++ /dev/null
@@ -1 +0,0 @@
-s/\a\b\c/xyz/
diff --git a/testsuite/s5.err b/testsuite/s5.err
deleted file mode 100644
index 89104c5..0000000
--- a/testsuite/s5.err
+++ /dev/null
@@ -1 +0,0 @@
-s//xyz/
diff --git a/testsuite/s5.pr b/testsuite/s5.pr
deleted file mode 100644
index 89104c5..0000000
--- a/testsuite/s5.pr
+++ /dev/null
@@ -1 +0,0 @@
-s//xyz/
diff --git a/testsuite/s6.err b/testsuite/s6.err
deleted file mode 100644
index b478595..0000000
--- a/testsuite/s6.err
+++ /dev/null
@@ -1 +0,0 @@
-s
diff --git a/testsuite/s6.pr b/testsuite/s6.pr
deleted file mode 100644
index b478595..0000000
--- a/testsuite/s6.pr
+++ /dev/null
@@ -1 +0,0 @@
-s
diff --git a/testsuite/s7.err b/testsuite/s7.err
deleted file mode 100644
index 30ba4fd..0000000
--- a/testsuite/s7.err
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-hello world
-.
-/./
-sr
diff --git a/testsuite/s7.pr b/testsuite/s7.pr
deleted file mode 100644
index 47a94c3..0000000
--- a/testsuite/s7.pr
+++ /dev/null
@@ -1,6 +0,0 @@
-a
-hello world
-.
-/./
-sr
-hello world
diff --git a/testsuite/s8.pr b/testsuite/s8.pr
deleted file mode 100644
index ec6a965..0000000
--- a/testsuite/s8.pr
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-hello
-.
-s/[h[=]/x/
-hello
diff --git a/testsuite/s9.pr b/testsuite/s9.pr
deleted file mode 100644
index f22b3b3..0000000
--- a/testsuite/s9.pr
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-hello
-.
-s/[h[:]/x/
-hello
diff --git a/testsuite/t.d b/testsuite/t.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/t.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/t.ed b/testsuite/t.ed
new file mode 100644
index 0000000..3399b45
--- /dev/null
+++ b/testsuite/t.ed
@@ -0,0 +1,11 @@
+H
+1t0
+2,3t2
+,t$
+u
+u
+t0;/./
+# to be undone
+,t0
+u
+w out.o
diff --git a/testsuite/t.r b/testsuite/t.r
index b7e0a71..b90a437 100644
--- a/testsuite/t.r
+++ b/testsuite/t.r
@@ -1,17 +1,33 @@
-line 1
-line5
-line 1
-line 1
-line 2
-line 2
-line 3
-line 4
-line5
-line 1
-line 1
-line 1
-line 2
-line 2
-line 3
-line 4
-line5
+This natural inequality of the two powers of population and of
+their families.
+This natural inequality of the two powers of population and of
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
+This natural inequality of the two powers of population and of
+This natural inequality of the two powers of population and of
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
diff --git a/testsuite/t.t b/testsuite/t.t
deleted file mode 100644
index bb42163..0000000
--- a/testsuite/t.t
+++ /dev/null
@@ -1,4 +0,0 @@
-1t0
-2,3t2
-,t$
-t0;/./
diff --git a/testsuite/t1.err b/testsuite/t1.err
index c49c556..02a9033 100644
--- a/testsuite/t1.err
+++ b/testsuite/t1.err
@@ -1 +1,3 @@
+H
tt
+w out.ro
diff --git a/testsuite/t1.pr b/testsuite/t1.pr
deleted file mode 100644
index c49c556..0000000
--- a/testsuite/t1.pr
+++ /dev/null
@@ -1 +0,0 @@
-tt
diff --git a/testsuite/t2.err b/testsuite/t2.err
index c202051..fdd99ba 100644
--- a/testsuite/t2.err
+++ b/testsuite/t2.err
@@ -1 +1,3 @@
+H
t0;-1
+w out.ro
diff --git a/testsuite/t2.pr b/testsuite/t2.pr
deleted file mode 100644
index c202051..0000000
--- a/testsuite/t2.pr
+++ /dev/null
@@ -1 +0,0 @@
-t0;-1
diff --git a/testsuite/ascii.r b/testsuite/test.bin
index c866266..c866266 100644
--- a/testsuite/ascii.r
+++ b/testsuite/test.bin
Binary files differ
diff --git a/testsuite/test.txt b/testsuite/test.txt
new file mode 100644
index 0000000..f707ae0
--- /dev/null
+++ b/testsuite/test.txt
@@ -0,0 +1,13 @@
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
diff --git a/testsuite/u.d b/testsuite/u.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/u.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/u.err b/testsuite/u.err
index caa1ba1..205f56c 100644
--- a/testsuite/u.err
+++ b/testsuite/u.err
@@ -1 +1,3 @@
+H
.u
+w out.ro
diff --git a/testsuite/u.pr b/testsuite/u.pr
deleted file mode 100644
index caa1ba1..0000000
--- a/testsuite/u.pr
+++ /dev/null
@@ -1 +0,0 @@
-.u
diff --git a/testsuite/u.r b/testsuite/u.r
deleted file mode 100644
index ad558d8..0000000
--- a/testsuite/u.r
+++ /dev/null
@@ -1,9 +0,0 @@
-line 1
-hello
-hello world!!
-line 2
-line 3
-line 4
-line5
-hello
-hello world!!
diff --git a/testsuite/u.t b/testsuite/u.t
deleted file mode 100644
index 1b9eb15..0000000
--- a/testsuite/u.t
+++ /dev/null
@@ -1,31 +0,0 @@
-1;r ascii.o
-u
-a
-hello
-world
-.
-g/./s//x/\
-a\
-hello\
-world
-u
-u
-u
-a
-hello world!
-.
-u
-1,$d
-u
-2,3d
-u
-c
-hello world!!
-.
-u
-u
--1;.,+1j
-u
-u
-u
-.,+1t$
diff --git a/testsuite/v.d b/testsuite/v.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/v.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/v.ed b/testsuite/v.ed
new file mode 100644
index 0000000..023b7eb
--- /dev/null
+++ b/testsuite/v.ed
@@ -0,0 +1,13 @@
+H
+v/[w]/m0
+u
+u
+v/o/a\
+hello world
+v/hello /s/lo/p!/\
+a\
+order
+# to be undone
+v/z/s/./x/g
+u
+w out.o
diff --git a/testsuite/v.r b/testsuite/v.r
index 714db63..840aa7c 100644
--- a/testsuite/v.r
+++ b/testsuite/v.r
@@ -1,11 +1,27 @@
-line5
+their families.
order
hello world
-line 1
+no anxiety about providing the means of subsistence for themselves and
order
-line 2
+decisive against the possible existence of a society, all the members of
order
-line 3
+of it even for a single century. And it appears, therefore, to be
order
-line 4
+agrarian regulations in their utmost extent, could remove the pressure
+order
+All other arguments are of slight and subordinate consideration in
+order
+constantly keep their effects equal, form the great difficulty that to
+order
+This natural inequality of the two powers of population and of
+order
+production in the earth, and that great law of our nature which must
+order
+me appears insurmountable in the way to the perfectibility of society.
+order
+comparison of this. I see no way by which man can escape from the weight
+order
+of this law which pervades all animated nature. No fancied equality, no
+order
+which should live in ease, happiness, and comparative leisure; and feel
order
diff --git a/testsuite/v.t b/testsuite/v.t
deleted file mode 100644
index 608a77f..0000000
--- a/testsuite/v.t
+++ /dev/null
@@ -1,6 +0,0 @@
-v/[ ]/m0
-v/[ ]/s/$/\
-hello world
-v/hello /s/lo/p!/\
-a\
-order
diff --git a/testsuite/w.d b/testsuite/w.d
deleted file mode 100644
index 92f337e..0000000
--- a/testsuite/w.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line5
diff --git a/testsuite/w.ed b/testsuite/w.ed
new file mode 100644
index 0000000..ce32199
--- /dev/null
+++ b/testsuite/w.ed
@@ -0,0 +1,7 @@
+H
+5w \!.z
+6W ./!.z
+0r !cat < ./!.z
+r \!.z
+!rm -f ./!.z
+wq out.o
diff --git a/testsuite/w.r b/testsuite/w.r
index ac152ba..9157ecb 100644
--- a/testsuite/w.r
+++ b/testsuite/w.r
@@ -1,10 +1,17 @@
-line 1
-line 2
-line 3
-line 4
-line5
-line 1
-line 2
-line 3
-line 4
-line5
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
diff --git a/testsuite/w.t b/testsuite/w.t
deleted file mode 100644
index c2e18bd..0000000
--- a/testsuite/w.t
+++ /dev/null
@@ -1,2 +0,0 @@
-w !cat >\!.z
-r \!.z
diff --git a/testsuite/w1.err b/testsuite/w1.err
index e2c8a60..5185887 100644
--- a/testsuite/w1.err
+++ b/testsuite/w1.err
@@ -1 +1,3 @@
-w /to/some/far-away/place
+H
+w to/some/far-away/place
+w out.ro
diff --git a/testsuite/w1.pr b/testsuite/w1.pr
deleted file mode 100644
index e2c8a60..0000000
--- a/testsuite/w1.pr
+++ /dev/null
@@ -1 +0,0 @@
-w /to/some/far-away/place
diff --git a/testsuite/w2.err b/testsuite/w2.err
index 9daf89c..a55f36c 100644
--- a/testsuite/w2.err
+++ b/testsuite/w2.err
@@ -1 +1,3 @@
-ww.o
+H
+wbad_write
+w out.ro
diff --git a/testsuite/w2.pr b/testsuite/w2.pr
deleted file mode 100644
index 9daf89c..0000000
--- a/testsuite/w2.pr
+++ /dev/null
@@ -1 +0,0 @@
-ww.o
diff --git a/testsuite/w3.err b/testsuite/w3.err
index 39bbf4c..bd42097 100644
--- a/testsuite/w3.err
+++ b/testsuite/w3.err
@@ -1 +1,3 @@
-wqp w.o
+H
+wqp bad_write
+w out.ro
diff --git a/testsuite/w3.pr b/testsuite/w3.pr
deleted file mode 100644
index 39bbf4c..0000000
--- a/testsuite/w3.pr
+++ /dev/null
@@ -1 +0,0 @@
-wqp w.o
diff --git a/testsuite/x.d b/testsuite/x.d
deleted file mode 100644
index 94c99a3..0000000
--- a/testsuite/x.d
+++ /dev/null
@@ -1,5 +0,0 @@
-line 1
-line 2
-line 3
-line 4
-line 5
diff --git a/testsuite/x.ed b/testsuite/x.ed
new file mode 100644
index 0000000..8c1349c
--- /dev/null
+++ b/testsuite/x.ed
@@ -0,0 +1,17 @@
+H
+2,4y
+$x
+3x
+u
+u
+,y
+8y
+$x
+16
+y
+x
+# to be undone
+,y
+x
+u
+w out.o
diff --git a/testsuite/x.err b/testsuite/x.err
index 898398e..c75f849 100644
--- a/testsuite/x.err
+++ b/testsuite/x.err
@@ -1,10 +1,3 @@
-2,3y
-$x
-0x
-,y
-$x
-2
-y
-x
-E addr1.ro
+H
x
+w out.ro
diff --git a/testsuite/x.pr b/testsuite/x.pr
deleted file mode 100644
index 29d6383..0000000
--- a/testsuite/x.pr
+++ /dev/null
@@ -1 +0,0 @@
-100
diff --git a/testsuite/x.r b/testsuite/x.r
index 7b8b7c0..89cbcb0 100644
--- a/testsuite/x.r
+++ b/testsuite/x.r
@@ -1,19 +1,21 @@
-line 2
-line 3
-line 3
-line 1
-line 2
-line 3
-line 4
-line 5
-line 2
-line 3
-line 2
-line 3
-line 1
-line 2
-line 3
-line 4
-line 5
-line 2
-line 3
+This natural inequality of the two powers of population and of
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
+comparison of this. I see no way by which man can escape from the weight
+of this law which pervades all animated nature. No fancied equality, no
+agrarian regulations in their utmost extent, could remove the pressure
+of it even for a single century. And it appears, therefore, to be
+decisive against the possible existence of a society, all the members of
+which should live in ease, happiness, and comparative leisure; and feel
+no anxiety about providing the means of subsistence for themselves and
+their families.
+their families.
+production in the earth, and that great law of our nature which must
+constantly keep their effects equal, form the great difficulty that to
+me appears insurmountable in the way to the perfectibility of society.
+All other arguments are of slight and subordinate consideration in
diff --git a/testsuite/x.t b/testsuite/x.t
deleted file mode 100644
index 0e868b8..0000000
--- a/testsuite/x.t
+++ /dev/null
@@ -1,8 +0,0 @@
-2,3y
-$x
-0x
-,y
-$x
-2
-y
-x
diff --git a/testsuite/z.err b/testsuite/z.err
index 6a51a2d..fe297c0 100644
--- a/testsuite/z.err
+++ b/testsuite/z.err
@@ -1,2 +1,4 @@
+H
+$z
z
-z
+w out.ro
diff --git a/testsuite/z.pr b/testsuite/z.pr
deleted file mode 100644
index 6a51a2d..0000000
--- a/testsuite/z.pr
+++ /dev/null
@@ -1,2 +0,0 @@
-z
-z