1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <stddef.h>
6
7 #include "gpu/config/gpu_control_list.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace gpu {
11
12 namespace {
13
14 constexpr auto kNumerical = GpuControlList::kVersionStyleNumerical;
15 constexpr auto kLexical = GpuControlList::kVersionStyleLexical;
16
17 constexpr auto kCommon = GpuControlList::kVersionSchemaCommon;
18 constexpr auto kIntelDriver = GpuControlList::kVersionSchemaIntelDriver;
19 constexpr auto kNvidiaDriver = GpuControlList::kVersionSchemaNvidiaDriver;
20
21 constexpr auto kBetween = GpuControlList::kBetween;
22 constexpr auto kEQ = GpuControlList::kEQ;
23 constexpr auto kLT = GpuControlList::kLT;
24 constexpr auto kLE = GpuControlList::kLE;
25 constexpr auto kGT = GpuControlList::kGT;
26 constexpr auto kGE = GpuControlList::kGE;
27 constexpr auto kAny = GpuControlList::kAny;
28
29 } // namespace anonymous
30
31 class VersionTest : public testing::Test {
32 public:
33 VersionTest() = default;
34 ~VersionTest() override = default;
35
36 typedef GpuControlList::Version Version;
37 };
38
TEST_F(VersionTest,VersionComparison)39 TEST_F(VersionTest, VersionComparison) {
40 {
41 Version info = {kAny, kNumerical, kCommon, nullptr, nullptr};
42 EXPECT_TRUE(info.Contains("0"));
43 EXPECT_TRUE(info.Contains("8.9"));
44 EXPECT_TRUE(info.Contains("100"));
45 EXPECT_TRUE(info.Contains("1.9.alpha"));
46 }
47 {
48 Version info = {kGT, kNumerical, kCommon, "8.9", nullptr};
49 EXPECT_FALSE(info.Contains("7"));
50 EXPECT_FALSE(info.Contains("8.9"));
51 EXPECT_FALSE(info.Contains("8.9.hs762"));
52 EXPECT_FALSE(info.Contains("8.9.1"));
53 EXPECT_TRUE(info.Contains("9"));
54 EXPECT_TRUE(info.Contains("9.hs762"));
55 }
56 {
57 Version info = {kGE, kNumerical, kCommon, "8.9", nullptr};
58 EXPECT_FALSE(info.Contains("7"));
59 EXPECT_FALSE(info.Contains("7.07hdy"));
60 EXPECT_TRUE(info.Contains("8.9"));
61 EXPECT_TRUE(info.Contains("8.9.1"));
62 EXPECT_TRUE(info.Contains("8.9.1beta0"));
63 EXPECT_TRUE(info.Contains("9"));
64 EXPECT_TRUE(info.Contains("9.0rel"));
65 }
66 {
67 Version info = {kEQ, kNumerical, kCommon, "8.9", nullptr};
68 EXPECT_FALSE(info.Contains("7"));
69 EXPECT_TRUE(info.Contains("8"));
70 EXPECT_TRUE(info.Contains("8.1uhdy"));
71 EXPECT_TRUE(info.Contains("8.9"));
72 EXPECT_TRUE(info.Contains("8.9.8alp9"));
73 EXPECT_TRUE(info.Contains("8.9.1"));
74 EXPECT_FALSE(info.Contains("9"));
75 }
76 {
77 Version info = {kLT, kNumerical, kCommon, "8.9", nullptr};
78 EXPECT_TRUE(info.Contains("7"));
79 EXPECT_TRUE(info.Contains("7.txt"));
80 EXPECT_TRUE(info.Contains("8.8"));
81 EXPECT_TRUE(info.Contains("8.8.test"));
82 EXPECT_FALSE(info.Contains("8"));
83 EXPECT_FALSE(info.Contains("8.9"));
84 EXPECT_FALSE(info.Contains("8.9.1"));
85 EXPECT_FALSE(info.Contains("8.9.duck"));
86 EXPECT_FALSE(info.Contains("9"));
87 }
88 {
89 Version info = {kLE, kNumerical, kCommon, "8.9", nullptr};
90 EXPECT_TRUE(info.Contains("7"));
91 EXPECT_TRUE(info.Contains("8.8"));
92 EXPECT_TRUE(info.Contains("8"));
93 EXPECT_TRUE(info.Contains("8.9"));
94 EXPECT_TRUE(info.Contains("8.9.chicken"));
95 EXPECT_TRUE(info.Contains("8.9.1"));
96 EXPECT_FALSE(info.Contains("9"));
97 EXPECT_FALSE(info.Contains("9.pork"));
98 }
99 {
100 Version info = {kBetween, kNumerical, kCommon, "8.9", "9.1"};
101 EXPECT_FALSE(info.Contains("7"));
102 EXPECT_FALSE(info.Contains("8.8"));
103 EXPECT_TRUE(info.Contains("8"));
104 EXPECT_TRUE(info.Contains("8.9"));
105 EXPECT_TRUE(info.Contains("8.9.1"));
106 EXPECT_TRUE(info.Contains("9"));
107 EXPECT_TRUE(info.Contains("9.1"));
108 EXPECT_TRUE(info.Contains("9.1.9"));
109 EXPECT_FALSE(info.Contains("9.2"));
110 EXPECT_FALSE(info.Contains("10"));
111 }
112 }
113
TEST_F(VersionTest,DateComparison)114 TEST_F(VersionTest, DateComparison) {
115 // When we use '-' as splitter, we assume a format of mm-dd-yyyy
116 // or mm-yyyy, i.e., a date.
117 {
118 Version info = {kEQ, kNumerical, kCommon, "1976.3.21", nullptr};
119 EXPECT_TRUE(info.Contains("3-21-1976", '-'));
120 EXPECT_TRUE(info.Contains("3-1976", '-'));
121 EXPECT_TRUE(info.Contains("03-1976", '-'));
122 EXPECT_FALSE(info.Contains("21-3-1976", '-'));
123 }
124 {
125 Version info = {kGT, kNumerical, kCommon, "1976.3.21", nullptr};
126 EXPECT_TRUE(info.Contains("3-22-1976", '-'));
127 EXPECT_TRUE(info.Contains("4-1976", '-'));
128 EXPECT_TRUE(info.Contains("04-1976", '-'));
129 EXPECT_FALSE(info.Contains("3-1976", '-'));
130 EXPECT_FALSE(info.Contains("2-1976", '-'));
131 }
132 {
133 Version info = {kBetween, kNumerical, kCommon, "1976.3.21", "2012.12.25"};
134 EXPECT_FALSE(info.Contains("3-20-1976", '-'));
135 EXPECT_TRUE(info.Contains("3-21-1976", '-'));
136 EXPECT_TRUE(info.Contains("3-22-1976", '-'));
137 EXPECT_TRUE(info.Contains("3-1976", '-'));
138 EXPECT_TRUE(info.Contains("4-1976", '-'));
139 EXPECT_TRUE(info.Contains("1-1-2000", '-'));
140 EXPECT_TRUE(info.Contains("1-2000", '-'));
141 EXPECT_TRUE(info.Contains("2000", '-'));
142 EXPECT_TRUE(info.Contains("11-2012", '-'));
143 EXPECT_TRUE(info.Contains("12-2012", '-'));
144 EXPECT_TRUE(info.Contains("12-24-2012", '-'));
145 EXPECT_TRUE(info.Contains("12-25-2012", '-'));
146 EXPECT_FALSE(info.Contains("12-26-2012", '-'));
147 EXPECT_FALSE(info.Contains("1-2013", '-'));
148 EXPECT_FALSE(info.Contains("2013", '-'));
149 }
150 }
151
TEST_F(VersionTest,LexicalComparison)152 TEST_F(VersionTest, LexicalComparison) {
153 // When we use lexical style, we assume a format major.minor.*.
154 // We apply numerical comparison to major, lexical comparison to others.
155 {
156 Version info = {kLT, kLexical, kCommon, "8.201", nullptr};
157 EXPECT_TRUE(info.Contains("8.001.100"));
158 EXPECT_TRUE(info.Contains("8.109"));
159 EXPECT_TRUE(info.Contains("8.10900"));
160 EXPECT_TRUE(info.Contains("8.109.100"));
161 EXPECT_TRUE(info.Contains("8.2"));
162 EXPECT_TRUE(info.Contains("8.20"));
163 EXPECT_TRUE(info.Contains("8.200"));
164 EXPECT_TRUE(info.Contains("8.20.100"));
165 EXPECT_FALSE(info.Contains("8.201"));
166 EXPECT_FALSE(info.Contains("8.2010"));
167 EXPECT_FALSE(info.Contains("8.21"));
168 EXPECT_FALSE(info.Contains("8.21.100"));
169 EXPECT_FALSE(info.Contains("9.002"));
170 EXPECT_FALSE(info.Contains("9.201"));
171 EXPECT_FALSE(info.Contains("12"));
172 EXPECT_FALSE(info.Contains("12.201"));
173 }
174 {
175 Version info = {kLT, kLexical, kCommon, "9.002", nullptr};
176 EXPECT_TRUE(info.Contains("8.001.100"));
177 EXPECT_TRUE(info.Contains("8.109"));
178 EXPECT_TRUE(info.Contains("8.10900"));
179 EXPECT_TRUE(info.Contains("8.109.100"));
180 EXPECT_TRUE(info.Contains("8.2"));
181 EXPECT_TRUE(info.Contains("8.20"));
182 EXPECT_TRUE(info.Contains("8.200"));
183 EXPECT_TRUE(info.Contains("8.20.100"));
184 EXPECT_TRUE(info.Contains("8.201"));
185 EXPECT_TRUE(info.Contains("8.2010"));
186 EXPECT_TRUE(info.Contains("8.21"));
187 EXPECT_TRUE(info.Contains("8.21.100"));
188 EXPECT_FALSE(info.Contains("9.002"));
189 EXPECT_FALSE(info.Contains("9.201"));
190 EXPECT_FALSE(info.Contains("12"));
191 EXPECT_FALSE(info.Contains("12.201"));
192 }
193 }
194
TEST_F(VersionTest,IntelDriverSchema)195 TEST_F(VersionTest, IntelDriverSchema) {
196 {
197 // New drivers, AA.BB.CCC.DDDD, only CCC.DDDD is considered.
198 Version info = {kLT, kNumerical, kIntelDriver, "25.20.100.6952", nullptr};
199 EXPECT_TRUE(info.Contains("0.0.100.6000"));
200 EXPECT_FALSE(info.Contains("0.0.100.7000"));
201 EXPECT_FALSE(info.Contains("0.0.200.6000"));
202 EXPECT_TRUE(info.Contains("26.20.100.6000"));
203 EXPECT_FALSE(info.Contains("24.20.100.7000"));
204
205 // Doesn't match old drivers.
206 EXPECT_FALSE(info.Contains("22.20.16.7000"));
207 EXPECT_FALSE(info.Contains("15.45.16.4248"));
208 }
209 {
210 // Old drivers, AA.BB.CC.DDDD, only DDDD is considered.
211 Version info = {kGT, kNumerical, kIntelDriver, "10.18.15.4256", nullptr};
212 EXPECT_TRUE(info.Contains("0.0.0.6000"));
213 EXPECT_FALSE(info.Contains("0.0.0.4000"));
214 EXPECT_FALSE(info.Contains("0.0.16.4000"));
215 EXPECT_TRUE(info.Contains("10.18.15.4279"));
216 EXPECT_FALSE(info.Contains("15.40.19.4058"));
217
218 // Doesn't match new drivers.
219 EXPECT_FALSE(info.Contains("24.20.100.6346"));
220 }
221 }
222
TEST_F(VersionTest,NvidiaDriverSchema)223 TEST_F(VersionTest, NvidiaDriverSchema) {
224 {
225 // Nvidia drivers, XX.XX.XXXA.AABB, only AAA.BB is considered. The version
226 // is specified as "AAA.BB" or "AAA" in the workaround file.
227 {
228 // "AAA.BB" should exactly specify one version.
229 Version info = {kLT, kNumerical, kNvidiaDriver, "234.56", nullptr};
230 EXPECT_TRUE(info.Contains("26.10.0012.3455"));
231 EXPECT_TRUE(info.Contains("00.00.0012.3455"));
232 EXPECT_TRUE(info.Contains("00.00.012.3455"));
233 EXPECT_TRUE(info.Contains("00.00.12.3455"));
234 EXPECT_FALSE(info.Contains("26.10.0012.3456"));
235 EXPECT_FALSE(info.Contains("26.10.012.3456"));
236 EXPECT_FALSE(info.Contains("26.10.12.3456"));
237 EXPECT_FALSE(info.Contains("26.10.0012.3457"));
238 EXPECT_FALSE(info.Contains("00.00.0012.3457"));
239 EXPECT_TRUE(info.Contains("26.10.0012.2457"));
240 EXPECT_TRUE(info.Contains("26.10.0011.3457"));
241
242 // Leading zeros in the third stanza are okay.
243 EXPECT_TRUE(info.Contains("26.10.0002.3455"));
244 EXPECT_FALSE(info.Contains("26.10.0002.3456"));
245 EXPECT_FALSE(info.Contains("26.10.0002.3457"));
246 EXPECT_TRUE(info.Contains("26.10.0010.3457"));
247 EXPECT_TRUE(info.Contains("26.10.0000.3457"));
248
249 // Missing zeros in the fourth stanza are replaced.
250 EXPECT_TRUE(info.Contains("26.10.0012.455"));
251 EXPECT_TRUE(info.Contains("26.10.0012.57"));
252 EXPECT_FALSE(info.Contains("26.10.0013.456"));
253 EXPECT_FALSE(info.Contains("26.10.0013.57"));
254
255 // Too short is rejected.
256 EXPECT_FALSE(info.Contains("26.10..57"));
257 EXPECT_FALSE(info.Contains("26.10.100"));
258 EXPECT_FALSE(info.Contains("26.10.100."));
259 }
260
261 {
262 // "AAA" should allow "AAA.*"
263 Version info = {kEQ, kNumerical, kNvidiaDriver, "234", nullptr};
264 EXPECT_FALSE(info.Contains("26.10.0012.3556"));
265 EXPECT_TRUE(info.Contains("26.10.0012.3456"));
266 }
267 }
268 }
269
270 } // namespace gpu
271