Module Name:    src
Committed By:   kre
Date:           Mon Mar 20 11:32:51 UTC 2017

Modified Files:
        src/tests/bin/sh: t_arith.sh

Log Message:
Add tests for the $(( )) assignment operators  PR bin/50958


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/bin/sh/t_arith.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/bin/sh/t_arith.sh
diff -u src/tests/bin/sh/t_arith.sh:1.5 src/tests/bin/sh/t_arith.sh:1.6
--- src/tests/bin/sh/t_arith.sh:1.5	Thu May 12 14:25:11 2016
+++ src/tests/bin/sh/t_arith.sh	Mon Mar 20 11:32:51 2017
@@ -1,4 +1,4 @@
-# $NetBSD: t_arith.sh,v 1.5 2016/05/12 14:25:11 kre Exp $
+# $NetBSD: t_arith.sh,v 1.6 2017/03/20 11:32:51 kre Exp $
 #
 # Copyright (c) 2016 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -980,6 +980,63 @@ parentheses_body()
 		'echo $(( (0xfD & 0xF) == 0xF ))'
 }
 
+atf_test_case var_assign
+var_assign_head()
+{
+	atf_set "descr" "Test assignment operators in arithmetic expressions"
+}
+var_assign_body()
+{
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'unset x; echo $(( x = 3 )); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'unset x; echo $((x=3)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=5; echo $((x=3)); echo $x'
+
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'set +u;unset x; echo $((x+=3)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=2; echo $((x+=1)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=4; echo $((x-=1)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=3; echo $((x*=1)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=3; echo $((x/=1)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=28; echo $((x%=5)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=7; echo $((x&=3)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=2; echo $((x|=1)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=6; echo $((x^=5)); echo $x'
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'x=7; echo $((x>>=1)); echo $x'
+	atf_check -s exit:0 -o inline:'2\n2\n' -e empty ${TEST_SH} -c \
+		'x=1; echo $((x<<=1)); echo $x'
+
+	atf_check -s exit:0 -o inline:'2\n3\n' -e empty ${TEST_SH} -c \
+		'x=2; echo $(( (x+=1)-1 )); echo $x'
+	atf_check -s exit:0 -o inline:'4\n3\n' -e empty ${TEST_SH} -c \
+		'x=4; echo $(( (x-=1)+1 )); echo $x'
+
+	atf_check -s exit:0 -o inline:'36\n5 7\n' -e empty ${TEST_SH} -c \
+		'unset x y; echo $(( (x=5) * (y=7) + 1 )); echo $x $y'
+	atf_check -s exit:0 -o inline:'36\n5 7\n' -e empty ${TEST_SH} -c \
+		'x=99; y=17; echo $(( (x=5) * (y=7) + 1 )); echo $x $y'
+	atf_check -s exit:0 -o inline:'36\n5 7\n' -e empty ${TEST_SH} -c \
+		'x=4; y=9; echo $(( (x+=1) * (y-=2) + 1 )); echo $x $y'
+
+	atf_check -s exit:0 -o inline:'3\n3\n' -e empty ${TEST_SH} -c \
+		'set -u; unset x; echo $(( x = 3 )); echo $x'
+	atf_check -s not-exit:0 -o ignore -e not-empty ${TEST_SH} -c \
+		'set -u; unset x; echo $(( x + 3 )); echo $x'
+	atf_check -s not-exit:0 -o ignore -e not-empty ${TEST_SH} -c \
+		'set -u; unset x; echo $(( x+=3 )); echo $x'
+}
+
 atf_test_case arithmetic_fails
 arithmetic_fails_head()
 {
@@ -1030,6 +1087,6 @@ atf_init_test_cases() {
 	# atf_add_test_case progressive			# build up big expr
 	# atf_add_test_case test_errors			# erroneous input
 	# atf_add_test_case torture		# hard stuff (if there is any)
-	# atf_add_test_case var_assign			# assignment ops
+	atf_add_test_case var_assign			# assignment ops
 	# atf_add_test_case vulgarity	# truly evil inputs (syntax in vars...)
 }

Reply via email to