#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright (C) 2017-2020 The Project X-Ray Authors. # # Use of this source code is governed by a ISC-style # license that can be found in the LICENSE file or at # https://opensource.org/licenses/ISC # # SPDX-License-Identifier: ISC from os import environ, getcwd, chdir, mkdir, environ import json from tempfile import TemporaryDirectory from contextlib import contextmanager from unittest import TestCase, main # Setup location of database file to a relative term so it can be generated # in the current subdirectory, which will be a temporary one, to allow concurent # testing. environ['XRAY_DATABASE_ROOT'] = '.' environ['XRAY_PART'] = 'xc7a200tffg1156-1' from prjxray.util import get_roi, get_db_root from prjxray.overlay import Overlay from prjxray.grid_types import GridLoc @contextmanager def setup_database(contents): with TemporaryDirectory() as d: olddir = getcwd() chdir(d) mkdir('xc7a200t') mkdir('mapping') environ['XRAY_DATABASE_ROOT'] = d e = None with open('xc7a200t/tilegrid.json', 'w') as fd: json.dump(contents, fd) # Create some dummy data with open('mapping/devices.yaml', 'w') as fd: json.dump({'xc7a200t': {'fabric': "xc7a200t"}}, fd) with open('mapping/parts.yaml', 'w') as fd: json.dump({'xc7a200tffg1156-1': {"device": "xc7a200t"}}, fd) try: yield except Exception as ereal: e = ereal chdir(olddir) if e is not None: raise e class TestUtil(TestCase): def test_get_roi_gen_sites(self): makedb = lambda sites: { "ATILE": { "bits": { "CLB_IO_CLK": { "baseaddr": "0x00400F00", "frames": 28, "height": 2, "offset": 0, "words": 2 } }, "grid_x": 10, "grid_y": 10, "segment": "ASEGMENT", "segment_type": "bram0_l", "sites": sites, "prohibited_sites": [], "type": "BRAM_INT_INTERFACE_L" } } with setup_database(makedb({})): self.assertListEqual(list(get_roi().gen_sites()), []) with setup_database(makedb({'FOO': 'BAR'})): self.assertListEqual( list(get_roi().gen_sites()), [('ATILE', 'FOO', 'BAR')]) def test_in_roi_overlay(self): region_dict = {} region_dict['pr1'] = (10, 58, 0, 51) region_dict['pr2'] = (10, 58, 52, 103) overlay = Overlay(region_dict) self.assertFalse(overlay.tile_in_roi(GridLoc(18, 50))) self.assertFalse(overlay.tile_in_roi(GridLoc(18, 84))) self.assertTrue(overlay.tile_in_roi(GridLoc(8, 50))) self.assertTrue(overlay.tile_in_roi(GridLoc(18, 112))) self.assertTrue(overlay.tile_in_roi(GridLoc(80, 40))) if __name__ == '__main__': main()