[PATCH 2/3] [cmd] Add more tests for set /a

Ann and Jason Edmeades jason at edmeades.me.uk
Thu Dec 13 16:00:46 CST 2012


This adds a number of tests for corner conditions and to explain
behaviour, which I created whilst attempting to code an implementation
of set /a support. Almost all are todo wine, the ones that arent
pass by luck, and the or_broken mess is almost completely due to NT4
(one break on W2K).

[Full testbot run 23383 confirms these pass on all os levels]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20121213/9a213dde/attachment.html>
-------------- next part --------------
From d0e2902902162c13bae39c9adacf96435f3af0ce Mon Sep 17 00:00:00 2001
From: Jason Edmeades <jason at edmeades.me.uk>
Date: Thu, 13 Dec 2012 20:47:16 +0000
Subject: [PATCH 2/3] [cmd] Add more tests for set /a

This adds a number of tests for corner conditions and to explain
behaviour, which I created whilst attempting to code an implementation
of set /a support. Almost all are todo wine, the ones that arent
pass by luck, and the or_broken mess is almost completely due to NT4
(one break on W2K).

[Full testbot run 23383 confirms these pass on all os levels]
---
 programs/cmd/tests/test_builtins.cmd     |  134 ++++++++++++++++++++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   82 ++++++++++++++++++
 2 files changed, 216 insertions(+)

diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 6859311..b35122a 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1143,6 +1143,140 @@ set /a WINE_var1=WINE_var2=5, WINE_var2 ^|= 2 & call :check_vars 5 7
 set /a WINE_var1=WINE_var2=5, WINE_var2 ^^= 2 & call :check_vars 5 7
 set WINE_var3=4
 set /a WINE_var1=WINE_var2=19, WINE_var2 %%= 4 + (WINE_var3 %%= 7) & call :check_vars 19 3 4
+echo --- quotes
+set /a WINE_var1=1
+call :check_vars 1
+set /a "WINE_var1=1"
+call :check_vars 1
+set /a WINE_var1=1,WINE_var2=2
+call :check_vars 1 2
+set /a "WINE_var1=1,WINE_var2=2"
+call :check_vars 1 2
+set /a "WINE_var1=1","WINE_var2=2"
+call :check_vars 1 2
+set /a ""WINE_var1=1","WINE_var2=2""
+call :check_vars 1 2
+set /a WINE_var1=1,WINE_var2=2,WINE_var3=3
+call :check_vars 1 2 3
+set /a "WINE_var1=1,WINE_var2=2,WINE_var3=3"
+call :check_vars 1 2 3
+set /a "WINE_var1=1","WINE_var2=2","WINE_var3=3"
+call :check_vars 1 2 3
+set /a ""WINE_var1=1","WINE_var2=2","WINE_var3=3""
+call :check_vars 1 2 3
+set /a ""WINE_var1=1","WINE_var2=2"","WINE_var3=3"
+call :check_vars 1 2 3
+set /a """"""WINE_var1=1""""""
+call :check_vars 1
+set /a """"""WINE_var1=1","wine_var2=5""","wine_var3=2""
+call :check_vars 1 5 2
+set /a WINE_var1="3"+"4"+"5+6"
+call :check_vars 18
+set WINE_var1=3
+set /a WINE_var2="WINE_""var1"+4
+call :check_vars 3 7
+echo --- whitespace are ignored between double char operators
+set WINE_var1=4
+set WINE_var2=5
+set /a     WINE_var1   +    = 6
+set /a     WINE_var2     *    = WINE_var1
+call :check_vars 10 50
+set WINE_var1=4
+set WINE_var2=5
+set /a     WINE_var1   +    = "6  < < 7"
+set /a     WINE_var2     *    = WINE_var1  +  WINE_var1
+call :check_vars 772 7720
+set /a     WINE_var1=6 7
+set /a     WINE_ var1=8
+set WINE_var1=
+echo --- invalid operator sequence
+set WINE_var1=4
+set /a =4
+set /a *=4
+set /a ^>=4"
+set /a ^<=4"
+set /a WINE_var1^>^<=4
+echo %WINE_var1%
+set /a WINE_var1^>^>^>=4
+echo %WINE_var1%
+echo ----- negative prefix
+set /a WINE_var1=-1
+call :check_vars -1
+set /a WINE_var1=--1
+call :check_vars 1
+set /a WINE_var1=3--3
+call :check_vars 6
+set /a WINE_var1=3---3
+call :check_vars 0
+set /a WINE_var1=3----3
+call :check_vars 6
+set /a WINE_var1=-~1
+call :check_vars 2
+set /a WINE_var1=~-1
+call :check_vars 0
+set /a WINE_var1=3+-~1
+call :check_vars 5
+set /a WINE_var1=3+~-1
+call :check_vars 3
+echo ----- assignment tests involving the end destination
+set WINE_var1=3
+set /a WINE_var1+=3+(WINE_var1=4)
+set WINE_var1=2
+set /a WINE_var2=3+(WINE_var1=6)
+call :check_vars 6 9
+set WINE_var1=2
+set /a WINE_var2=3+(WINE_var1=6,WINE_var3=7)
+call :check_vars 6 10 7
+set WINE_var1=2
+set /a WINE_var2=WINE_var1=7
+call :check_vars 7 7
+echo ----- equal precedence on stack
+rem Unary - dont reduce if precedence is equal
+set /a WINE_var1=!!1
+call :check_vars 1
+set /a WINE_var1=!!0
+call :check_vars 0
+set /a WINE_var1=~~1
+call :check_vars 1
+set /a WINE_var1=~~0
+call :check_vars 0
+set /a WINE_var1=--1
+call :check_vars 1
+set /a WINE_var1=+-1
+call :check_vars -1
+set /a WINE_var1=-+1
+call :check_vars -1
+set /a WINE_var1=++1
+call :check_vars 1
+set /a WINE_var1=!~1
+call :check_vars 0
+set /a WINE_var1=~!1
+call :check_vars -1
+set /a WINE_var1=!-1
+call :check_vars 0
+set /a WINE_var1=-!1
+call :check_vars 0
+set /a WINE_var1=!-0
+call :check_vars 1
+set /a WINE_var1=-!0
+call :check_vars -1
+rem Aritmatic - Reduce if precedence is equal
+set /a WINE_var1=10*5/2
+call :check_vars 25
+set /a WINE_var1=5/2*10
+call :check_vars 20
+set /a WINE_var1=10/5/2
+call :check_vars 1
+set /a WINE_var1=5%%2*4
+call :check_vars 4
+set /a WINE_var1=10-5+2
+call :check_vars 7
+set /a WINE_var1=1^<^<4^>^>1
+call :check_vars 8
+rem Assignment - dont reduce if precedence is equal
+set /a WINE_var1=5
+set /a WINE_var2=WINE_var1=6
+call :check_vars 6 6
 
 echo --- for /F
 mkdir foobar & cd foobar
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index c0234a0..721266a 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -800,6 +800,88 @@ WINE_var2 correctly 4
 @todo_wine at WINE_var1 correctly 19 at or_broken@ERROR: WINE_var1 incorrectly 0 [19]
 @todo_wine at WINE_var2 correctly 3 at or_broken@ERROR: WINE_var2 incorrectly  [3]
 WINE_var3 correctly 19
+--- quotes
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 2
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var2 correctly 5
+ at todo_wine@WINE_var3 correctly 1
+ at todo_wine@WINE_var1 correctly 18
+WINE_var1 correctly 3
+ at todo_wine@WINE_var2 correctly 7 at or_broken@ERROR: WINE_var2 incorrectly 4 [7]
+--- whitespace are ignored between double char operators
+ at todo_wine@WINE_var1 correctly 10 at or_broken@ERROR: WINE_var1 incorrectly 4 [10]
+ at todo_wine@WINE_var2 correctly 50 at or_broken@ERROR: WINE_var2 incorrectly 5 [50]
+ at todo_wine@WINE_var1 correctly 772 at or_broken@ERROR: WINE_var1 incorrectly 4 [772]
+ at todo_wine@WINE_var2 correctly 7720 at or_broken@ERROR: WINE_var2 incorrectly 5 [7720]
+--- invalid operator sequence
+4
+4
+----- negative prefix
+ at todo_wine@WINE_var1 correctly -1
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly  [1]
+ at todo_wine@WINE_var1 correctly 6
+ at todo_wine@WINE_var1 correctly 0
+ at todo_wine@WINE_var1 correctly 6
+ at todo_wine@WINE_var1 correctly 2
+ at todo_wine@WINE_var1 correctly 0 at or_broken@ERROR: WINE_var1 incorrectly  [0]
+ at todo_wine@WINE_var1 correctly 5
+ at todo_wine@WINE_var1 correctly 3 at or_broken@ERROR: WINE_var1 incorrectly -5 [3]
+----- assignment tests involving the end destination
+ at todo_wine@WINE_var1 correctly 6 at or_broken@ERROR: WINE_var1 incorrectly 2 [6]
+ at todo_wine@WINE_var2 correctly 9 at or_broken@ERROR: WINE_var2 incorrectly  [9]
+ at todo_wine@WINE_var1 correctly 6 at or_broken@ERROR: WINE_var1 incorrectly 2 [6]
+ at todo_wine@WINE_var2 correctly 10 at or_broken@ERROR: WINE_var2 incorrectly  [10]
+ at todo_wine@WINE_var3 correctly 6 at or_broken@ERROR: WINE_var3 incorrectly  [7]
+ at todo_wine@WINE_var1 correctly 7 at or_broken@ERROR: WINE_var1 incorrectly 2 [7]
+ at todo_wine@WINE_var2 correctly 7 at or_broken@ERROR: WINE_var2 incorrectly 2 [7]
+----- equal precedence on stack
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly 0 [1]
+ at todo_wine@WINE_var1 correctly 0
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly  [1]
+ at todo_wine@WINE_var1 correctly 0 at or_broken@ERROR: WINE_var1 incorrectly  [0]
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly  [1]
+ at todo_wine@WINE_var1 correctly -1 at or_broken@ERROR: WINE_var1 incorrectly  [-1]
+ at todo_wine@WINE_var1 correctly -1 at or_broken@ERROR: WINE_var1 incorrectly  [-1]
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly  [1]
+ at todo_wine@WINE_var1 correctly 0 at or_broken@ERROR: WINE_var1 incorrectly  [0]
+ at todo_wine@WINE_var1 correctly -1
+ at todo_wine@WINE_var1 correctly 0 at or_broken@ERROR: WINE_var1 incorrectly -1 [0]
+ at todo_wine@WINE_var1 correctly 0
+ at todo_wine@WINE_var1 correctly 1 at or_broken@ERROR: WINE_var1 incorrectly 0 [1]
+ at todo_wine@WINE_var1 correctly -1 at or_broken@ERROR: WINE_var1 incorrectly 0 [-1]
+ at todo_wine@WINE_var1 correctly 25 at or_broken@ERROR: WINE_var1 incorrectly 20 [25]
+ at todo_wine@WINE_var1 correctly 20
+ at todo_wine@WINE_var1 correctly 1
+ at todo_wine@WINE_var1 correctly 4
+ at todo_wine@WINE_var1 correctly 7
+ at todo_wine@WINE_var1 correctly 8 at or_broken@ERROR: WINE_var1 incorrectly 4 [8]
+ at todo_wine@WINE_var1 correctly 6 at or_broken@ERROR: WINE_var1 incorrectly 5 [6]
+ at todo_wine@WINE_var2 correctly 6 at or_broken@ERROR: WINE_var2 incorrectly 5 [6]
 --- for /F
 ------ string argument
 a
-- 
1.7.9.5


More information about the wine-patches mailing list