Files
prjxray/tests/test_util.py
T
Daniel Schultz cd4ca4916e Update tests to fabric refactoring
Since the tilegrid.json file is not anymore placed inside the part directory,
the test needs to be updated slightly to work with the new structure.

Signed-off-by: Daniel Schultz <[email protected]>
2021-01-12 22:36:58 +01:00

97 lines
3.1 KiB
Python
Executable File

#!/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()