From 4c7f43d749ff9311c4e8cdc752d0c2d29191d176 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 20 Jan 2019 17:31:58 +0100 Subject: [PATCH] More l2n reader tests. --- .../dbLayoutToNetlistReaderTests.cc | 72 +++++++++++++++++- .../dbLayoutToNetlistWriterTests.cc | 2 +- testdata/algo/l2n_reader_au.gds | Bin 0 -> 18382 bytes testdata/algo/l2n_reader_au_2.gds | Bin 0 -> 27844 bytes 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 testdata/algo/l2n_reader_au.gds create mode 100644 testdata/algo/l2n_reader_au_2.gds diff --git a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc index 549466153..83aaeab10 100644 --- a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc @@ -89,13 +89,13 @@ TEST(1_ReaderBasic) std::string au = tl::testsrc (); au = tl::combine_path (au, "testdata"); au = tl::combine_path (au, "algo"); - au = tl::combine_path (au, "l2n_writer_au.gds"); + au = tl::combine_path (au, "l2n_reader_au.gds"); db::compare_layouts (_this, ly2, au); } } -TEST(2_ReaderBasicShort) +TEST(1b_ReaderBasicShort) { db::Layout ly; @@ -129,3 +129,71 @@ TEST(2_ReaderBasicShort) } } + +TEST(2_ReaderWithGlobalNets) +{ + db::Layout ly; + + db::Cell &tc = ly.cell (ly.add_cell ("TOP")); + db::LayoutToNetlist l2n (db::RecursiveShapeIterator (ly, tc, std::set ())); + + std::string in_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "l2n_writer_au_2.txt"); + tl::InputStream is_in (in_path); + + db::LayoutToNetlistStandardReader reader (is_in); + reader.read (&l2n); + + // verify against the input + + std::string path = tmp_file ("tmp_l2nreader_2.txt"); + { + tl::OutputStream stream (path); + db::LayoutToNetlistStandardWriter writer (stream, false); + writer.write (&l2n); + } + + std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "l2n_writer_au_2.txt"); + + tl::InputStream is (path); + tl::InputStream is_au (au_path); + + if (is.read_all () != is_au.read_all ()) { + _this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s", + tl::absolute_file_path (path), + tl::absolute_file_path (au_path))); + } + + // test build_all_nets from read l2n + + { + db::Layout ly2; + ly2.dbu (ly.dbu ()); + db::Cell &top2 = ly2.cell (ly2.add_cell ("TOP")); + + db::CellMapping cm = l2n.cell_mapping_into (ly2, top2, true /*with device cells*/); + + std::map lmap; + lmap [ly2.insert_layer (db::LayerProperties (10, 0))] = reader.layer_by_name ("psd"); + lmap [ly2.insert_layer (db::LayerProperties (11, 0))] = reader.layer_by_name ("nsd"); + lmap [ly2.insert_layer (db::LayerProperties (12, 0))] = reader.layer_by_name ("rbulk"); + lmap [ly2.insert_layer (db::LayerProperties (13, 0))] = reader.layer_by_name ("ptie"); + lmap [ly2.insert_layer (db::LayerProperties (14, 0))] = reader.layer_by_name ("ntie"); + lmap [ly2.insert_layer (db::LayerProperties (1, 0)) ] = reader.layer_by_name ("nwell"); + lmap [ly2.insert_layer (db::LayerProperties (3, 0)) ] = reader.layer_by_name ("poly"); + lmap [ly2.insert_layer (db::LayerProperties (4, 0)) ] = reader.layer_by_name ("diff_cont"); + lmap [ly2.insert_layer (db::LayerProperties (5, 0)) ] = reader.layer_by_name ("poly_cont"); + lmap [ly2.insert_layer (db::LayerProperties (6, 0)) ] = reader.layer_by_name ("metal1"); + lmap [ly2.insert_layer (db::LayerProperties (7, 0)) ] = reader.layer_by_name ("via1"); + lmap [ly2.insert_layer (db::LayerProperties (8, 0)) ] = reader.layer_by_name ("metal2"); + + l2n.build_all_nets (cm, ly2, lmap, "NET_", "CIRCUIT_", "DEVICE_"); + + std::string au = tl::testsrc (); + au = tl::combine_path (au, "testdata"); + au = tl::combine_path (au, "algo"); + au = tl::combine_path (au, "l2n_reader_au_2.gds"); + + db::compare_layouts (_this, ly2, au); + } +} + diff --git a/src/db/unit_tests/dbLayoutToNetlistWriterTests.cc b/src/db/unit_tests/dbLayoutToNetlistWriterTests.cc index 54f6f4b60..02d81d3e3 100644 --- a/src/db/unit_tests/dbLayoutToNetlistWriterTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistWriterTests.cc @@ -429,7 +429,7 @@ TEST(2_WriterWithGlobalNets) } } - // test build_all_nets + // test build_all_nets as reference for the reader { db::Layout ly2; diff --git a/testdata/algo/l2n_reader_au.gds b/testdata/algo/l2n_reader_au.gds new file mode 100644 index 0000000000000000000000000000000000000000..a839f25846ba697c56f553df6736781bc786bdd8 GIT binary patch literal 18382 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 literal 0 HcmV?d00001 diff --git a/testdata/algo/l2n_reader_au_2.gds b/testdata/algo/l2n_reader_au_2.gds new file mode 100644 index 0000000000000000000000000000000000000000..f34c627da51201d63bf6d2f5e2b2257897bc3bfd GIT binary patch literal 27844 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