1*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2014 The Android Open Source Project 2*795d594fSAndroid Build Coastguard Worker# 3*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*795d594fSAndroid Build Coastguard Worker# 7*795d594fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*795d594fSAndroid Build Coastguard Worker# 9*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*795d594fSAndroid Build Coastguard Worker# limitations under the License. 14*795d594fSAndroid Build Coastguard Worker 15*795d594fSAndroid Build Coastguard Workerfrom common.immutables import ImmutableDict 16*795d594fSAndroid Build Coastguard Workerfrom file_format.c1visualizer.parser import parse_c1_visualizer_stream 17*795d594fSAndroid Build Coastguard Workerfrom file_format.checker.parser import parse_checker_stream, parse_checker_statement 18*795d594fSAndroid Build Coastguard Workerfrom file_format.checker.struct import CheckerFile, TestCase, TestStatement 19*795d594fSAndroid Build Coastguard Workerfrom match.file import match_test_case, MatchFailedException, BadStructureException 20*795d594fSAndroid Build Coastguard Workerfrom match.line import match_lines 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Workerimport io 23*795d594fSAndroid Build Coastguard Workerimport unittest 24*795d594fSAndroid Build Coastguard Worker 25*795d594fSAndroid Build Coastguard WorkerCheckerException = SystemExit 26*795d594fSAndroid Build Coastguard Worker 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Workerclass MatchLines_Test(unittest.TestCase): 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Worker def create_test_statement(self, checker_string): 31*795d594fSAndroid Build Coastguard Worker checker_file = CheckerFile("<checker-file>") 32*795d594fSAndroid Build Coastguard Worker test_case = TestCase(checker_file, "TestMethod TestPass", 0) 33*795d594fSAndroid Build Coastguard Worker return parse_checker_statement(test_case, checker_string, TestStatement.Variant.IN_ORDER, 0) 34*795d594fSAndroid Build Coastguard Worker 35*795d594fSAndroid Build Coastguard Worker def try_match(self, checker_string, c1_string, var_state={}): 36*795d594fSAndroid Build Coastguard Worker return match_lines(self.create_test_statement(checker_string), 37*795d594fSAndroid Build Coastguard Worker c1_string, 38*795d594fSAndroid Build Coastguard Worker ImmutableDict(var_state)) 39*795d594fSAndroid Build Coastguard Worker 40*795d594fSAndroid Build Coastguard Worker def assertMatches(self, checker_string, c1_string, var_state={}): 41*795d594fSAndroid Build Coastguard Worker self.assertIsNotNone(self.try_match(checker_string, c1_string, var_state)) 42*795d594fSAndroid Build Coastguard Worker 43*795d594fSAndroid Build Coastguard Worker def assertDoesNotMatch(self, checker_string, c1_string, var_state={}): 44*795d594fSAndroid Build Coastguard Worker self.assertIsNone(self.try_match(checker_string, c1_string, var_state)) 45*795d594fSAndroid Build Coastguard Worker 46*795d594fSAndroid Build Coastguard Worker def test_TextAndWhitespace(self): 47*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo", "foo") 48*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo", " foo ") 49*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo", "foo bar") 50*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo", "XfooX") 51*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo", "zoo") 52*795d594fSAndroid Build Coastguard Worker 53*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo bar", "foo bar") 54*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo bar", "abc foo bar def") 55*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo bar", "foo foo bar bar") 56*795d594fSAndroid Build Coastguard Worker 57*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo bar", "foo X bar") 58*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo bar", "foo Xbar") 59*795d594fSAndroid Build Coastguard Worker 60*795d594fSAndroid Build Coastguard Worker def test_Pattern(self): 61*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo{{A|B}}bar", "fooAbar") 62*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo{{A|B}}bar", "fooBbar") 63*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo{{A|B}}bar", "fooCbar") 64*795d594fSAndroid Build Coastguard Worker 65*795d594fSAndroid Build Coastguard Worker def test_VariableReference(self): 66*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X>>bar", "foobar", {"X": ""}) 67*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X>>bar", "fooAbar", {"X": "A"}) 68*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X>>bar", "fooBbar", {"X": "B"}) 69*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo<<X>>bar", "foobar", {"X": "A"}) 70*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo<<X>>bar", "foo bar", {"X": "A"}) 71*795d594fSAndroid Build Coastguard Worker with self.assertRaises(CheckerException): 72*795d594fSAndroid Build Coastguard Worker self.try_match("foo<<X>>bar", "foobar", {}) 73*795d594fSAndroid Build Coastguard Worker 74*795d594fSAndroid Build Coastguard Worker def test_VariableDefinition(self): 75*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X:A|B>>bar", "fooAbar") 76*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X:A|B>>bar", "fooBbar") 77*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo<<X:A|B>>bar", "fooCbar") 78*795d594fSAndroid Build Coastguard Worker 79*795d594fSAndroid Build Coastguard Worker env = self.try_match("foo<<X:A.*B>>bar", "fooABbar", {}) 80*795d594fSAndroid Build Coastguard Worker self.assertEqual(env, {"X": "AB"}) 81*795d594fSAndroid Build Coastguard Worker env = self.try_match("foo<<X:A.*B>>bar", "fooAxxBbar", {}) 82*795d594fSAndroid Build Coastguard Worker self.assertEqual(env, {"X": "AxxB"}) 83*795d594fSAndroid Build Coastguard Worker 84*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X:A|B>>bar<<X>>baz", "fooAbarAbaz") 85*795d594fSAndroid Build Coastguard Worker self.assertMatches("foo<<X:A|B>>bar<<X>>baz", "fooBbarBbaz") 86*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("foo<<X:A|B>>bar<<X>>baz", "fooAbarBbaz") 87*795d594fSAndroid Build Coastguard Worker 88*795d594fSAndroid Build Coastguard Worker def test_NoVariableRedefinition(self): 89*795d594fSAndroid Build Coastguard Worker with self.assertRaises(CheckerException): 90*795d594fSAndroid Build Coastguard Worker self.try_match("<<X:...>><<X>><<X:...>><<X>>", "foofoobarbar") 91*795d594fSAndroid Build Coastguard Worker 92*795d594fSAndroid Build Coastguard Worker def test_EnvNotChangedOnPartialMatch(self): 93*795d594fSAndroid Build Coastguard Worker env = {"Y": "foo"} 94*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("<<X:A>>bar", "Abaz", env) 95*795d594fSAndroid Build Coastguard Worker self.assertFalse("X" in env.keys()) 96*795d594fSAndroid Build Coastguard Worker 97*795d594fSAndroid Build Coastguard Worker def test_VariableContentEscaped(self): 98*795d594fSAndroid Build Coastguard Worker self.assertMatches("<<X:..>>foo<<X>>", ".*foo.*") 99*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("<<X:..>>foo<<X>>", ".*fooAAAA") 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Workerclass MatchFiles_Test(unittest.TestCase): 103*795d594fSAndroid Build Coastguard Worker 104*795d594fSAndroid Build Coastguard Worker def assertMatches(self, checker_string, c1_string, 105*795d594fSAndroid Build Coastguard Worker isa=None, 106*795d594fSAndroid Build Coastguard Worker instruction_set_features=None, 107*795d594fSAndroid Build Coastguard Worker read_barrier_type="none"): 108*795d594fSAndroid Build Coastguard Worker checker_string = \ 109*795d594fSAndroid Build Coastguard Worker """ 110*795d594fSAndroid Build Coastguard Worker /// CHECK-START: MyMethod MyPass 111*795d594fSAndroid Build Coastguard Worker """ + checker_string 112*795d594fSAndroid Build Coastguard Worker meta_data = "" 113*795d594fSAndroid Build Coastguard Worker if isa: 114*795d594fSAndroid Build Coastguard Worker meta_data += "isa:" + isa 115*795d594fSAndroid Build Coastguard Worker 116*795d594fSAndroid Build Coastguard Worker if instruction_set_features: 117*795d594fSAndroid Build Coastguard Worker if meta_data: 118*795d594fSAndroid Build Coastguard Worker meta_data += " " 119*795d594fSAndroid Build Coastguard Worker 120*795d594fSAndroid Build Coastguard Worker joined_features = ",".join( 121*795d594fSAndroid Build Coastguard Worker name if present else "-" + name for name, present in instruction_set_features.items()) 122*795d594fSAndroid Build Coastguard Worker meta_data += "isa_features:" + joined_features 123*795d594fSAndroid Build Coastguard Worker 124*795d594fSAndroid Build Coastguard Worker if meta_data: 125*795d594fSAndroid Build Coastguard Worker meta_data += " " 126*795d594fSAndroid Build Coastguard Worker meta_data += f"read_barrier_type:{read_barrier_type}" 127*795d594fSAndroid Build Coastguard Worker 128*795d594fSAndroid Build Coastguard Worker meta_data_string = "" 129*795d594fSAndroid Build Coastguard Worker if meta_data: 130*795d594fSAndroid Build Coastguard Worker meta_data_string = \ 131*795d594fSAndroid Build Coastguard Worker """ 132*795d594fSAndroid Build Coastguard Worker begin_compilation 133*795d594fSAndroid Build Coastguard Worker name "%s" 134*795d594fSAndroid Build Coastguard Worker method "%s" 135*795d594fSAndroid Build Coastguard Worker date 1234 136*795d594fSAndroid Build Coastguard Worker end_compilation 137*795d594fSAndroid Build Coastguard Worker """ % (meta_data, meta_data) 138*795d594fSAndroid Build Coastguard Worker c1_string = meta_data_string + \ 139*795d594fSAndroid Build Coastguard Worker """ 140*795d594fSAndroid Build Coastguard Worker begin_compilation 141*795d594fSAndroid Build Coastguard Worker name "MyMethod" 142*795d594fSAndroid Build Coastguard Worker method "MyMethod" 143*795d594fSAndroid Build Coastguard Worker date 1234 144*795d594fSAndroid Build Coastguard Worker end_compilation 145*795d594fSAndroid Build Coastguard Worker begin_cfg 146*795d594fSAndroid Build Coastguard Worker name "MyPass" 147*795d594fSAndroid Build Coastguard Worker """ + c1_string + \ 148*795d594fSAndroid Build Coastguard Worker """ 149*795d594fSAndroid Build Coastguard Worker end_cfg 150*795d594fSAndroid Build Coastguard Worker """ 151*795d594fSAndroid Build Coastguard Worker checker_file = parse_checker_stream("<test-file>", "CHECK", io.StringIO(checker_string)) 152*795d594fSAndroid Build Coastguard Worker c1_file = parse_c1_visualizer_stream("<c1-file>", io.StringIO(c1_string)) 153*795d594fSAndroid Build Coastguard Worker assert len(checker_file.test_cases) == 1 154*795d594fSAndroid Build Coastguard Worker assert len(c1_file.passes) == 1 155*795d594fSAndroid Build Coastguard Worker match_test_case(checker_file.test_cases[0], 156*795d594fSAndroid Build Coastguard Worker c1_file.passes[0], 157*795d594fSAndroid Build Coastguard Worker c1_file.instruction_set_features, 158*795d594fSAndroid Build Coastguard Worker c1_file.read_barrier_type) 159*795d594fSAndroid Build Coastguard Worker 160*795d594fSAndroid Build Coastguard Worker def assertDoesNotMatch(self, checker_string, c1_string, 161*795d594fSAndroid Build Coastguard Worker isa=None, 162*795d594fSAndroid Build Coastguard Worker instruction_set_features=None, 163*795d594fSAndroid Build Coastguard Worker read_barrier_type="none"): 164*795d594fSAndroid Build Coastguard Worker with self.assertRaises(MatchFailedException): 165*795d594fSAndroid Build Coastguard Worker self.assertMatches(checker_string, c1_string, isa, instruction_set_features, read_barrier_type) 166*795d594fSAndroid Build Coastguard Worker 167*795d594fSAndroid Build Coastguard Worker def assertBadStructure(self, checker_string, c1_string): 168*795d594fSAndroid Build Coastguard Worker with self.assertRaises(BadStructureException): 169*795d594fSAndroid Build Coastguard Worker self.assertMatches(checker_string, c1_string) 170*795d594fSAndroid Build Coastguard Worker 171*795d594fSAndroid Build Coastguard Worker def test_Text(self): 172*795d594fSAndroid Build Coastguard Worker self.assertMatches("/// CHECK: foo bar", "foo bar") 173*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK: foo bar", "abc def") 174*795d594fSAndroid Build Coastguard Worker 175*795d594fSAndroid Build Coastguard Worker def test_Pattern(self): 176*795d594fSAndroid Build Coastguard Worker self.assertMatches("/// CHECK: abc {{de.}}", "abc de#") 177*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK: abc {{de.}}", "abc d#f") 178*795d594fSAndroid Build Coastguard Worker 179*795d594fSAndroid Build Coastguard Worker def test_Variables(self): 180*795d594fSAndroid Build Coastguard Worker self.assertMatches( 181*795d594fSAndroid Build Coastguard Worker """ 182*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<X:.>>bar 183*795d594fSAndroid Build Coastguard Worker /// CHECK: abc<<X>>def 184*795d594fSAndroid Build Coastguard Worker """, 185*795d594fSAndroid Build Coastguard Worker """ 186*795d594fSAndroid Build Coastguard Worker foo0bar 187*795d594fSAndroid Build Coastguard Worker abc0def 188*795d594fSAndroid Build Coastguard Worker """) 189*795d594fSAndroid Build Coastguard Worker self.assertMatches( 190*795d594fSAndroid Build Coastguard Worker """ 191*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<X:([0-9]+)>>bar 192*795d594fSAndroid Build Coastguard Worker /// CHECK: abc<<X>>def 193*795d594fSAndroid Build Coastguard Worker /// CHECK: ### <<X>> ### 194*795d594fSAndroid Build Coastguard Worker """, 195*795d594fSAndroid Build Coastguard Worker """ 196*795d594fSAndroid Build Coastguard Worker foo1234bar 197*795d594fSAndroid Build Coastguard Worker abc1234def 198*795d594fSAndroid Build Coastguard Worker ### 1234 ### 199*795d594fSAndroid Build Coastguard Worker """) 200*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 201*795d594fSAndroid Build Coastguard Worker """ 202*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<X:([0-9]+)>>bar 203*795d594fSAndroid Build Coastguard Worker /// CHECK: abc<<X>>def 204*795d594fSAndroid Build Coastguard Worker """, 205*795d594fSAndroid Build Coastguard Worker """ 206*795d594fSAndroid Build Coastguard Worker foo1234bar 207*795d594fSAndroid Build Coastguard Worker abc1235def 208*795d594fSAndroid Build Coastguard Worker """) 209*795d594fSAndroid Build Coastguard Worker 210*795d594fSAndroid Build Coastguard Worker def test_WholeWordMustMatch(self): 211*795d594fSAndroid Build Coastguard Worker self.assertMatches("/// CHECK: b{{.}}r", "abc bar def") 212*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc Xbar def") 213*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc barX def") 214*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc b r def") 215*795d594fSAndroid Build Coastguard Worker 216*795d594fSAndroid Build Coastguard Worker def test_InOrderStatements(self): 217*795d594fSAndroid Build Coastguard Worker self.assertMatches( 218*795d594fSAndroid Build Coastguard Worker """ 219*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 220*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 221*795d594fSAndroid Build Coastguard Worker """, 222*795d594fSAndroid Build Coastguard Worker """ 223*795d594fSAndroid Build Coastguard Worker foo 224*795d594fSAndroid Build Coastguard Worker bar 225*795d594fSAndroid Build Coastguard Worker """) 226*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 227*795d594fSAndroid Build Coastguard Worker """ 228*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 229*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 230*795d594fSAndroid Build Coastguard Worker """, 231*795d594fSAndroid Build Coastguard Worker """ 232*795d594fSAndroid Build Coastguard Worker bar 233*795d594fSAndroid Build Coastguard Worker foo 234*795d594fSAndroid Build Coastguard Worker """) 235*795d594fSAndroid Build Coastguard Worker 236*795d594fSAndroid Build Coastguard Worker def test_NextLineStatements(self): 237*795d594fSAndroid Build Coastguard Worker self.assertMatches( 238*795d594fSAndroid Build Coastguard Worker """ 239*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 240*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 241*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: abc 242*795d594fSAndroid Build Coastguard Worker /// CHECK: def 243*795d594fSAndroid Build Coastguard Worker """, 244*795d594fSAndroid Build Coastguard Worker """ 245*795d594fSAndroid Build Coastguard Worker foo 246*795d594fSAndroid Build Coastguard Worker bar 247*795d594fSAndroid Build Coastguard Worker abc 248*795d594fSAndroid Build Coastguard Worker def 249*795d594fSAndroid Build Coastguard Worker """) 250*795d594fSAndroid Build Coastguard Worker self.assertMatches( 251*795d594fSAndroid Build Coastguard Worker """ 252*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 253*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 254*795d594fSAndroid Build Coastguard Worker /// CHECK: def 255*795d594fSAndroid Build Coastguard Worker """, 256*795d594fSAndroid Build Coastguard Worker """ 257*795d594fSAndroid Build Coastguard Worker foo 258*795d594fSAndroid Build Coastguard Worker bar 259*795d594fSAndroid Build Coastguard Worker abc 260*795d594fSAndroid Build Coastguard Worker def 261*795d594fSAndroid Build Coastguard Worker """) 262*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 263*795d594fSAndroid Build Coastguard Worker """ 264*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 265*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 266*795d594fSAndroid Build Coastguard Worker """, 267*795d594fSAndroid Build Coastguard Worker """ 268*795d594fSAndroid Build Coastguard Worker foo 269*795d594fSAndroid Build Coastguard Worker abc 270*795d594fSAndroid Build Coastguard Worker bar 271*795d594fSAndroid Build Coastguard Worker """) 272*795d594fSAndroid Build Coastguard Worker 273*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 274*795d594fSAndroid Build Coastguard Worker """ 275*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 276*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 277*795d594fSAndroid Build Coastguard Worker """, 278*795d594fSAndroid Build Coastguard Worker """ 279*795d594fSAndroid Build Coastguard Worker bar 280*795d594fSAndroid Build Coastguard Worker foo 281*795d594fSAndroid Build Coastguard Worker abc 282*795d594fSAndroid Build Coastguard Worker """) 283*795d594fSAndroid Build Coastguard Worker 284*795d594fSAndroid Build Coastguard Worker def test_DagStatements(self): 285*795d594fSAndroid Build Coastguard Worker self.assertMatches( 286*795d594fSAndroid Build Coastguard Worker """ 287*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 288*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bar 289*795d594fSAndroid Build Coastguard Worker """, 290*795d594fSAndroid Build Coastguard Worker """ 291*795d594fSAndroid Build Coastguard Worker foo 292*795d594fSAndroid Build Coastguard Worker bar 293*795d594fSAndroid Build Coastguard Worker """) 294*795d594fSAndroid Build Coastguard Worker self.assertMatches( 295*795d594fSAndroid Build Coastguard Worker """ 296*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 297*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bar 298*795d594fSAndroid Build Coastguard Worker """, 299*795d594fSAndroid Build Coastguard Worker """ 300*795d594fSAndroid Build Coastguard Worker bar 301*795d594fSAndroid Build Coastguard Worker foo 302*795d594fSAndroid Build Coastguard Worker """) 303*795d594fSAndroid Build Coastguard Worker 304*795d594fSAndroid Build Coastguard Worker def test_DagStatementsScope(self): 305*795d594fSAndroid Build Coastguard Worker self.assertMatches( 306*795d594fSAndroid Build Coastguard Worker """ 307*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 308*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: abc 309*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: def 310*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 311*795d594fSAndroid Build Coastguard Worker """, 312*795d594fSAndroid Build Coastguard Worker """ 313*795d594fSAndroid Build Coastguard Worker foo 314*795d594fSAndroid Build Coastguard Worker def 315*795d594fSAndroid Build Coastguard Worker abc 316*795d594fSAndroid Build Coastguard Worker bar 317*795d594fSAndroid Build Coastguard Worker """) 318*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 319*795d594fSAndroid Build Coastguard Worker """ 320*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 321*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: abc 322*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: def 323*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 324*795d594fSAndroid Build Coastguard Worker """, 325*795d594fSAndroid Build Coastguard Worker """ 326*795d594fSAndroid Build Coastguard Worker foo 327*795d594fSAndroid Build Coastguard Worker abc 328*795d594fSAndroid Build Coastguard Worker bar 329*795d594fSAndroid Build Coastguard Worker def 330*795d594fSAndroid Build Coastguard Worker """) 331*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 332*795d594fSAndroid Build Coastguard Worker """ 333*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 334*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: abc 335*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: def 336*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 337*795d594fSAndroid Build Coastguard Worker """, 338*795d594fSAndroid Build Coastguard Worker """ 339*795d594fSAndroid Build Coastguard Worker foo 340*795d594fSAndroid Build Coastguard Worker def 341*795d594fSAndroid Build Coastguard Worker bar 342*795d594fSAndroid Build Coastguard Worker abc 343*795d594fSAndroid Build Coastguard Worker """) 344*795d594fSAndroid Build Coastguard Worker 345*795d594fSAndroid Build Coastguard Worker def test_NotStatements(self): 346*795d594fSAndroid Build Coastguard Worker self.assertMatches( 347*795d594fSAndroid Build Coastguard Worker """ 348*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 349*795d594fSAndroid Build Coastguard Worker """, 350*795d594fSAndroid Build Coastguard Worker """ 351*795d594fSAndroid Build Coastguard Worker abc 352*795d594fSAndroid Build Coastguard Worker def 353*795d594fSAndroid Build Coastguard Worker """) 354*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 355*795d594fSAndroid Build Coastguard Worker """ 356*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 357*795d594fSAndroid Build Coastguard Worker """, 358*795d594fSAndroid Build Coastguard Worker """ 359*795d594fSAndroid Build Coastguard Worker abc foo 360*795d594fSAndroid Build Coastguard Worker def 361*795d594fSAndroid Build Coastguard Worker """) 362*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 363*795d594fSAndroid Build Coastguard Worker """ 364*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 365*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bar 366*795d594fSAndroid Build Coastguard Worker """, 367*795d594fSAndroid Build Coastguard Worker """ 368*795d594fSAndroid Build Coastguard Worker abc 369*795d594fSAndroid Build Coastguard Worker def bar 370*795d594fSAndroid Build Coastguard Worker """) 371*795d594fSAndroid Build Coastguard Worker 372*795d594fSAndroid Build Coastguard Worker def test_NotStatementsScope(self): 373*795d594fSAndroid Build Coastguard Worker self.assertMatches( 374*795d594fSAndroid Build Coastguard Worker """ 375*795d594fSAndroid Build Coastguard Worker /// CHECK: abc 376*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 377*795d594fSAndroid Build Coastguard Worker /// CHECK: def 378*795d594fSAndroid Build Coastguard Worker """, 379*795d594fSAndroid Build Coastguard Worker """ 380*795d594fSAndroid Build Coastguard Worker abc 381*795d594fSAndroid Build Coastguard Worker def 382*795d594fSAndroid Build Coastguard Worker """) 383*795d594fSAndroid Build Coastguard Worker self.assertMatches( 384*795d594fSAndroid Build Coastguard Worker """ 385*795d594fSAndroid Build Coastguard Worker /// CHECK: abc 386*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 387*795d594fSAndroid Build Coastguard Worker /// CHECK: def 388*795d594fSAndroid Build Coastguard Worker """, 389*795d594fSAndroid Build Coastguard Worker """ 390*795d594fSAndroid Build Coastguard Worker abc 391*795d594fSAndroid Build Coastguard Worker def 392*795d594fSAndroid Build Coastguard Worker foo 393*795d594fSAndroid Build Coastguard Worker """) 394*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 395*795d594fSAndroid Build Coastguard Worker """ 396*795d594fSAndroid Build Coastguard Worker /// CHECK: abc 397*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 398*795d594fSAndroid Build Coastguard Worker /// CHECK: def 399*795d594fSAndroid Build Coastguard Worker """, 400*795d594fSAndroid Build Coastguard Worker """ 401*795d594fSAndroid Build Coastguard Worker abc 402*795d594fSAndroid Build Coastguard Worker foo 403*795d594fSAndroid Build Coastguard Worker def 404*795d594fSAndroid Build Coastguard Worker """) 405*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 406*795d594fSAndroid Build Coastguard Worker """ 407*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 408*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: 1 + 1 == 2 409*795d594fSAndroid Build Coastguard Worker /// CHECK: bar 410*795d594fSAndroid Build Coastguard Worker """, 411*795d594fSAndroid Build Coastguard Worker """ 412*795d594fSAndroid Build Coastguard Worker foo 413*795d594fSAndroid Build Coastguard Worker abc 414*795d594fSAndroid Build Coastguard Worker bar 415*795d594fSAndroid Build Coastguard Worker """) 416*795d594fSAndroid Build Coastguard Worker self.assertMatches( 417*795d594fSAndroid Build Coastguard Worker """ 418*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bar 419*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: abc 420*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 421*795d594fSAndroid Build Coastguard Worker """, 422*795d594fSAndroid Build Coastguard Worker """ 423*795d594fSAndroid Build Coastguard Worker foo 424*795d594fSAndroid Build Coastguard Worker abc 425*795d594fSAndroid Build Coastguard Worker bar 426*795d594fSAndroid Build Coastguard Worker """) 427*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 428*795d594fSAndroid Build Coastguard Worker """ 429*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: abc 430*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 431*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bar 432*795d594fSAndroid Build Coastguard Worker """, 433*795d594fSAndroid Build Coastguard Worker """ 434*795d594fSAndroid Build Coastguard Worker foo 435*795d594fSAndroid Build Coastguard Worker abc 436*795d594fSAndroid Build Coastguard Worker bar 437*795d594fSAndroid Build Coastguard Worker """) 438*795d594fSAndroid Build Coastguard Worker 439*795d594fSAndroid Build Coastguard Worker def test_LineOnlyMatchesOnce(self): 440*795d594fSAndroid Build Coastguard Worker self.assertMatches( 441*795d594fSAndroid Build Coastguard Worker """ 442*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 443*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 444*795d594fSAndroid Build Coastguard Worker """, 445*795d594fSAndroid Build Coastguard Worker """ 446*795d594fSAndroid Build Coastguard Worker foo 447*795d594fSAndroid Build Coastguard Worker abc 448*795d594fSAndroid Build Coastguard Worker foo 449*795d594fSAndroid Build Coastguard Worker """) 450*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 451*795d594fSAndroid Build Coastguard Worker """ 452*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 453*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 454*795d594fSAndroid Build Coastguard Worker """, 455*795d594fSAndroid Build Coastguard Worker """ 456*795d594fSAndroid Build Coastguard Worker foo 457*795d594fSAndroid Build Coastguard Worker abc 458*795d594fSAndroid Build Coastguard Worker bar 459*795d594fSAndroid Build Coastguard Worker """) 460*795d594fSAndroid Build Coastguard Worker 461*795d594fSAndroid Build Coastguard Worker def test_EvalStatements(self): 462*795d594fSAndroid Build Coastguard Worker self.assertMatches("/// CHECK-EVAL: True", "foo") 463*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK-EVAL: False", "foo") 464*795d594fSAndroid Build Coastguard Worker 465*795d594fSAndroid Build Coastguard Worker self.assertMatches("/// CHECK-EVAL: 1 + 2 == 3", "foo") 466*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch("/// CHECK-EVAL: 1 + 2 == 4", "foo") 467*795d594fSAndroid Build Coastguard Worker 468*795d594fSAndroid Build Coastguard Worker twoVarTestCase = """ 469*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<X:\d+>> <<Y:\d+>> 470*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: <<X>> > <<Y>> 471*795d594fSAndroid Build Coastguard Worker """ 472*795d594fSAndroid Build Coastguard Worker self.assertMatches(twoVarTestCase, "42 41") 473*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch(twoVarTestCase, "42 43") 474*795d594fSAndroid Build Coastguard Worker 475*795d594fSAndroid Build Coastguard Worker def test_MisplacedNext(self): 476*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 477*795d594fSAndroid Build Coastguard Worker """ 478*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo 479*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 480*795d594fSAndroid Build Coastguard Worker """, 481*795d594fSAndroid Build Coastguard Worker """ 482*795d594fSAndroid Build Coastguard Worker foo 483*795d594fSAndroid Build Coastguard Worker bar 484*795d594fSAndroid Build Coastguard Worker """) 485*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 486*795d594fSAndroid Build Coastguard Worker """ 487*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: foo 488*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 489*795d594fSAndroid Build Coastguard Worker """, 490*795d594fSAndroid Build Coastguard Worker """ 491*795d594fSAndroid Build Coastguard Worker foo 492*795d594fSAndroid Build Coastguard Worker bar 493*795d594fSAndroid Build Coastguard Worker """) 494*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 495*795d594fSAndroid Build Coastguard Worker """ 496*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: True 497*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 498*795d594fSAndroid Build Coastguard Worker """, 499*795d594fSAndroid Build Coastguard Worker """ 500*795d594fSAndroid Build Coastguard Worker foo 501*795d594fSAndroid Build Coastguard Worker bar 502*795d594fSAndroid Build Coastguard Worker """) 503*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 504*795d594fSAndroid Build Coastguard Worker """ 505*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 506*795d594fSAndroid Build Coastguard Worker """, 507*795d594fSAndroid Build Coastguard Worker """ 508*795d594fSAndroid Build Coastguard Worker foo 509*795d594fSAndroid Build Coastguard Worker bar 510*795d594fSAndroid Build Coastguard Worker """) 511*795d594fSAndroid Build Coastguard Worker 512*795d594fSAndroid Build Coastguard Worker def test_EnvVariableEval(self): 513*795d594fSAndroid Build Coastguard Worker self.assertMatches( 514*795d594fSAndroid Build Coastguard Worker """ 515*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: os.environ.get('MARTY_MCFLY') != '89mph!' 516*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 517*795d594fSAndroid Build Coastguard Worker """, 518*795d594fSAndroid Build Coastguard Worker """ 519*795d594fSAndroid Build Coastguard Worker foo 520*795d594fSAndroid Build Coastguard Worker """ 521*795d594fSAndroid Build Coastguard Worker ) 522*795d594fSAndroid Build Coastguard Worker self.assertMatches( 523*795d594fSAndroid Build Coastguard Worker """ 524*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: os.environ.get('MARTY_MCFLY') != '89mph!' 525*795d594fSAndroid Build Coastguard Worker """, 526*795d594fSAndroid Build Coastguard Worker """ 527*795d594fSAndroid Build Coastguard Worker foo 528*795d594fSAndroid Build Coastguard Worker """ 529*795d594fSAndroid Build Coastguard Worker ) 530*795d594fSAndroid Build Coastguard Worker 531*795d594fSAndroid Build Coastguard Worker def test_IfStatements(self): 532*795d594fSAndroid Build Coastguard Worker self.assertMatches( 533*795d594fSAndroid Build Coastguard Worker """ 534*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 535*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 536*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 537*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 538*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 539*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 540*795d594fSAndroid Build Coastguard Worker """, 541*795d594fSAndroid Build Coastguard Worker """ 542*795d594fSAndroid Build Coastguard Worker foo1 543*795d594fSAndroid Build Coastguard Worker foo2 544*795d594fSAndroid Build Coastguard Worker foo3 545*795d594fSAndroid Build Coastguard Worker bar 546*795d594fSAndroid Build Coastguard Worker """) 547*795d594fSAndroid Build Coastguard Worker self.assertMatches( 548*795d594fSAndroid Build Coastguard Worker """ 549*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 550*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 551*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 552*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 553*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 554*795d594fSAndroid Build Coastguard Worker """, 555*795d594fSAndroid Build Coastguard Worker """ 556*795d594fSAndroid Build Coastguard Worker foo1 557*795d594fSAndroid Build Coastguard Worker bar 558*795d594fSAndroid Build Coastguard Worker """) 559*795d594fSAndroid Build Coastguard Worker self.assertMatches( 560*795d594fSAndroid Build Coastguard Worker """ 561*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 562*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 563*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo2 564*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 565*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bar 566*795d594fSAndroid Build Coastguard Worker /// CHECK: foo3 567*795d594fSAndroid Build Coastguard Worker """, 568*795d594fSAndroid Build Coastguard Worker """ 569*795d594fSAndroid Build Coastguard Worker foo1 570*795d594fSAndroid Build Coastguard Worker bar 571*795d594fSAndroid Build Coastguard Worker foo2 572*795d594fSAndroid Build Coastguard Worker foo3 573*795d594fSAndroid Build Coastguard Worker """) 574*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 575*795d594fSAndroid Build Coastguard Worker """ 576*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 577*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 578*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 579*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 580*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 581*795d594fSAndroid Build Coastguard Worker """, 582*795d594fSAndroid Build Coastguard Worker """ 583*795d594fSAndroid Build Coastguard Worker foo1 584*795d594fSAndroid Build Coastguard Worker foo2 585*795d594fSAndroid Build Coastguard Worker foo3 586*795d594fSAndroid Build Coastguard Worker """) 587*795d594fSAndroid Build Coastguard Worker 588*795d594fSAndroid Build Coastguard Worker def test_IfElseStatements(self): 589*795d594fSAndroid Build Coastguard Worker self.assertMatches( 590*795d594fSAndroid Build Coastguard Worker """ 591*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 592*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 593*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 594*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 595*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 596*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 597*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 598*795d594fSAndroid Build Coastguard Worker """, 599*795d594fSAndroid Build Coastguard Worker """ 600*795d594fSAndroid Build Coastguard Worker foo1 601*795d594fSAndroid Build Coastguard Worker foo2 602*795d594fSAndroid Build Coastguard Worker bar 603*795d594fSAndroid Build Coastguard Worker """) 604*795d594fSAndroid Build Coastguard Worker self.assertMatches( 605*795d594fSAndroid Build Coastguard Worker """ 606*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 607*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 608*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 609*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 610*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 611*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 612*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 613*795d594fSAndroid Build Coastguard Worker """, 614*795d594fSAndroid Build Coastguard Worker """ 615*795d594fSAndroid Build Coastguard Worker foo1 616*795d594fSAndroid Build Coastguard Worker foo3 617*795d594fSAndroid Build Coastguard Worker bar 618*795d594fSAndroid Build Coastguard Worker """) 619*795d594fSAndroid Build Coastguard Worker self.assertMatches( 620*795d594fSAndroid Build Coastguard Worker """ 621*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 622*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 623*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 624*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 625*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bar 626*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 627*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: foo3 628*795d594fSAndroid Build Coastguard Worker /// CHECK: foo4 629*795d594fSAndroid Build Coastguard Worker """, 630*795d594fSAndroid Build Coastguard Worker """ 631*795d594fSAndroid Build Coastguard Worker foo1 632*795d594fSAndroid Build Coastguard Worker foo3 633*795d594fSAndroid Build Coastguard Worker bar 634*795d594fSAndroid Build Coastguard Worker foo4 635*795d594fSAndroid Build Coastguard Worker """) 636*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 637*795d594fSAndroid Build Coastguard Worker """ 638*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 639*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 640*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 641*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 642*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 643*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 644*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 645*795d594fSAndroid Build Coastguard Worker """, 646*795d594fSAndroid Build Coastguard Worker """ 647*795d594fSAndroid Build Coastguard Worker foo1 648*795d594fSAndroid Build Coastguard Worker foo2 649*795d594fSAndroid Build Coastguard Worker bar 650*795d594fSAndroid Build Coastguard Worker """) 651*795d594fSAndroid Build Coastguard Worker 652*795d594fSAndroid Build Coastguard Worker def test_IfElifElseStatements(self): 653*795d594fSAndroid Build Coastguard Worker self.assertMatches( 654*795d594fSAndroid Build Coastguard Worker """ 655*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 656*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 657*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 658*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 659*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 660*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 661*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 662*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 663*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 664*795d594fSAndroid Build Coastguard Worker """, 665*795d594fSAndroid Build Coastguard Worker """ 666*795d594fSAndroid Build Coastguard Worker foo1 667*795d594fSAndroid Build Coastguard Worker foo2 668*795d594fSAndroid Build Coastguard Worker bar 669*795d594fSAndroid Build Coastguard Worker """) 670*795d594fSAndroid Build Coastguard Worker self.assertMatches( 671*795d594fSAndroid Build Coastguard Worker """ 672*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 673*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 674*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 675*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: False 676*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 677*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 678*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 679*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 680*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 681*795d594fSAndroid Build Coastguard Worker """, 682*795d594fSAndroid Build Coastguard Worker """ 683*795d594fSAndroid Build Coastguard Worker foo1 684*795d594fSAndroid Build Coastguard Worker foo4 685*795d594fSAndroid Build Coastguard Worker bar 686*795d594fSAndroid Build Coastguard Worker """) 687*795d594fSAndroid Build Coastguard Worker self.assertMatches( 688*795d594fSAndroid Build Coastguard Worker """ 689*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 690*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 691*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 692*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 693*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 694*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 695*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 696*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 697*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 698*795d594fSAndroid Build Coastguard Worker """, 699*795d594fSAndroid Build Coastguard Worker """ 700*795d594fSAndroid Build Coastguard Worker foo1 701*795d594fSAndroid Build Coastguard Worker foo3 702*795d594fSAndroid Build Coastguard Worker bar 703*795d594fSAndroid Build Coastguard Worker """) 704*795d594fSAndroid Build Coastguard Worker self.assertMatches( 705*795d594fSAndroid Build Coastguard Worker """ 706*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 707*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 708*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 709*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: False 710*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 711*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: False 712*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 713*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 714*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 715*795d594fSAndroid Build Coastguard Worker """, 716*795d594fSAndroid Build Coastguard Worker """ 717*795d594fSAndroid Build Coastguard Worker foo1 718*795d594fSAndroid Build Coastguard Worker bar 719*795d594fSAndroid Build Coastguard Worker """) 720*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 721*795d594fSAndroid Build Coastguard Worker """ 722*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 723*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 724*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 725*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 726*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 727*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 728*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 729*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 730*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bar 731*795d594fSAndroid Build Coastguard Worker """, 732*795d594fSAndroid Build Coastguard Worker """ 733*795d594fSAndroid Build Coastguard Worker foo1 734*795d594fSAndroid Build Coastguard Worker foo2 735*795d594fSAndroid Build Coastguard Worker bar 736*795d594fSAndroid Build Coastguard Worker """) 737*795d594fSAndroid Build Coastguard Worker 738*795d594fSAndroid Build Coastguard Worker def test_NestedBranching(self): 739*795d594fSAndroid Build Coastguard Worker self.assertMatches( 740*795d594fSAndroid Build Coastguard Worker """ 741*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 742*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 743*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 744*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 745*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 746*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 747*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 748*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 749*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 750*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo4 751*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 752*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo5 753*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 754*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 755*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo6 756*795d594fSAndroid Build Coastguard Worker """, 757*795d594fSAndroid Build Coastguard Worker """ 758*795d594fSAndroid Build Coastguard Worker foo1 759*795d594fSAndroid Build Coastguard Worker foo2 760*795d594fSAndroid Build Coastguard Worker foo6 761*795d594fSAndroid Build Coastguard Worker """) 762*795d594fSAndroid Build Coastguard Worker self.assertMatches( 763*795d594fSAndroid Build Coastguard Worker """ 764*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 765*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 766*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 767*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 768*795d594fSAndroid Build Coastguard Worker /// CHECK: foo2 769*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 770*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 771*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 772*795d594fSAndroid Build Coastguard Worker /// CHECK: foo3 773*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 774*795d594fSAndroid Build Coastguard Worker /// CHECK: foo4 775*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 776*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 777*795d594fSAndroid Build Coastguard Worker """, 778*795d594fSAndroid Build Coastguard Worker """ 779*795d594fSAndroid Build Coastguard Worker foo2 780*795d594fSAndroid Build Coastguard Worker """) 781*795d594fSAndroid Build Coastguard Worker self.assertMatches( 782*795d594fSAndroid Build Coastguard Worker """ 783*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 784*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 785*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 786*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 787*795d594fSAndroid Build Coastguard Worker /// CHECK: foo2 788*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 789*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 790*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 791*795d594fSAndroid Build Coastguard Worker /// CHECK: foo3 792*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 793*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 794*795d594fSAndroid Build Coastguard Worker /// CHECK: foo4 795*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 796*795d594fSAndroid Build Coastguard Worker /// CHECK: foo5 797*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 798*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 799*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 800*795d594fSAndroid Build Coastguard Worker """, 801*795d594fSAndroid Build Coastguard Worker """ 802*795d594fSAndroid Build Coastguard Worker foo5 803*795d594fSAndroid Build Coastguard Worker """) 804*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 805*795d594fSAndroid Build Coastguard Worker """ 806*795d594fSAndroid Build Coastguard Worker /// CHECK: foo1 807*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 808*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 809*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo2 810*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 811*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo3 812*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 813*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: foo6 814*795d594fSAndroid Build Coastguard Worker """, 815*795d594fSAndroid Build Coastguard Worker """ 816*795d594fSAndroid Build Coastguard Worker foo1 817*795d594fSAndroid Build Coastguard Worker foo2 818*795d594fSAndroid Build Coastguard Worker foo6 819*795d594fSAndroid Build Coastguard Worker """) 820*795d594fSAndroid Build Coastguard Worker 821*795d594fSAndroid Build Coastguard Worker def test_VariablesInBranches(self): 822*795d594fSAndroid Build Coastguard Worker self.assertMatches( 823*795d594fSAndroid Build Coastguard Worker """ 824*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 825*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:\d+>> 826*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 827*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: <<VarA>> == 12 828*795d594fSAndroid Build Coastguard Worker """, 829*795d594fSAndroid Build Coastguard Worker """ 830*795d594fSAndroid Build Coastguard Worker foo12 831*795d594fSAndroid Build Coastguard Worker """) 832*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 833*795d594fSAndroid Build Coastguard Worker """ 834*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 835*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:\d+>> 836*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 837*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: <<VarA>> == 99 838*795d594fSAndroid Build Coastguard Worker """, 839*795d594fSAndroid Build Coastguard Worker """ 840*795d594fSAndroid Build Coastguard Worker foo12 841*795d594fSAndroid Build Coastguard Worker """) 842*795d594fSAndroid Build Coastguard Worker self.assertMatches( 843*795d594fSAndroid Build Coastguard Worker """ 844*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 845*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:\d+>> 846*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: <<VarA>> == 12 847*795d594fSAndroid Build Coastguard Worker /// CHECK: bar<<VarB:M|N>> 848*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 849*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 850*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: "<<VarB>>" == "M" 851*795d594fSAndroid Build Coastguard Worker """, 852*795d594fSAndroid Build Coastguard Worker """ 853*795d594fSAndroid Build Coastguard Worker foo12 854*795d594fSAndroid Build Coastguard Worker barM 855*795d594fSAndroid Build Coastguard Worker """) 856*795d594fSAndroid Build Coastguard Worker self.assertMatches( 857*795d594fSAndroid Build Coastguard Worker """ 858*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 859*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:\d+>> 860*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: True 861*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:M|N>> 862*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 863*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: "<<VarA>>" == "M" 864*795d594fSAndroid Build Coastguard Worker """, 865*795d594fSAndroid Build Coastguard Worker """ 866*795d594fSAndroid Build Coastguard Worker fooM 867*795d594fSAndroid Build Coastguard Worker """) 868*795d594fSAndroid Build Coastguard Worker self.assertMatches( 869*795d594fSAndroid Build Coastguard Worker """ 870*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 871*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:A|B>> 872*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: False 873*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:A|B>> 874*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 875*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: False 876*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:A|B>> 877*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 878*795d594fSAndroid Build Coastguard Worker /// CHECK: foo<<VarA:M|N>> 879*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 880*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 881*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: "<<VarA>>" == "N" 882*795d594fSAndroid Build Coastguard Worker """, 883*795d594fSAndroid Build Coastguard Worker """ 884*795d594fSAndroid Build Coastguard Worker fooN 885*795d594fSAndroid Build Coastguard Worker """) 886*795d594fSAndroid Build Coastguard Worker 887*795d594fSAndroid Build Coastguard Worker def test_MalformedBranching(self): 888*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 889*795d594fSAndroid Build Coastguard Worker """ 890*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 891*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 892*795d594fSAndroid Build Coastguard Worker """, 893*795d594fSAndroid Build Coastguard Worker """ 894*795d594fSAndroid Build Coastguard Worker foo 895*795d594fSAndroid Build Coastguard Worker """) 896*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 897*795d594fSAndroid Build Coastguard Worker """ 898*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 899*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 900*795d594fSAndroid Build Coastguard Worker """, 901*795d594fSAndroid Build Coastguard Worker """ 902*795d594fSAndroid Build Coastguard Worker foo 903*795d594fSAndroid Build Coastguard Worker """) 904*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 905*795d594fSAndroid Build Coastguard Worker """ 906*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 907*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 908*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 909*795d594fSAndroid Build Coastguard Worker """, 910*795d594fSAndroid Build Coastguard Worker """ 911*795d594fSAndroid Build Coastguard Worker foo 912*795d594fSAndroid Build Coastguard Worker """) 913*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 914*795d594fSAndroid Build Coastguard Worker """ 915*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 916*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 917*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: 918*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 919*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 920*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 921*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 922*795d594fSAndroid Build Coastguard Worker """, 923*795d594fSAndroid Build Coastguard Worker """ 924*795d594fSAndroid Build Coastguard Worker foo 925*795d594fSAndroid Build Coastguard Worker """) 926*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 927*795d594fSAndroid Build Coastguard Worker """ 928*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 929*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 930*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 931*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 932*795d594fSAndroid Build Coastguard Worker /// CHECK-ELIF: 933*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 934*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 935*795d594fSAndroid Build Coastguard Worker """, 936*795d594fSAndroid Build Coastguard Worker """ 937*795d594fSAndroid Build Coastguard Worker foo 938*795d594fSAndroid Build Coastguard Worker """) 939*795d594fSAndroid Build Coastguard Worker self.assertBadStructure( 940*795d594fSAndroid Build Coastguard Worker """ 941*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: True 942*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 943*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 944*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 945*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 946*795d594fSAndroid Build Coastguard Worker /// CHECK: foo 947*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 948*795d594fSAndroid Build Coastguard Worker """, 949*795d594fSAndroid Build Coastguard Worker """ 950*795d594fSAndroid Build Coastguard Worker foo 951*795d594fSAndroid Build Coastguard Worker """) 952*795d594fSAndroid Build Coastguard Worker 953*795d594fSAndroid Build Coastguard Worker def test_hasIsaFeature(self): 954*795d594fSAndroid Build Coastguard Worker no_isa = None 955*795d594fSAndroid Build Coastguard Worker self.assertMatches( 956*795d594fSAndroid Build Coastguard Worker """ 957*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: hasIsaFeature('feature1') and not hasIsaFeature('feature2') 958*795d594fSAndroid Build Coastguard Worker """, 959*795d594fSAndroid Build Coastguard Worker """ 960*795d594fSAndroid Build Coastguard Worker foo 961*795d594fSAndroid Build Coastguard Worker """, 962*795d594fSAndroid Build Coastguard Worker no_isa, 963*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": True}) 964*795d594fSAndroid Build Coastguard Worker ) 965*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 966*795d594fSAndroid Build Coastguard Worker """ 967*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: not hasIsaFeature('feature1') 968*795d594fSAndroid Build Coastguard Worker """, 969*795d594fSAndroid Build Coastguard Worker """ 970*795d594fSAndroid Build Coastguard Worker foo 971*795d594fSAndroid Build Coastguard Worker """, 972*795d594fSAndroid Build Coastguard Worker no_isa, 973*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": True}) 974*795d594fSAndroid Build Coastguard Worker ) 975*795d594fSAndroid Build Coastguard Worker self.assertMatches( 976*795d594fSAndroid Build Coastguard Worker """ 977*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature('feature2') 978*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 979*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 980*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 981*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 982*795d594fSAndroid Build Coastguard Worker """, 983*795d594fSAndroid Build Coastguard Worker """ 984*795d594fSAndroid Build Coastguard Worker foo 985*795d594fSAndroid Build Coastguard Worker bar1 986*795d594fSAndroid Build Coastguard Worker """, 987*795d594fSAndroid Build Coastguard Worker no_isa, 988*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": False, "feature2": True}) 989*795d594fSAndroid Build Coastguard Worker ) 990*795d594fSAndroid Build Coastguard Worker self.assertMatches( 991*795d594fSAndroid Build Coastguard Worker """ 992*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: hasIsaFeature('feature1') and not hasIsaFeature('feature2') 993*795d594fSAndroid Build Coastguard Worker """, 994*795d594fSAndroid Build Coastguard Worker """ 995*795d594fSAndroid Build Coastguard Worker foo 996*795d594fSAndroid Build Coastguard Worker """, 997*795d594fSAndroid Build Coastguard Worker "some_isa", 998*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": True}) 999*795d594fSAndroid Build Coastguard Worker ) 1000*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1001*795d594fSAndroid Build Coastguard Worker """ 1002*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: not hasIsaFeature('feature1') 1003*795d594fSAndroid Build Coastguard Worker """, 1004*795d594fSAndroid Build Coastguard Worker """ 1005*795d594fSAndroid Build Coastguard Worker foo 1006*795d594fSAndroid Build Coastguard Worker """, 1007*795d594fSAndroid Build Coastguard Worker "some_isa", 1008*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": True}) 1009*795d594fSAndroid Build Coastguard Worker ) 1010*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1011*795d594fSAndroid Build Coastguard Worker """ 1012*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature('feature2') 1013*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1014*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1015*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1016*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1017*795d594fSAndroid Build Coastguard Worker """, 1018*795d594fSAndroid Build Coastguard Worker """ 1019*795d594fSAndroid Build Coastguard Worker foo 1020*795d594fSAndroid Build Coastguard Worker bar1 1021*795d594fSAndroid Build Coastguard Worker """, 1022*795d594fSAndroid Build Coastguard Worker "some_isa", 1023*795d594fSAndroid Build Coastguard Worker ImmutableDict({"feature1": False, "feature2": True}) 1024*795d594fSAndroid Build Coastguard Worker ) 1025*795d594fSAndroid Build Coastguard Worker 1026*795d594fSAndroid Build Coastguard Worker def test_readBarrierType(self): 1027*795d594fSAndroid Build Coastguard Worker # CheckEval assertions with no read barrier 1028*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1029*795d594fSAndroid Build Coastguard Worker """ 1030*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('none') 1031*795d594fSAndroid Build Coastguard Worker """, 1032*795d594fSAndroid Build Coastguard Worker """ 1033*795d594fSAndroid Build Coastguard Worker foo 1034*795d594fSAndroid Build Coastguard Worker """, 1035*795d594fSAndroid Build Coastguard Worker None, 1036*795d594fSAndroid Build Coastguard Worker read_barrier_type="none" 1037*795d594fSAndroid Build Coastguard Worker ) 1038*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1039*795d594fSAndroid Build Coastguard Worker """ 1040*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('none') 1041*795d594fSAndroid Build Coastguard Worker """, 1042*795d594fSAndroid Build Coastguard Worker """ 1043*795d594fSAndroid Build Coastguard Worker foo 1044*795d594fSAndroid Build Coastguard Worker """, 1045*795d594fSAndroid Build Coastguard Worker None, 1046*795d594fSAndroid Build Coastguard Worker read_barrier_type="baker" 1047*795d594fSAndroid Build Coastguard Worker ) 1048*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1049*795d594fSAndroid Build Coastguard Worker """ 1050*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('none') 1051*795d594fSAndroid Build Coastguard Worker """, 1052*795d594fSAndroid Build Coastguard Worker """ 1053*795d594fSAndroid Build Coastguard Worker foo 1054*795d594fSAndroid Build Coastguard Worker """, 1055*795d594fSAndroid Build Coastguard Worker None, 1056*795d594fSAndroid Build Coastguard Worker read_barrier_type="tablelookup" 1057*795d594fSAndroid Build Coastguard Worker ) 1058*795d594fSAndroid Build Coastguard Worker 1059*795d594fSAndroid Build Coastguard Worker # CheckEval assertions with "baker" read barrier 1060*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1061*795d594fSAndroid Build Coastguard Worker """ 1062*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('baker') 1063*795d594fSAndroid Build Coastguard Worker """, 1064*795d594fSAndroid Build Coastguard Worker """ 1065*795d594fSAndroid Build Coastguard Worker foo 1066*795d594fSAndroid Build Coastguard Worker """, 1067*795d594fSAndroid Build Coastguard Worker None, 1068*795d594fSAndroid Build Coastguard Worker read_barrier_type="baker" 1069*795d594fSAndroid Build Coastguard Worker ) 1070*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1071*795d594fSAndroid Build Coastguard Worker """ 1072*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('baker') 1073*795d594fSAndroid Build Coastguard Worker """, 1074*795d594fSAndroid Build Coastguard Worker """ 1075*795d594fSAndroid Build Coastguard Worker foo 1076*795d594fSAndroid Build Coastguard Worker """, 1077*795d594fSAndroid Build Coastguard Worker None, 1078*795d594fSAndroid Build Coastguard Worker read_barrier_type="none" 1079*795d594fSAndroid Build Coastguard Worker ) 1080*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1081*795d594fSAndroid Build Coastguard Worker """ 1082*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('baker') 1083*795d594fSAndroid Build Coastguard Worker """, 1084*795d594fSAndroid Build Coastguard Worker """ 1085*795d594fSAndroid Build Coastguard Worker foo 1086*795d594fSAndroid Build Coastguard Worker """, 1087*795d594fSAndroid Build Coastguard Worker None, 1088*795d594fSAndroid Build Coastguard Worker read_barrier_type="tablelookup" 1089*795d594fSAndroid Build Coastguard Worker ) 1090*795d594fSAndroid Build Coastguard Worker 1091*795d594fSAndroid Build Coastguard Worker # CheckEval assertions with "tablelookup" read barrier 1092*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1093*795d594fSAndroid Build Coastguard Worker """ 1094*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('tablelookup') 1095*795d594fSAndroid Build Coastguard Worker """, 1096*795d594fSAndroid Build Coastguard Worker """ 1097*795d594fSAndroid Build Coastguard Worker foo 1098*795d594fSAndroid Build Coastguard Worker """, 1099*795d594fSAndroid Build Coastguard Worker None, 1100*795d594fSAndroid Build Coastguard Worker read_barrier_type="tablelookup" 1101*795d594fSAndroid Build Coastguard Worker ) 1102*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1103*795d594fSAndroid Build Coastguard Worker """ 1104*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('tablelookup') 1105*795d594fSAndroid Build Coastguard Worker """, 1106*795d594fSAndroid Build Coastguard Worker """ 1107*795d594fSAndroid Build Coastguard Worker foo 1108*795d594fSAndroid Build Coastguard Worker """, 1109*795d594fSAndroid Build Coastguard Worker None, 1110*795d594fSAndroid Build Coastguard Worker read_barrier_type="none" 1111*795d594fSAndroid Build Coastguard Worker ) 1112*795d594fSAndroid Build Coastguard Worker self.assertDoesNotMatch( 1113*795d594fSAndroid Build Coastguard Worker """ 1114*795d594fSAndroid Build Coastguard Worker /// CHECK-EVAL: readBarrierType('tablelookup') 1115*795d594fSAndroid Build Coastguard Worker """, 1116*795d594fSAndroid Build Coastguard Worker """ 1117*795d594fSAndroid Build Coastguard Worker foo 1118*795d594fSAndroid Build Coastguard Worker """, 1119*795d594fSAndroid Build Coastguard Worker None, 1120*795d594fSAndroid Build Coastguard Worker read_barrier_type="baker" 1121*795d594fSAndroid Build Coastguard Worker ) 1122*795d594fSAndroid Build Coastguard Worker 1123*795d594fSAndroid Build Coastguard Worker # CheckIf assertions with no read barrier 1124*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1125*795d594fSAndroid Build Coastguard Worker """ 1126*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: readBarrierType('none') 1127*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1128*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1129*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1130*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1131*795d594fSAndroid Build Coastguard Worker """, 1132*795d594fSAndroid Build Coastguard Worker """ 1133*795d594fSAndroid Build Coastguard Worker foo 1134*795d594fSAndroid Build Coastguard Worker bar1 1135*795d594fSAndroid Build Coastguard Worker """, 1136*795d594fSAndroid Build Coastguard Worker None, 1137*795d594fSAndroid Build Coastguard Worker read_barrier_type="none" 1138*795d594fSAndroid Build Coastguard Worker ) 1139*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1140*795d594fSAndroid Build Coastguard Worker """ 1141*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: not readBarrierType('none') 1142*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1143*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1144*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1145*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1146*795d594fSAndroid Build Coastguard Worker """, 1147*795d594fSAndroid Build Coastguard Worker """ 1148*795d594fSAndroid Build Coastguard Worker foo 1149*795d594fSAndroid Build Coastguard Worker bar2 1150*795d594fSAndroid Build Coastguard Worker """, 1151*795d594fSAndroid Build Coastguard Worker None, 1152*795d594fSAndroid Build Coastguard Worker read_barrier_type="none" 1153*795d594fSAndroid Build Coastguard Worker ) 1154*795d594fSAndroid Build Coastguard Worker 1155*795d594fSAndroid Build Coastguard Worker # CheckIf assertions with 'baker' read barrier 1156*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1157*795d594fSAndroid Build Coastguard Worker """ 1158*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: readBarrierType('baker') 1159*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1160*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1161*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1162*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1163*795d594fSAndroid Build Coastguard Worker """, 1164*795d594fSAndroid Build Coastguard Worker """ 1165*795d594fSAndroid Build Coastguard Worker foo 1166*795d594fSAndroid Build Coastguard Worker bar1 1167*795d594fSAndroid Build Coastguard Worker """, 1168*795d594fSAndroid Build Coastguard Worker None, 1169*795d594fSAndroid Build Coastguard Worker read_barrier_type="baker" 1170*795d594fSAndroid Build Coastguard Worker ) 1171*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1172*795d594fSAndroid Build Coastguard Worker """ 1173*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: not readBarrierType('baker') 1174*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1175*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1176*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1177*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1178*795d594fSAndroid Build Coastguard Worker """, 1179*795d594fSAndroid Build Coastguard Worker """ 1180*795d594fSAndroid Build Coastguard Worker foo 1181*795d594fSAndroid Build Coastguard Worker bar2 1182*795d594fSAndroid Build Coastguard Worker """, 1183*795d594fSAndroid Build Coastguard Worker None, 1184*795d594fSAndroid Build Coastguard Worker read_barrier_type="baker" 1185*795d594fSAndroid Build Coastguard Worker ) 1186*795d594fSAndroid Build Coastguard Worker 1187*795d594fSAndroid Build Coastguard Worker # CheckIf assertions with 'tablelookup' read barrier 1188*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1189*795d594fSAndroid Build Coastguard Worker """ 1190*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: readBarrierType('tablelookup') 1191*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1192*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1193*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1194*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1195*795d594fSAndroid Build Coastguard Worker """, 1196*795d594fSAndroid Build Coastguard Worker """ 1197*795d594fSAndroid Build Coastguard Worker foo 1198*795d594fSAndroid Build Coastguard Worker bar1 1199*795d594fSAndroid Build Coastguard Worker """, 1200*795d594fSAndroid Build Coastguard Worker None, 1201*795d594fSAndroid Build Coastguard Worker read_barrier_type="tablelookup" 1202*795d594fSAndroid Build Coastguard Worker ) 1203*795d594fSAndroid Build Coastguard Worker self.assertMatches( 1204*795d594fSAndroid Build Coastguard Worker """ 1205*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: not readBarrierType('tablelookup') 1206*795d594fSAndroid Build Coastguard Worker /// CHECK: bar1 1207*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 1208*795d594fSAndroid Build Coastguard Worker /// CHECK: bar2 1209*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: 1210*795d594fSAndroid Build Coastguard Worker """, 1211*795d594fSAndroid Build Coastguard Worker """ 1212*795d594fSAndroid Build Coastguard Worker foo 1213*795d594fSAndroid Build Coastguard Worker bar2 1214*795d594fSAndroid Build Coastguard Worker """, 1215*795d594fSAndroid Build Coastguard Worker None, 1216*795d594fSAndroid Build Coastguard Worker read_barrier_type="tablelookup" 1217*795d594fSAndroid Build Coastguard Worker ) 1218