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

Ann and Jason Edmeades jason at edmeades.me.uk
Sun Dec 16 18:11:50 CST 2012


Resend#1 - Just rebased and using new function name for checking

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/20121217/fdf04a65/attachment-0001.html>
-------------- next part --------------
From 0672d95ae95542d60837f36f3abe301d401b9944 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] [resend] [cmd] Add more tests for set /a

Resend#1 - Just rebased and using new function name for checking

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     |  135 ++++++++++++++++++++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   83 ++++++++++++++++++
 2 files changed, 218 insertions(+)

diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 6cf2ecb..508691e 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1131,6 +1131,141 @@ set /a WINE_foo=WINE_bar=5, WINE_bar ^|= 2 & call :checkenvvars WINE_foo 5 WINE_
 set /a WINE_foo=WINE_bar=5, WINE_bar ^^= 2 & call :checkenvvars WINE_foo 5 WINE_bar 7
 set WINE_baz=4
 set /a WINE_foo=WINE_bar=19, WINE_bar %%= 4 + (WINE_baz %%= 7) & call :checkenvvars WINE_foo 19 WINE_bar 3 WINE_baz 4
+echo --- quotes
+set /a WINE_foo=1
+call :checkenvvars WINE_foo 1
+set /a "WINE_foo=1"
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=1,WINE_bar=2
+call :checkenvvars WINE_foo 1 WINE_bar 2
+set /a "WINE_foo=1,WINE_bar=2"
+call :checkenvvars WINE_foo 1 WINE_bar 2
+set /a "WINE_foo=1","WINE_bar=2"
+call :checkenvvars WINE_foo 1 WINE_bar 2
+set /a ""WINE_foo=1","WINE_bar=2""
+call :checkenvvars WINE_foo 1 WINE_bar 2
+set /a WINE_foo=1,WINE_bar=2,WINE_baz=3
+call :checkenvvars WINE_foo 1 WINE_bar 2 WINE_baz 3
+set /a "WINE_foo=1,WINE_bar=2,WINE_baz=3"
+call :checkenvvars WINE_foo 1 WINE_bar 2 WINE_baz 3
+set /a "WINE_foo=1","WINE_bar=2","WINE_baz=3"
+call :checkenvvars WINE_foo 1 WINE_bar 2 WINE_baz 3
+set /a ""WINE_foo=1","WINE_bar=2","WINE_baz=3""
+call :checkenvvars WINE_foo 1 WINE_bar 2 WINE_baz 3
+set /a ""WINE_foo=1","WINE_bar=2"","WINE_baz=3"
+call :checkenvvars WINE_foo 1 WINE_bar 2 WINE_baz 3
+set /a """"""WINE_foo=1""""""
+call :checkenvvars WINE_foo 1
+set /a """"""WINE_foo=1","WINE_bar=5""","WINE_baz=2""
+call :checkenvvars WINE_foo 1 WINE_bar 5 WINE_baz 2
+set /a WINE_foo="3"+"4"+"5+6"
+call :checkenvvars WINE_foo 18
+set WINE_foo=3
+set /a WINE_bar="WINE_""foo"+4
+call :checkenvvars WINE_foo 3 WINE_bar 7
+echo --- whitespace are ignored between double char operators
+set WINE_foo=4
+set WINE_bar=5
+set /a     WINE_foo   +    = 6
+set /a     WINE_bar     *    = WINE_foo
+call :checkenvvars WINE_foo 10 WINE_bar 50
+set WINE_foo=4
+set WINE_bar=5
+set /a     WINE_foo   +    = "6  < < 7"
+set /a     WINE_bar     *    = WINE_foo  +  WINE_foo
+call :checkenvvars WINE_foo 772 WINE_bar 7720
+set /a     WINE_foo=6 7
+set /a     WINE_ var1=8
+set WINE_foo=
+echo --- invalid operator sequence
+set WINE_foo=4
+set /a =4
+set /a *=4
+set /a ^>=4"
+set /a ^<=4"
+set /a WINE_foo^>^<=4
+echo %WINE_foo%
+set /a WINE_foo^>^>^>=4
+echo %WINE_foo%
+echo ----- negative prefix
+set /a WINE_foo=-1
+call :checkenvvars WINE_foo -1
+set /a WINE_foo=--1
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=3--3
+call :checkenvvars WINE_foo 6
+set /a WINE_foo=3---3
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=3----3
+call :checkenvvars WINE_foo 6
+set /a WINE_foo=-~1
+call :checkenvvars WINE_foo 2
+set /a WINE_foo=~-1
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=3+-~1
+call :checkenvvars WINE_foo 5
+set /a WINE_foo=3+~-1
+call :checkenvvars WINE_foo 3
+echo ----- assignment tests involving the end destination
+set WINE_foo=3
+set /a WINE_foo+=3+(WINE_foo=4)
+call :checkenvvars WINE_foo 11
+set WINE_foo=2
+set /a WINE_bar=3+(WINE_foo=6)
+call :checkenvvars WINE_foo 6 WINE_bar 9
+set WINE_foo=2
+set /a WINE_bar=3+(WINE_foo=6,WINE_baz=7)
+call :checkenvvars WINE_foo 6 WINE_bar 10 WINE_baz 7
+set WINE_foo=2
+set /a WINE_bar=WINE_foo=7
+call :checkenvvars WINE_foo 7 WINE_bar 7
+echo ----- equal precedence on stack
+rem Unary - dont reduce if precedence is equal
+set /a WINE_foo=!!1
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=!!0
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=~~1
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=~~0
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=--1
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=+-1
+call :checkenvvars WINE_foo -1
+set /a WINE_foo=-+1
+call :checkenvvars WINE_foo -1
+set /a WINE_foo=++1
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=!~1
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=~!1
+call :checkenvvars WINE_foo -1
+set /a WINE_foo=!-1
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=-!1
+call :checkenvvars WINE_foo 0
+set /a WINE_foo=!-0
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=-!0
+call :checkenvvars WINE_foo -1
+rem Aritmatic - Reduce if precedence is equal
+set /a WINE_foo=10*5/2
+call :checkenvvars WINE_foo 25
+set /a WINE_foo=5/2*10
+call :checkenvvars WINE_foo 20
+set /a WINE_foo=10/5/2
+call :checkenvvars WINE_foo 1
+set /a WINE_foo=5%%2*4
+call :checkenvvars WINE_foo 4
+set /a WINE_foo=10-5+2
+call :checkenvvars WINE_foo 7
+set /a WINE_foo=1^<^<4^>^>1
+call :checkenvvars WINE_foo 8
+rem Assignment - dont reduce if precedence is equal
+set /a WINE_foo=5
+set /a WINE_bar=WINE_foo=6
+call :checkenvvars WINE_foo 6 WINE_bar 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 bf5dbb6..a9c0d1c 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -800,6 +800,89 @@ WINE_bar correctly 4
 @todo_wine at WINE_foo correctly 19 at or_broken@ERROR: WINE_foo incorrectly 0 [19]
 @todo_wine at WINE_bar correctly 3 at or_broken@ERROR: WINE_bar incorrectly  [3]
 @todo_wine at WINE_baz correctly 19
+--- quotes
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 2
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_bar correctly 5
+ at todo_wine@WINE_baz correctly 1
+ at todo_wine@WINE_foo correctly 18
+WINE_foo correctly 3
+ at todo_wine@WINE_bar correctly 7 at or_broken@ERROR: WINE_bar incorrectly 4 [7]
+--- whitespace are ignored between double char operators
+ at todo_wine@WINE_foo correctly 10 at or_broken@ERROR: WINE_foo incorrectly 4 [10]
+ at todo_wine@WINE_bar correctly 50 at or_broken@ERROR: WINE_bar incorrectly 5 [50]
+ at todo_wine@WINE_foo correctly 772 at or_broken@ERROR: WINE_foo incorrectly 4 [772]
+ at todo_wine@WINE_bar correctly 7720 at or_broken@ERROR: WINE_bar incorrectly 5 [7720]
+--- invalid operator sequence
+4
+4
+----- negative prefix
+ at todo_wine@WINE_foo correctly -1
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly  [1]
+ at todo_wine@WINE_foo correctly 6
+ at todo_wine@WINE_foo correctly 0
+ at todo_wine@WINE_foo correctly 6
+ at todo_wine@WINE_foo correctly 2
+ at todo_wine@WINE_foo correctly 0 at or_broken@ERROR: WINE_foo incorrectly  [0]
+ at todo_wine@WINE_foo correctly 5
+ at todo_wine@WINE_foo correctly 3 at or_broken@ERROR: WINE_foo incorrectly -5 [3]
+----- assignment tests involving the end destination
+ at todo_wine@WINE_foo correctly 11 at or_broken@ERROR: WINE_foo incorrectly 3 [11]
+ at todo_wine@WINE_foo correctly 6 at or_broken@ERROR: WINE_foo incorrectly 2 [6]
+ at todo_wine@WINE_bar correctly 9 at or_broken@ERROR: WINE_bar incorrectly  [9]
+ at todo_wine@WINE_foo correctly 6 at or_broken@ERROR: WINE_foo incorrectly 2 [6]
+ at todo_wine@WINE_bar correctly 10 at or_broken@ERROR: WINE_bar incorrectly  [10]
+ at todo_wine@WINE_baz correctly 6 at or_broken@ERROR: WINE_baz incorrectly  [7]
+ at todo_wine@WINE_foo correctly 7 at or_broken@ERROR: WINE_foo incorrectly 2 [7]
+ at todo_wine@WINE_bar correctly 7 at or_broken@ERROR: WINE_bar incorrectly 2 [7]
+----- equal precedence on stack
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly 0 [1]
+ at todo_wine@WINE_foo correctly 0
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly  [1]
+ at todo_wine@WINE_foo correctly 0 at or_broken@ERROR: WINE_foo incorrectly  [0]
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly  [1]
+ at todo_wine@WINE_foo correctly -1 at or_broken@ERROR: WINE_foo incorrectly  [-1]
+ at todo_wine@WINE_foo correctly -1 at or_broken@ERROR: WINE_foo incorrectly  [-1]
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly  [1]
+ at todo_wine@WINE_foo correctly 0 at or_broken@ERROR: WINE_foo incorrectly  [0]
+ at todo_wine@WINE_foo correctly -1
+ at todo_wine@WINE_foo correctly 0 at or_broken@ERROR: WINE_foo incorrectly -1 [0]
+ at todo_wine@WINE_foo correctly 0
+ at todo_wine@WINE_foo correctly 1 at or_broken@ERROR: WINE_foo incorrectly 0 [1]
+ at todo_wine@WINE_foo correctly -1 at or_broken@ERROR: WINE_foo incorrectly 0 [-1]
+ at todo_wine@WINE_foo correctly 25 at or_broken@ERROR: WINE_foo incorrectly 20 [25]
+ at todo_wine@WINE_foo correctly 20
+ at todo_wine@WINE_foo correctly 1
+ at todo_wine@WINE_foo correctly 4
+ at todo_wine@WINE_foo correctly 7
+ at todo_wine@WINE_foo correctly 8 at or_broken@ERROR: WINE_foo incorrectly 4 [8]
+ at todo_wine@WINE_foo correctly 6 at or_broken@ERROR: WINE_foo incorrectly 5 [6]
+ at todo_wine@WINE_bar correctly 6 at or_broken@ERROR: WINE_bar incorrectly 5 [6]
 --- for /F
 ------ string argument
 a
-- 
1.7.9.5


More information about the wine-patches mailing list