# This file is part of SECONDO. # # Copyright (C) 2004, University in Hagen, Department of Computer Science, # Database Systems for New Applications. # # SECONDO is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # SECONDO is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with SECONDO; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # An example test spec for the Secondo TestRunner # run it with : # # TestRunner -i example.test # # By default a temporary database directory will be created. If you # want to use existing databases run # # TestRunner --no-tmp -i # # If one of your tests (say number N ) reports an error you can run # it directly by # # TestRunner -i -num N # # this is useful for debugging # A test specification consists of initial commands, a section of commands # setting up the test, a sequence of test cases, and a section of commands # cleaning up. The TestRunner uses directives to specify these sections. # directives are specified in comment lines, all comment lines beginning with a # directive are interpreted as commands to the TestRunner, non-comment lines are # passed to Secondo. The possible directives are SETUP, TESTCASE, YIELDS and # TEARDOWN (here i have written the directives in upper case to avoid confusion, # the real directives must be written in lower case). The meanings of those # directives are explained the following commented examples. # before the SETUP directive one can place Secondo commands # which may or may not suceed delete database chesstest; # the SETUP directive may specify the name of the test # the SETUP directive must appear exactly once in a test spec #setup exampletest # if a command between the SETUP directive and the first # TESTCASE directive fails, then the whole test has failed # and we immediately skip to the teardown # (the whole test does not make sense anymore if the # SETUP has failed) create database chesstest; open database chesstest; # the conventions for commands are the same as in SecondoTTYBDB # make sure that commands are always terminated # (either by a semicolon or by a newline) let chess1 = [const chessgame value (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") ))]; let chessrel1 = [const rel(tuple([name:string, game:chessgame ])) value(("hans" (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") ))))]; let chessrel2 = [const rel(tuple([name:string, game:chessgame ])) value(("hans" (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") ))) ("franz" (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") ) ) ))]; let chessrel3 = [const rel(tuple([name:string, game:chessgame, game2:chessgame ])) value(("hans" (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") )) (( ("Event" "Test der Chessgame Klasse") ("Site" "...") ("Date" "2006.12.08") ("White" "Mirko D.") ("Black" "somebody else") ("WhiteElo" "100") ("BlackElo" "2500") ("EventDate" "2006.12.07")) ( ("Pawn" "none" "c" 2 "c" 4 FALSE "c4") ("pawn" "none" "c" 7 "c" 5 FALSE "c5") ("Pawn" "none" "d" 2 "d" 3 FALSE "d3") ("pawn" "none" "d" 7 "d" 6 FALSE "d6") ("Knight" "none" "b" 1 "c" 3 FALSE "Nc3") ("bishop" "none" "c" 8 "f" 5 FALSE "Bf5") ("Pawn" "none" "e" 2 "e" 4 FALSE "e4") ("bishop" "Pawn" "f" 5 "e" 4 FALSE "Bxe4") ("Knight" "bishop" "c" 3 "e" 4 FALSE "Nxe4") ("pawn" "none" "g" 7 "g" 6 FALSE "g6") ("Bishop" "none" "c" 1 "e" 3 FALSE "Be3") ("pawn" "none" "h" 7 "h" 5 FALSE "h5") ("Queen" "none" "d" 1 "d" 2 FALSE "Qd2") ("queen" "none" "d" 8 "d" 7 FALSE "Qd7") ("King" "none" "e" 1 "c" 1 FALSE "O-O-O") ("knight" "none" "b" 8 "a" 6 FALSE "Na6") ("Knight" "none" "g" 1 "h" 3 FALSE "Nh3") ("pawn" "none" "b" 7 "b" 6 FALSE "b6") ("Knight" "none" "e" 4 "g" 5 FALSE "Neg5") ("queen" "Knight" "d" 7 "h" 3 FALSE "Qxh3") ("Pawn" "queen" "g" 2 "h" 3 FALSE "gxh3") ("pawn" "none" "h" 5 "h" 4 FALSE "h4") ("Bishop" "pawn" "e" 3 "c" 5 FALSE "Bxc5") ("pawn" "none" "b" 6 "b" 5 FALSE "b5") ("Bishop" "pawn" "c" 5 "d" 6 FALSE "Bxd6") ("pawn" "none" "b" 5 "b" 4 FALSE "b4") ("Pawn" "none" "c" 4 "c" 5 FALSE "c5") ("pawn" "none" "b" 4 "b" 3 FALSE "b3") ("Pawn" "none" "c" 5 "c" 6 FALSE "c6") ("pawn" "none" "f" 7 "f" 6 FALSE "f6") ("Pawn" "none" "c" 6 "c" 7 FALSE "c7") ("pawn" "none" "f" 6 "f" 5 FALSE "f5") ("Pawn" "none" "c" 7 "c" 8 TRUE "c8=Q+") ))))]; # a TESTCASE consists of a TESTCASE declarative followed # by a YIELDS declarative followed by a command. # multiple or no commands after a YIELD directive # will confuse the TestRunner # the expected output specified by the YIELD declarative # is converted to a ListExpr and the TestRunner compares # it to Secondo's actual output by calling # NestedList->Equal # An unspecified yields definition will result in an error # for example a result specified as "yields 3.184" will do so. # the TEARDOWN directive is followed by commands which # should be executed after the execution of all TESTCASES #teardown close database;