gpu_control_list_version_unittest.cc 9.5 KB

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