shithub: kwa

Download patch

ref: 96c2be96e4beaac08d89af4dea8069d9ca1c4b09
parent: 29b26011fca45785f0cfd9511b5fdcd131248e15
author: qwx <qwx@sciops.net>
date: Thu Sep 25 11:38:17 EDT 2025

test: add T.split

--- /dev/null
+++ b/test/T.split
@@ -1,0 +1,209 @@
+#!/bin/rc
+echo T.split: misc tests of field splitting and split command
+
+TEMP0=foo0
+TEMP1=foo1
+TEMP2=foo2
+
+$awk 'BEGIN {
+	# Assign string to $0, then change FS.
+	FS = ":"
+	$0="a:bc:def"
+	FS = "-"
+	print FS, $1, NF
+
+	# Assign number to $0, then change FS.
+	FS = "2"
+	$0=1212121
+	FS="3"
+	print FS, $1, NF
+}' > $TEMP1
+echo '- a 3
+3 1 4' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.1'
+
+$awk 'BEGIN {
+	# FS changes after getline.
+	FS = ":"
+	"echo a:bc:def" | getline
+	FS = "-"
+	print FS, $1, NF
+}' > $TEMP1
+echo '- a 3' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.2'
+
+echo '
+a
+a:b
+c:d:e
+e:f:g:h' > $TEMP0
+$awk 'BEGIN {
+	FS = ":"
+	while (getline <"'^$TEMP0^'" > 0) 
+		print NF
+}' > $TEMP1
+echo '0
+1
+2
+3
+4' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.3'
+
+# getline var shouldn't impact fields.
+
+echo 'f b a' > $TEMP0
+$awk '{
+	FS = ":"
+	getline a < "/lib/theo"
+	print $1
+}' $TEMP0 > $TEMP1
+echo 'f' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.4'
+
+echo 'a b c d
+foo
+e f g h i
+bar' > $TEMP0
+$awk '{
+	FS=":"
+	getline v
+	print $2, NF
+	FS=" "
+}' $TEMP0 > $TEMP1
+echo 'b 4
+f 5' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.5'
+
+echo 'a.b.c=d.e.f
+g.h.i=j.k.l
+m.n.o=p.q.r' > $TEMP0
+echo 'b
+h
+n' > $TEMP1
+$awk 'BEGIN { FS="=" } { FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split (record assignment 1)'
+
+echo 'a.b.c=d.e.f
+g.h.i=j.k.l
+m.n.o=p.q.r' > $TEMP0
+echo 'd.e.f
+b
+j.k.l
+h
+p.q.r
+n' > $TEMP1
+$awk 'BEGIN { FS="=" } { print $2; FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split (record assignment 2)'
+
+echo 'abc
+de
+f
+
+     ' > $TEMP0
+who | sed 10q  >> $TEMP0
+sed 10q /lib/theo >> $TEMP0
+
+$awk '
+{	n = split($0, x, "")
+	m = length($0)
+	if (m != n) print "error 1", NR
+	s = ""
+	for (i = 1; i <= m; i++)
+		s = s x[i]
+	if (s != $0) print "error 2", NR
+	print s
+}' $TEMP0 > $TEMP1
+
+diff $TEMP0 $TEMP1 || echo 'BAD: T.split 1'
+
+# assumes same test.temp.0!  bad design
+
+
+$awk '
+{	n = split($0, x, //)
+	m = length($0)
+	if (m != n) print "error 1", NR
+	s = ""
+	for (i = 1; i <= m; i++)
+		s = s x[i]
+	if (s != $0) print "error 2", NR
+	print s
+}' $TEMP0 > $TEMP1
+
+diff $TEMP0 $TEMP1 || echo 'BAD: T.split //'
+
+$awk '
+BEGIN { FS = "" }
+{	n = split($0, x)	# will be split with FS
+	m = length($0)
+	if (m != n) print "error 1", NR
+	s = ""
+	for (i = 1; i <= m; i++)
+		s = s x[i]
+	if (s != $0) print "error 2", NR
+	print s
+}' $TEMP0 > $TEMP2
+
+diff $TEMP0 $TEMP2 || echo 'BAD: T.split 2'
+
+# assumes same test.temp.0!
+
+$awk '
+BEGIN { FS = "" }
+{	n = NF
+	m = length($0)
+	if (m != n) print "error 1", NR
+	s = ""
+	for (i = 1; i <= m; i++)
+		s = s $i
+	if (s != $0) print "error 2", NR
+	print s
+}' $TEMP0 > $TEMP2
+
+diff $TEMP0 $TEMP2 || echo 'BAD: T.split 3'
+
+
+$awk '
+{ n = split( $0, temp, /^@@@ +/ )
+  print n
+}' > $TEMP1 <<XXX
+@@@ xxx
+@@@ xxx
+@@@ xxx
+XXX
+echo '2
+2
+2' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split 4'
+
+rm -f $TEMP1 $TEMP2 $TEMP3
+
+echo '
+a
+bc
+def' > $TEMP0
+$awk '
+{ print split($0, x, "")
+}' $TEMP0 > $TEMP1
+echo '0
+1
+2
+3' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split null 3rd arg'
+
+rm -f $TEMP1 $TEMP2 $TEMP3
+$awk 'BEGIN {
+  a[1]="a b"
+  print split(a[1],a),a[1],a[2]
+}' > $TEMP1
+
+echo '2 a b' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split(a[1],a)'
+
+$awk 'BEGIN {
+  a = "cat\n\n\ndog"
+  split(a, b, "[\r\n]+")
+  print b[1], b[2]
+}' > $TEMP1
+echo 'cat dog' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split(a, b, "[\r\n]+")'
--