Add packaging for TIZEN
[platform/upstream/VK-GL-CTS.git] / scripts / check_resolution_list.py
1 # -*- coding: utf-8 -*-
2
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
6 #
7 # Copyright 2015 The Android Open Source Project
8 #
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #      http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20 #
21 #-------------------------------------------------------------------------
22
23 import re
24 import sys
25 from fnmatch import fnmatch
26
27 def fail (msg):
28         print "ERROR: " + msg
29         sys.exit(-1)
30
31 # filename -> [case name]
32 def readCaseList (filename):
33         f = open(filename, 'rb')
34         cases = []
35         for line in f:
36                 if line[0:6] == "TEST: ":
37                         cases.append(line[6:].strip())
38         f.close()
39         return cases
40
41 # filename -> [(filter, min, recommended)]
42 def readResolutionList (filename):
43         f = open(filename, 'rb')
44         resList = []
45         for line in f:
46                 line = line.strip()
47                 params = line.split('\t')
48                 if len(params) == 3:
49                         resList.append((params[0], params[1], params[2]))
50                 elif len(params) != 0:
51                         fail("Invalid line in resolution list: '%s'" % line)
52         f.close()
53         return resList
54
55 def getMatchingCases (cases, pattern):
56         matching = []
57         for case in cases:
58                 if fnmatch(case, pattern):
59                         matching.append(case)
60         return matching
61
62 def isResolutionOk (res):
63         return re.match('^[1-9][0-9]*x[1-9][0-9]*$', res) != None
64
65 if __name__ == "__main__":
66         if len(sys.argv) != 3:
67                 print "%s: [caselist] [resolution list]" % sys.argv[0]
68                 sys.exit(-1)
69
70         caseList        = readCaseList(sys.argv[1])
71         resList         = readResolutionList(sys.argv[2])
72
73         # Pass 1: sanity check for resolution values
74         for pattern, minRes, recRes in resList:
75                 if not isResolutionOk(minRes) or not isResolutionOk(recRes):
76                         fail("Invalid resolution: '%s %s %s'" % (pattern, minRes, recRes))
77
78         # Pass 2: check that each case is specified by one rule
79         markedCases = set()
80         for pattern, minRes, recRes in resList:
81                 matchingCases = getMatchingCases(caseList, pattern)
82
83                 if len(matchingCases) == 0:
84                         fail("Pattern '%s' does not match any cases" % pattern)
85
86                 for case in matchingCases:
87                         if case in markedCases:
88                                 fail("Case '%s' specified multiple times (when processing '%s')" % (case, pattern))
89                         markedCases.add(case)
90
91         for case in caseList:
92                 if not case in markedCases:
93                         fail("Case '%s' not specified by any rule" % case)