source: icGREP/icgrep-devel/QA/system-tests/RunSystemTests @ 5801

Last change on this file since 5801 was 5382, checked in by nmedfort, 2 years ago

Updated QA tests. run_abc now tests stdin. Both RunSystemTests? and RunPairwiseTests? execute all tests on files rather than testing only compilation success.

  • Property svn:executable set to *
File size: 8.6 KB
Line 
1#!/bin/bash
2
3# Script that will compare the outputs of icGrep with correct&tested GNU grep to make sure icGrep output is correct.
4
5# Pairwise tests as generated by the ACTS combinatorial tests tool.
6# Tests are in order 1-43 by ordering the "ExtendedRegexOperator" column in ACTS with "false" being on top.
7# Format: (flags,       query,                          testFile(s))
8Tests=(
9                ""                      "\\*$"                                          "TestFiles/EmptyFile1"
10                "-i"            "\\*"                                           "TestFiles/EmptyFile1 TestFiles/EmptyFile2"
11                ""                      "ψ.*"                                          "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile1"
12                "-i"            "ω"                                                    "TestFiles/NonEmptyFile1"
13                "-c"            "\\*lolfff"                                     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"               #5
14                "-i -c"         "\\*lolfff"                                     "TestFiles/EmptyFile1"
15                ""                      "nope\\*No"                                     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
16                "-i"            "jK\\?.*Jk.*"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
17                "-i -c"         "ja\\?"                                         "TestFiles/NonEmptyFile1"
18                "-c"            "\\.jk\\?\\?"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"               #10
19                "-i -c"         "\\^\\&"                                        "TestFiles/NonEmptyFile1"
20                "-i -c"         "hello world"                           "TestFiles/NonEmptyFile1"
21                ""                      "Nopelolol$"                            "TestFiles/EmptyFile1 TestFiles/EmptyFile2"
22                "-i -c"         "\\.ja\\?"                                      "TestFiles/NonEmptyFile1"
23                ""                      "jk\\?.*jk.*"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"               #15
24                "-i -c"         ""                                                      "TestFiles/EmptyFile1"
25                "-i -c"         "Ύε.*τυ"                                    "TestFiles/NonEmptyFile1"
26
27
28                # Ones with Extended Regex operators.
29                "-i -c"         "\\*\p{Greek}"                          "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
30                "-c"            "\p{Lu}.*\\*.*\p{Greek}"        "TestFiles/NonEmptyFile1"
31                "-i -c"         "nope\p{Greek}"                         "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"                                       #20
32                ""                      "nope\p{Greek}"                         "TestFiles/EmptyFile1 TestFiles/EmptyFile2"
33                "-i"            "\\$.*\p{Lu}.*5$"                       "TestFiles/NonEmptyFile1"
34                "-i -c"         "\\$.*\p{Lu}"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
35                "-i -c"         "\p{Lu}.*\\^蕉銙蕉aAaσ5"            "TestFiles/NonEmptyFile1"
36                ""                      "\p{Lu}\\^蕉"                          "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                             #25
37                ""                      "\p{Greek}nope$"                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
38                "-i -c"         "\p{Latin}\\?"                          "TestFiles/EmptyFile1"
39                ""                      "\p{Lu}\\.\\?"                          "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
40                "-c"            "\p{Greek}.*\\?\\*[0-9]"        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
41                "-i"            "\p{Lu}\\.\\?"                          "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                             #30
42                ""                      "\p{Lu}蕉銙蕉aAaσ"                  "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
43                "-i -c"         "\p{Lu}.*驙.*\p{Greek}"                "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
44                ""                      "\p{Greek}\\&.*"                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
45                "-c"            "\p{Greek}\\&.*"                        "TestFiles/EmptyFile1"
46                ""                      "\p{Lu}"                                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
47                ""                      "\p{Latin}蕉銙蕉"                            "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
48                ""                      "\p{Greek}ΜάΜα"                             "TestFiles/NonEmptyFile1"
49                "-i"            "\p{Greek}ΜάΜα"                             "TestFiles/EmptyFile1"
50                "-c"            "^\p{Armenian}$"                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
51                "-i -c"         "\p{Lu}\\^"                                     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
52                "-c"            "\p{Lu}.*\\^.*\p{Armenian}"     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
53                ""                      "My.*\\*.*\p{Greek}$"           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
54
55
56
57
58                # Old tests (Before modifying the partitions in ACT)
59                ""                      "\\*."                                          "TestFiles/NonEmptyFile1"
60                "-i"            "\\*"                                           "TestFiles/EmptyFile1 TestFiles/EmptyFile2"
61                ""                      "haz lo?l"                              "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
62                ""                      "q"                                             "TestFiles/NonEmptyFile1"
63                "-i"            "Q"                                             "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"               # Test 5
64                "-i -c"         "\\.Jk.*"                                       "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
65                "-i"            "nope\\*No"                                     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
66                "-i -c"         "jK\\?.*Jk"                                     "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
67                ""                      "ja\\?"                                         "TestFiles/NonEmptyFile1"
68                "-i -c"         "JK.\\?"                                        "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     # Test 10
69                ""                      "\\[0-9]"                                       "TestFiles/NonEmptyFile1"
70                ""                      "unix"                                          "TestFiles/NonEmptyFile1"
71                "-i -c"         "nop.*a$"                                       "TestFiles/EmptyFile1 TestFiles/EmptyFile2"
72                ""                      "\\.ja\\?"                                      "TestFiles/NonEmptyFile1"
73                "-i -c"         "\\.NOPE\\?"                            "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     # Test 15
74                ""                      ""                                                      "TestFiles/EmptyFile1"
75                "-i"            "Ύε.*τυ"                                    "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
76                ""                      "䜠奜銙蕉"                                  "TestFiles/NonEmptyFile1"
77                ""                      "銙蕉"                                                "TestFiles/EmptyFile1"
78                "-i -c"         ".*[a-z]"                                       "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     # Test 20
79                "-i"            "z$"                                            "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
80                ""                      "\\.LLL"                                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
81
82                # Tests involving Extended regular expressions like \p{Greek}
83                "-i -c"         "\\*\p{Greek}"                          "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
84                "-i"            "\p{Lu}.*\\*"                           "TestFiles/NonEmptyFile1"
85                "-i -c"         "Q\p{Latin}"                            "TestFiles/EmptyFile1"                                                          # Test 25
86                ""                      "\p{Latin}Q"                            "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     
87                "-i"            "\\$.*\p{Lu}.*\p{Greek}"        "TestFiles/NonEmptyFile1"
88                "-i -c"         "\\$.*\p{Lu}"                           "TestFiles/EmptyFile1"
89                ""                      "\p{Lu}.*\\^.*\p{Greek}"        "TestFiles/NonEmptyFile1"
90                "-i"            "\p{Lu}.*\\^.*\p{Greek}"        "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     # Test 30
91                "-c"            "\p{Lu}jk.*\\*$"                        "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
92                "-i -c"         "\p{Lu}.*\p{Latin}.*\\*$"       "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
93                "-c"            "\\^\p{Lu}trolol$"                      "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
94                "-i -c"         "\p{Lu}.*\\*\p{Greek}"          "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
95                "-i -c"         "\\^\p{L}"                                      "TestFiles/EmptyFile1 TestFiles/EmptyFile2"                     # Test 35
96                "-c"            "\p{L}asdasd"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
97                "-i -c"         "^\p{Lu}.*σω"                         "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
98                "-i"            "\p{L}\\*.?ada"                         "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
99                "-i -c"         "\p{Lu}.*\\^蕉銙蕉aAaσ$"            "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
100                "-c"            "\p{L}"                                         "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"                               # Test 40
101                "-i -c"         "^\p{Greek}.*蕉銙蕉"                 "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
102                "-i"            "^\p{L}.*\\$"                           "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
103                "-c"            "^\p{L}\\.Aaσ$"                                "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
104
105                # More complex tests:
106                ""                      "^[a-z0-9_-]{3,16}$"                                                                                                    "TestFiles/complexTests"        # Testing
107                ""                      "^[a-z0-9_-]{6,18}$"                                                                                                    "TestFiles/complexTests"
108                ""                      "^#?([a-f0-9]{6}|[a-f0-9]{3})$"                                                                                 "TestFiles/complexTests"
109                ""                      "^[a-z0-9-]+$"                                                                                                                  "TestFiles/complexTests"
110                ""                      "^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$"                                               "TestFiles/complexTests"
111                ""                      "^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$"                "TestFiles/complexTests"
112                # ""                    "^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$"                                                             "TestFiles/complexTests"        #
113                ""                      "<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>"                                                                             "TestFiles/complexTests"        # test back-referencing.
114                ""                      "<([a-zA-Z][a-zA-Z0-9]*)>.*</\1>"                                                                               "TestFiles/complexTests"        # test back-referencing.
115
116
117                # "" "hello world" "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"            #sample tests.
118                # "" "\p{Greek}" "TestFiles/NonEmptyFile1 TestFiles/NonEmptyFile2"
119           )
120
121# Empty the ExpectedOutputFiles and OutputFiles folders.
122rm ExpectedOutputFiles/*
123rm OutputFiles/*
124
125tLen=${#Tests[@]}       #Size of the Tests list.
126NumOfParametersPerTest=3        # Each test has 3 parameters in the array above.
127TEST_NUM=0
128AllPassed=true
129while [  $TEST_NUM -lt $tLen ]; do
130        # echo Test \#$((TEST_NUM / NumOfParametersPerTest))
131
132        # Generate the valid output using the "correct" GNU grep program.
133        validOutputFile="ExpectedOutputFiles/OutputNum_$((TEST_NUM/NumOfParametersPerTest)).txt"
134        if [ "${Tests[$((TEST_NUM+2))]}" == "" ]; then
135                touch $validOutputFile                  # GNU grep goes into interactive mode if no file are provided. So just make an empty valid file.
136        else
137                grep -P ${Tests[$TEST_NUM]} "${Tests[$((TEST_NUM+1))]}" ${Tests[$((TEST_NUM+2))]} > $validOutputFile
138        fi
139
140        # Create the icGrep output file.
141        outputFile="OutputFiles/OutputNum_$((TEST_NUM/NumOfParametersPerTest)).txt"
142        $1 ${Tests[$TEST_NUM]} "${Tests[$((TEST_NUM+1))]}" ${Tests[$((TEST_NUM+2))]} > $outputFile
143
144        # Compare the icGrep output with the valid GNU Grep output.
145        diff $outputFile $validOutputFile
146        if [ $? = 0 ]; then
147                echo Test \#$((TEST_NUM / NumOfParametersPerTest)) Passed.
148        else
149                        echo Test \#$((TEST_NUM / NumOfParametersPerTest)) Failed: Query "${Tests[$((TEST_NUM+1))]}"\; on file: "${Tests[$((TEST_NUM+2))]}".
150                        AllPassed=false
151        fi
152
153        # echo ${outputFile}
154        # Increment
155        let TEST_NUM=TEST_NUM+$NumOfParametersPerTest
156done
157
158if [ "$AllPassed" = true ] ; then
159        echo "All system tests passed!"
160else
161        echo "Some system tests failed! Exiting script with 1."
162        exit 1
163fi
164
Note: See TracBrowser for help on using the repository browser.