#!/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 __future__ import print_function import prjxray.db import prjxray.util import argparse def quick_test(db_root, part): db = prjxray.db.Database(db_root, part) g = db.grid() # Verify that we have some tile information for every tile in grid. tile_types_in_grid = set( g.gridinfo_at_loc(loc).tile_type for loc in g.tile_locations()) tile_types_in_db = set(db.get_tile_types()) site_types = set(db.get_site_types()) assert len(tile_types_in_grid - tile_types_in_db) == 0 # Verify that all tile types can be loaded. for tile_type in db.get_tile_types(): tile = db.get_tile_type(tile_type) wires = tile.get_wires() for site in tile.get_sites(): assert site.type in site_types site_type = db.get_site_type(site.type) site_pins = site_type.get_site_pins() for site_pin in site.site_pins: if site_pin.wire is not None: assert site_pin.wire in wires, (site_pin.wire, ) assert site_pin.name in site_pins for pip in tile.get_pips(): assert pip.net_to in wires assert pip.net_from in wires for loc in g.tile_locations(): gridinfo = g.gridinfo_at_loc(loc) assert gridinfo.tile_type in db.get_tile_types() for site_name, site_type in gridinfo.sites.items(): assert site_type in site_types tile = db.get_tile_type(gridinfo.tile_type) instance_sites = list(tile.get_instance_sites(gridinfo)) assert len(instance_sites) == len(tile.get_sites()) def main(): parser = argparse.ArgumentParser( description="Runs a sanity check on a prjxray database.") util.db_root_arg(parser) util.part_arg(parser) args = parser.parse_args() quick_test(args.db_root, args.part) if __name__ == '__main__': main()