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 kBetween = GpuControlList::kBetween;
18 constexpr auto kEQ = GpuControlList::kEQ;
19 constexpr auto kLT = GpuControlList::kLT;
20 constexpr auto kLE = GpuControlList::kLE;
21 constexpr auto kGT = GpuControlList::kGT;
22 constexpr auto kGE = GpuControlList::kGE;
23 constexpr auto kAny = GpuControlList::kAny;
24 
25 }  // namespace anonymous
26 
27 class VersionTest : public testing::Test {
28  public:
29   VersionTest() = default;
30   ~VersionTest() override = default;
31 
32   typedef GpuControlList::Version Version;
33 };
34 
TEST_F(VersionTest,VersionComparison)35 TEST_F(VersionTest, VersionComparison) {
36   {
37     Version info = {kAny, kNumerical, nullptr, nullptr};
38     EXPECT_TRUE(info.Contains("0"));
39     EXPECT_TRUE(info.Contains("8.9"));
40     EXPECT_TRUE(info.Contains("100"));
41     EXPECT_TRUE(info.Contains("1.9.alpha"));
42   }
43   {
44     Version info = {kGT, kNumerical, "8.9", nullptr};
45     EXPECT_FALSE(info.Contains("7"));
46     EXPECT_FALSE(info.Contains("8.9"));
47     EXPECT_FALSE(info.Contains("8.9.hs762"));
48     EXPECT_FALSE(info.Contains("8.9.1"));
49     EXPECT_TRUE(info.Contains("9"));
50     EXPECT_TRUE(info.Contains("9.hs762"));
51   }
52   {
53     Version info = {kGE, kNumerical, "8.9", nullptr};
54     EXPECT_FALSE(info.Contains("7"));
55     EXPECT_FALSE(info.Contains("7.07hdy"));
56     EXPECT_TRUE(info.Contains("8.9"));
57     EXPECT_TRUE(info.Contains("8.9.1"));
58     EXPECT_TRUE(info.Contains("8.9.1beta0"));
59     EXPECT_TRUE(info.Contains("9"));
60     EXPECT_TRUE(info.Contains("9.0rel"));
61   }
62   {
63     Version info = {kEQ, kNumerical, "8.9", nullptr};
64     EXPECT_FALSE(info.Contains("7"));
65     EXPECT_TRUE(info.Contains("8"));
66     EXPECT_TRUE(info.Contains("8.1uhdy"));
67     EXPECT_TRUE(info.Contains("8.9"));
68     EXPECT_TRUE(info.Contains("8.9.8alp9"));
69     EXPECT_TRUE(info.Contains("8.9.1"));
70     EXPECT_FALSE(info.Contains("9"));
71   }
72   {
73     Version info = {kLT, kNumerical, "8.9", nullptr};
74     EXPECT_TRUE(info.Contains("7"));
75     EXPECT_TRUE(info.Contains("7.txt"));
76     EXPECT_TRUE(info.Contains("8.8"));
77     EXPECT_TRUE(info.Contains("8.8.test"));
78     EXPECT_FALSE(info.Contains("8"));
79     EXPECT_FALSE(info.Contains("8.9"));
80     EXPECT_FALSE(info.Contains("8.9.1"));
81     EXPECT_FALSE(info.Contains("8.9.duck"));
82     EXPECT_FALSE(info.Contains("9"));
83   }
84   {
85     Version info = {kLE, kNumerical, "8.9", nullptr};
86     EXPECT_TRUE(info.Contains("7"));
87     EXPECT_TRUE(info.Contains("8.8"));
88     EXPECT_TRUE(info.Contains("8"));
89     EXPECT_TRUE(info.Contains("8.9"));
90     EXPECT_TRUE(info.Contains("8.9.chicken"));
91     EXPECT_TRUE(info.Contains("8.9.1"));
92     EXPECT_FALSE(info.Contains("9"));
93     EXPECT_FALSE(info.Contains("9.pork"));
94   }
95   {
96     Version info = {kBetween, kNumerical, "8.9", "9.1"};
97     EXPECT_FALSE(info.Contains("7"));
98     EXPECT_FALSE(info.Contains("8.8"));
99     EXPECT_TRUE(info.Contains("8"));
100     EXPECT_TRUE(info.Contains("8.9"));
101     EXPECT_TRUE(info.Contains("8.9.1"));
102     EXPECT_TRUE(info.Contains("9"));
103     EXPECT_TRUE(info.Contains("9.1"));
104     EXPECT_TRUE(info.Contains("9.1.9"));
105     EXPECT_FALSE(info.Contains("9.2"));
106     EXPECT_FALSE(info.Contains("10"));
107   }
108 }
109 
TEST_F(VersionTest,DateComparison)110 TEST_F(VersionTest, DateComparison) {
111   // When we use '-' as splitter, we assume a format of mm-dd-yyyy
112   // or mm-yyyy, i.e., a date.
113   {
114     Version info = {kEQ, kNumerical, "1976.3.21", nullptr};
115     EXPECT_TRUE(info.Contains("3-21-1976", '-'));
116     EXPECT_TRUE(info.Contains("3-1976", '-'));
117     EXPECT_TRUE(info.Contains("03-1976", '-'));
118     EXPECT_FALSE(info.Contains("21-3-1976", '-'));
119   }
120   {
121     Version info = {kGT, kNumerical, "1976.3.21", nullptr};
122     EXPECT_TRUE(info.Contains("3-22-1976", '-'));
123     EXPECT_TRUE(info.Contains("4-1976", '-'));
124     EXPECT_TRUE(info.Contains("04-1976", '-'));
125     EXPECT_FALSE(info.Contains("3-1976", '-'));
126     EXPECT_FALSE(info.Contains("2-1976", '-'));
127   }
128   {
129     Version info = {kBetween, kNumerical, "1976.3.21", "2012.12.25"};
130     EXPECT_FALSE(info.Contains("3-20-1976", '-'));
131     EXPECT_TRUE(info.Contains("3-21-1976", '-'));
132     EXPECT_TRUE(info.Contains("3-22-1976", '-'));
133     EXPECT_TRUE(info.Contains("3-1976", '-'));
134     EXPECT_TRUE(info.Contains("4-1976", '-'));
135     EXPECT_TRUE(info.Contains("1-1-2000", '-'));
136     EXPECT_TRUE(info.Contains("1-2000", '-'));
137     EXPECT_TRUE(info.Contains("2000", '-'));
138     EXPECT_TRUE(info.Contains("11-2012", '-'));
139     EXPECT_TRUE(info.Contains("12-2012", '-'));
140     EXPECT_TRUE(info.Contains("12-24-2012", '-'));
141     EXPECT_TRUE(info.Contains("12-25-2012", '-'));
142     EXPECT_FALSE(info.Contains("12-26-2012", '-'));
143     EXPECT_FALSE(info.Contains("1-2013", '-'));
144     EXPECT_FALSE(info.Contains("2013", '-'));
145   }
146 }
147 
TEST_F(VersionTest,LexicalComparison)148 TEST_F(VersionTest, LexicalComparison) {
149   // When we use lexical style, we assume a format major.minor.*.
150   // We apply numerical comparison to major, lexical comparison to others.
151   {
152     Version info = {kLT, kLexical, "8.201", nullptr};
153     EXPECT_TRUE(info.Contains("8.001.100"));
154     EXPECT_TRUE(info.Contains("8.109"));
155     EXPECT_TRUE(info.Contains("8.10900"));
156     EXPECT_TRUE(info.Contains("8.109.100"));
157     EXPECT_TRUE(info.Contains("8.2"));
158     EXPECT_TRUE(info.Contains("8.20"));
159     EXPECT_TRUE(info.Contains("8.200"));
160     EXPECT_TRUE(info.Contains("8.20.100"));
161     EXPECT_FALSE(info.Contains("8.201"));
162     EXPECT_FALSE(info.Contains("8.2010"));
163     EXPECT_FALSE(info.Contains("8.21"));
164     EXPECT_FALSE(info.Contains("8.21.100"));
165     EXPECT_FALSE(info.Contains("9.002"));
166     EXPECT_FALSE(info.Contains("9.201"));
167     EXPECT_FALSE(info.Contains("12"));
168     EXPECT_FALSE(info.Contains("12.201"));
169   }
170   {
171     Version info = {kLT, kLexical, "9.002", nullptr};
172     EXPECT_TRUE(info.Contains("8.001.100"));
173     EXPECT_TRUE(info.Contains("8.109"));
174     EXPECT_TRUE(info.Contains("8.10900"));
175     EXPECT_TRUE(info.Contains("8.109.100"));
176     EXPECT_TRUE(info.Contains("8.2"));
177     EXPECT_TRUE(info.Contains("8.20"));
178     EXPECT_TRUE(info.Contains("8.200"));
179     EXPECT_TRUE(info.Contains("8.20.100"));
180     EXPECT_TRUE(info.Contains("8.201"));
181     EXPECT_TRUE(info.Contains("8.2010"));
182     EXPECT_TRUE(info.Contains("8.21"));
183     EXPECT_TRUE(info.Contains("8.21.100"));
184     EXPECT_FALSE(info.Contains("9.002"));
185     EXPECT_FALSE(info.Contains("9.201"));
186     EXPECT_FALSE(info.Contains("12"));
187     EXPECT_FALSE(info.Contains("12.201"));
188   }
189 }
190 
191 }  // namespace gpu
192