head	1.1;
branch	1.1.1;
access;
symbols
	netbsd-11-0-RC4:1.1.1.2
	NAWK20260426:1.1.1.2
	netbsd-11-0-RC3:1.1.1.2
	netbsd-11-0-RC2:1.1.1.2
	netbsd-11-0-RC1:1.1.1.2
	perseant-exfatfs-base-20250801:1.1.1.2
	netbsd-11:1.1.1.2.0.2
	netbsd-11-base:1.1.1.2
	netbsd-10-1-RELEASE:1.1.1.1
	NAWK20240817:1.1.1.2
	perseant-exfatfs-base-20240630:1.1.1.1
	perseant-exfatfs:1.1.1.1.0.12
	perseant-exfatfs-base:1.1.1.1
	netbsd-10-0-RELEASE:1.1.1.1
	netbsd-10-0-RC6:1.1.1.1
	netbsd-10-0-RC5:1.1.1.1
	netbsd-10-0-RC4:1.1.1.1
	netbsd-10-0-RC3:1.1.1.1
	netbsd-10-0-RC2:1.1.1.1
	netbsd-10-0-RC1:1.1.1.1
	netbsd-10:1.1.1.1.0.10
	netbsd-10-base:1.1.1.1
	cjep_sun2x-base1:1.1.1.1
	cjep_sun2x:1.1.1.1.0.8
	cjep_sun2x-base:1.1.1.1
	cjep_staticlib_x-base1:1.1.1.1
	cjep_staticlib_x:1.1.1.1.0.6
	cjep_staticlib_x-base:1.1.1.1
	phil-wifi-20200421:1.1.1.1
	phil-wifi:1.1.1.1.0.4
	phil-wifi-20200411:1.1.1.1
	is-mlppp:1.1.1.1.0.2
	is-mlppp-base:1.1.1.1
	phil-wifi-20200406:1.1.1.1
	NAWK20200218:1.1.1.1
	NAWK:1.1.1;
locks; strict;
comment	@# @;


1.1
date	2020.02.18.20.50.48;	author christos;	state Exp;
branches
	1.1.1.1;
next	;
commitid	1DQROEYOeROjmcXB;

1.1.1.1
date	2020.02.18.20.50.48;	author christos;	state Exp;
branches
	1.1.1.1.4.1
	1.1.1.1.12.1;
next	1.1.1.2;
commitid	1DQROEYOeROjmcXB;

1.1.1.2
date	2024.08.17.22.19.22;	author christos;	state Exp;
branches;
next	;
commitid	F6k4yChqfBas4emF;

1.1.1.1.4.1
date	2020.02.18.20.50.48;	author martin;	state dead;
branches;
next	1.1.1.1.4.2;
commitid	X01YhRUPVUDaec4C;

1.1.1.1.4.2
date	2020.04.13.08.02.18;	author martin;	state Exp;
branches;
next	;
commitid	X01YhRUPVUDaec4C;

1.1.1.1.12.1
date	2025.08.02.05.49.46;	author perseant;	state Exp;
branches;
next	;
commitid	23j6GFaDws3O875G;


desc
@@


1.1
log
@Initial revision
@
text
@#!/bin/sh

awk=${awk-../a.out}

WORKDIR=$(mktemp -d /tmp/nawktest.XXXXXX)

TEMP0=$WORKDIR/test.temp.0
TEMP1=$WORKDIR/test.temp.1
TEMP2=$WORKDIR/test.temp.2

RESULT=0

fail() {
	echo "$1" >&2
	RESULT=1
}

echo T.split: misc tests of field splitting and split command

$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 || fail '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 || fail '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 || fail 'BAD: T.split 0.3'

# getline var shouldn't impact fields.

echo 'f b a' > $TEMP0
$awk '{
	FS = ":"
	getline a < "/etc/passwd"
	print $1
}' $TEMP0 > $TEMP1
echo 'f' > $TEMP2
diff $TEMP1 $TEMP2 || fail '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 || fail '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 || fail '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 || fail 'BAD: T.split (record assignment 2)'

echo 'abc
de
f

     ' > $TEMP0
who | sed 10q  >> $TEMP0
sed 10q /etc/passwd >> $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 || fail '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 || fail '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 || fail '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 || fail '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 || fail 'BAD: T.split 4'

rm -f $WORKDIR/test.temp*

echo '
a
bc
def' > $TEMP0
$awk '
{ print split($0, x, "")
}' $TEMP0 > $TEMP1
echo '0
1
2
3' > $TEMP2
diff $TEMP1 $TEMP2 || fail 'BAD: T.split null 3rd arg'

rm -f $WORKDIR/test.temp*
$awk 'BEGIN {
  a[1]="a b"
  print split(a[1],a),a[1],a[2]
}' > $TEMP1

echo '2 a b' > $TEMP2
diff $TEMP1 $TEMP2 || fail '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 || fail 'BAD: T.split(a, b, "[\r\n]+")'


exit $RESULT
@


1.1.1.1
log
@Last import was 2010 when there was no ChangeLog yet. I've worked
with upstream to merge all our changes and this includes many other
fixes including new operator support etc. The change to pass an
extra "isnew" argument to open was not preserved as none of the
tests supplied with the PR fail.

This also adds the testsuite and all the bugs fixed since then.
@
text
@@


1.1.1.1.12.1
log
@Sync with HEAD
@
text
@a222 1
rm -rf $WORKDIR
@


1.1.1.2
log
@Import the current version of nawk from github.
Last was imported on 2020-02-18. The major change is utf8 handling.
@
text
@a222 1
rm -rf $WORKDIR
@


1.1.1.1.4.1
log
@file T.split was added on branch phil-wifi on 2020-04-13 08:02:18 +0000
@
text
@d1 224
@


1.1.1.1.4.2
log
@Mostly merge changes from HEAD upto 20200411
@
text
@a0 224
#!/bin/sh

awk=${awk-../a.out}

WORKDIR=$(mktemp -d /tmp/nawktest.XXXXXX)

TEMP0=$WORKDIR/test.temp.0
TEMP1=$WORKDIR/test.temp.1
TEMP2=$WORKDIR/test.temp.2

RESULT=0

fail() {
	echo "$1" >&2
	RESULT=1
}

echo T.split: misc tests of field splitting and split command

$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 || fail '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 || fail '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 || fail 'BAD: T.split 0.3'

# getline var shouldn't impact fields.

echo 'f b a' > $TEMP0
$awk '{
	FS = ":"
	getline a < "/etc/passwd"
	print $1
}' $TEMP0 > $TEMP1
echo 'f' > $TEMP2
diff $TEMP1 $TEMP2 || fail '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 || fail '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 || fail '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 || fail 'BAD: T.split (record assignment 2)'

echo 'abc
de
f

     ' > $TEMP0
who | sed 10q  >> $TEMP0
sed 10q /etc/passwd >> $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 || fail '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 || fail '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 || fail '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 || fail '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 || fail 'BAD: T.split 4'

rm -f $WORKDIR/test.temp*

echo '
a
bc
def' > $TEMP0
$awk '
{ print split($0, x, "")
}' $TEMP0 > $TEMP1
echo '0
1
2
3' > $TEMP2
diff $TEMP1 $TEMP2 || fail 'BAD: T.split null 3rd arg'

rm -f $WORKDIR/test.temp*
$awk 'BEGIN {
  a[1]="a b"
  print split(a[1],a),a[1],a[2]
}' > $TEMP1

echo '2 a b' > $TEMP2
diff $TEMP1 $TEMP2 || fail '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 || fail 'BAD: T.split(a, b, "[\r\n]+")'


exit $RESULT
@


