| #!/usr/bin/env python |
| # Copyright (c) 2017 Google Inc. |
| |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| """Tests correctness of opt pass tools/opt --compact-ids.""" |
| |
| import os.path |
| import sys |
| import tempfile |
| |
| def test_spirv_file(path, temp_dir): |
| optimized_spv_path = os.path.join(temp_dir, 'optimized.spv') |
| optimized_dis_path = os.path.join(temp_dir, 'optimized.dis') |
| converted_spv_path = os.path.join(temp_dir, 'converted.spv') |
| converted_dis_path = os.path.join(temp_dir, 'converted.dis') |
| |
| os.system('tools/spirv-opt ' + path + ' -o ' + optimized_spv_path + |
| ' --compact-ids') |
| os.system('tools/spirv-dis ' + optimized_spv_path + ' -o ' + |
| optimized_dis_path) |
| |
| os.system('tools/spirv-dis ' + path + ' -o ' + converted_dis_path) |
| os.system('tools/spirv-as ' + converted_dis_path + ' -o ' + |
| converted_spv_path) |
| os.system('tools/spirv-dis ' + converted_spv_path + ' -o ' + |
| converted_dis_path) |
| |
| with open(converted_dis_path, 'r') as f: |
| converted_dis = f.readlines()[3:] |
| |
| with open(optimized_dis_path, 'r') as f: |
| optimized_dis = f.readlines()[3:] |
| |
| return converted_dis == optimized_dis |
| |
| def print_usage(): |
| template= \ |
| """{script} tests correctness of opt pass tools/opt --compact-ids |
| |
| USAGE: python {script} [<spirv_files>] |
| |
| Requires tools/spirv-dis, tools/spirv-as and tools/spirv-opt to be in path |
| (call the script from the SPIRV-Tools build output directory). |
| |
| TIP: In order to test all .spv files under current dir use |
| find <path> -name "*.spv" -print0 | xargs -0 -s 2000000 python {script} |
| """ |
| print(template.format(script=sys.argv[0])); |
| |
| def main(): |
| if not os.path.isfile('tools/spirv-dis'): |
| print('error: tools/spirv-dis not found') |
| print_usage() |
| exit(1) |
| |
| if not os.path.isfile('tools/spirv-as'): |
| print('error: tools/spirv-as not found') |
| print_usage() |
| exit(1) |
| |
| if not os.path.isfile('tools/spirv-opt'): |
| print('error: tools/spirv-opt not found') |
| print_usage() |
| exit(1) |
| |
| paths = sys.argv[1:] |
| if not paths: |
| print_usage() |
| |
| num_failed = 0 |
| |
| temp_dir = tempfile.mkdtemp() |
| |
| for path in paths: |
| success = test_spirv_file(path, temp_dir) |
| if not success: |
| print('Test failed for ' + path) |
| num_failed += 1 |
| |
| print('Tested ' + str(len(paths)) + ' files') |
| |
| if num_failed: |
| print(str(num_failed) + ' tests failed') |
| exit(1) |
| else: |
| print('All tests successful') |
| exit(0) |
| |
| if __name__ == '__main__': |
| main() |