| # Test case for `icebox_hlc2asc': Does net name translation work correctly? | 
 | # Copyright (C) 2017 Roland Lutz | 
 | # | 
 | # Permission to use, copy, modify, and/or distribute this software for any | 
 | # purpose with or without fee is hereby granted, provided that the above | 
 | # copyright notice and this permission notice appear in all copies. | 
 | # | 
 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | 
 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | 
 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | 
 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | 
 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
 |  | 
 | import sys | 
 | import icebox | 
 | from icebox_asc2hlc import translate_netname | 
 | from icebox_hlc2asc import untranslate_netname | 
 |  | 
 | def test_netname_translation(ic): | 
 |     sys.stderr.write("testing backward netname translation " | 
 |                      "for the `%s' device...\n" % ic.device) | 
 |     all_tiles = set() | 
 |     for x in range(ic.max_x + 1): | 
 |         for y in range(ic.max_y + 1): | 
 |             if ic.tile(x, y) is not None: | 
 |                 all_tiles.add((x, y)) | 
 |  | 
 |     netnames = set() | 
 |     failed = False | 
 |  | 
 |     for group in ic.group_segments(all_tiles, connect_gb = False): | 
 |         is_span = set(net.startswith('sp') for x, y, net in group) | 
 |         assert len(is_span) == 1 | 
 |         if True not in is_span: | 
 |             # only span nets are interesting here | 
 |             continue | 
 |  | 
 |         netname = translate_netname(group[0][0], group[0][1], | 
 |                                     ic.max_x - 1, ic.max_y - 1, group[0][2]) | 
 |         if netname in netnames: | 
 |             failed = True | 
 |             print("duplicate netname: %s" % netname) | 
 |         netnames.add(netname) | 
 |  | 
 |         for x, y, net in group: | 
 |             s = untranslate_netname(x, y, ic.max_x - 1, ic.max_y - 1, netname) | 
 |             if s != net: | 
 |                 failed = True | 
 |                 print("%-20s %s -> %s" % ("%d %d %s" % (x, y, net), netname, s)) | 
 |  | 
 |     if failed: | 
 |         sys.stderr.write("ERROR\n") | 
 |         sys.exit(1) | 
 |  | 
 | def main(): | 
 |     ic = icebox.iceconfig() | 
 |     ic.setup_empty_384() | 
 |     test_netname_translation(ic) | 
 |  | 
 |     ic = icebox.iceconfig() | 
 |     ic.setup_empty_1k() | 
 |     test_netname_translation(ic) | 
 |  | 
 |     ic = icebox.iceconfig() | 
 |     ic.setup_empty_8k() | 
 |     test_netname_translation(ic) | 
 |  | 
 | if __name__ == '__main__': | 
 |     main() |