• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 package com.android.tools.r8;
5 
6 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
7 import com.android.tools.r8.R8RunArtTestsTest.DexTool;
8 import com.android.tools.r8.ToolHelper.DexVm;
9 import java.util.Arrays;
10 import java.util.EnumSet;
11 
12 public class TestCondition {
13 
14   static class ToolSet {
15 
16     final EnumSet<DexTool> set;
17 
ToolSet(EnumSet<DexTool> set)18     public ToolSet(EnumSet<DexTool> set) {
19       this.set = set;
20     }
21   }
22 
23   static class CompilerSet {
24 
25     final EnumSet<CompilerUnderTest> set;
26 
CompilerSet(EnumSet<CompilerUnderTest> set)27     public CompilerSet(EnumSet<CompilerUnderTest> set) {
28       this.set = set;
29     }
30   }
31 
32   static class RuntimeSet {
33 
34     final EnumSet<DexVm> set;
35 
RuntimeSet(EnumSet<DexVm> set)36     public RuntimeSet(EnumSet<DexVm> set) {
37       this.set = set;
38     }
39   }
40 
41   static class CompilationModeSet {
42 
43     final EnumSet<CompilationMode> set;
44 
CompilationModeSet(EnumSet<CompilationMode> set)45     public CompilationModeSet(EnumSet<CompilationMode> set) {
46       this.set = set;
47     }
48   }
49 
50   public static final CompilerSet D8_COMPILER = compilers(CompilerUnderTest.D8);
51   // R8_COMPILER refers to R8 both in the standalone setting and after D8
52   // R8_NOT_AFTER_D8_COMPILER and R8_AFTER_D8_COMPILER refers to the standalone and the combined
53   // settings, respectively
54   public static final CompilerSet R8_COMPILER =
55       compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8);
56   public static final CompilerSet R8_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8_AFTER_D8);
57   public static final CompilerSet R8_NOT_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8);
58 
59   public static final CompilationModeSet DEBUG_MODE =
60       new CompilationModeSet(EnumSet.of(CompilationMode.DEBUG));
61   public static final CompilationModeSet RELEASE_MODE =
62       new CompilationModeSet(EnumSet.of(CompilationMode.RELEASE));
63 
64   private static final ToolSet ANY_TOOL = new ToolSet(EnumSet.allOf(DexTool.class));
65   private static final CompilerSet ANY_COMPILER =
66       new CompilerSet(EnumSet.allOf(CompilerUnderTest.class));
67   private static final RuntimeSet ANY_RUNTIME = new RuntimeSet(EnumSet.allOf(DexVm.class));
68   private static final CompilationModeSet ANY_MODE =
69       new CompilationModeSet(EnumSet.allOf(CompilationMode.class));
70 
71   private final EnumSet<DexTool> dexTools;
72   private final EnumSet<CompilerUnderTest> compilers;
73   private final EnumSet<DexVm> dexVms;
74   private final EnumSet<CompilationMode> compilationModes;
75 
TestCondition( EnumSet<DexTool> dexTools, EnumSet<CompilerUnderTest> compilers, EnumSet<DexVm> dexVms, EnumSet<CompilationMode> compilationModes)76   public TestCondition(
77       EnumSet<DexTool> dexTools,
78       EnumSet<CompilerUnderTest> compilers,
79       EnumSet<DexVm> dexVms,
80       EnumSet<CompilationMode> compilationModes) {
81     this.dexTools = dexTools;
82     this.compilers = compilers;
83     this.dexVms = dexVms;
84     this.compilationModes = compilationModes;
85   }
86 
tools(DexTool... tools)87   public static ToolSet tools(DexTool... tools) {
88     assert tools.length > 0;
89     return new ToolSet(EnumSet.copyOf(Arrays.asList(tools)));
90   }
91 
compilers(CompilerUnderTest... compilers)92   public static CompilerSet compilers(CompilerUnderTest... compilers) {
93     assert compilers.length > 0;
94     return new CompilerSet(EnumSet.copyOf(Arrays.asList(compilers)));
95   }
96 
runtimes(DexVm... runtimes)97   public static RuntimeSet runtimes(DexVm... runtimes) {
98     assert runtimes.length > 0;
99     return new RuntimeSet(EnumSet.copyOf(Arrays.asList(runtimes)));
100   }
101 
match( ToolSet tools, CompilerSet compilers, RuntimeSet runtimes, CompilationModeSet compilationModes)102   public static TestCondition match(
103       ToolSet tools,
104       CompilerSet compilers,
105       RuntimeSet runtimes,
106       CompilationModeSet compilationModes) {
107     return new TestCondition(tools.set, compilers.set, runtimes.set, compilationModes.set);
108   }
109 
match(ToolSet tools, CompilerSet compilers, RuntimeSet runtimes)110   public static TestCondition match(ToolSet tools, CompilerSet compilers, RuntimeSet runtimes) {
111     return match(tools, compilers, runtimes, TestCondition.ANY_MODE);
112   }
113 
any()114   public static TestCondition any() {
115     return match(TestCondition.ANY_TOOL, TestCondition.ANY_COMPILER, TestCondition.ANY_RUNTIME);
116   }
117 
match(ToolSet tools)118   public static TestCondition match(ToolSet tools) {
119     return match(tools, TestCondition.ANY_COMPILER, TestCondition.ANY_RUNTIME);
120   }
121 
match(ToolSet tools, CompilerSet compilers)122   public static TestCondition match(ToolSet tools, CompilerSet compilers) {
123     return match(tools, compilers, TestCondition.ANY_RUNTIME);
124   }
125 
match(ToolSet tools, RuntimeSet runtimes)126   public static TestCondition match(ToolSet tools, RuntimeSet runtimes) {
127     return match(tools, TestCondition.ANY_COMPILER, runtimes);
128   }
129 
match(CompilerSet compilers)130   public static TestCondition match(CompilerSet compilers) {
131     return match(TestCondition.ANY_TOOL, compilers, TestCondition.ANY_RUNTIME);
132   }
133 
match(CompilerSet compilers, CompilationModeSet compilationModes)134   public static TestCondition match(CompilerSet compilers, CompilationModeSet compilationModes) {
135     return match(TestCondition.ANY_TOOL, compilers, TestCondition.ANY_RUNTIME, compilationModes);
136   }
137 
match(CompilerSet compilers, RuntimeSet runtimes)138   public static TestCondition match(CompilerSet compilers, RuntimeSet runtimes) {
139     return match(TestCondition.ANY_TOOL, compilers, runtimes);
140   }
141 
match(RuntimeSet runtimes)142   public static TestCondition match(RuntimeSet runtimes) {
143     return match(TestCondition.ANY_TOOL, TestCondition.ANY_COMPILER, runtimes);
144   }
145 
test( DexTool dexTool, CompilerUnderTest compilerUnderTest, DexVm dexVm, CompilationMode compilationMode)146   public boolean test(
147       DexTool dexTool,
148       CompilerUnderTest compilerUnderTest,
149       DexVm dexVm,
150       CompilationMode compilationMode) {
151     return dexTools.contains(dexTool)
152         && compilers.contains(compilerUnderTest)
153         && dexVms.contains(dexVm)
154         && compilationModes.contains(compilationMode);
155   }
156 }
157