From 5d74a5e8c6673dc4140030c8b1bd460961391780 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 10 Feb 2024 18:18:13 +0100 Subject: [PATCH] [consider merging] OASIS Reader: error on duplicate CELLNAMEs --- src/db/db/dbCommonReader.cc | 4 ++++ .../oasis/unit_tests/dbOASISReaderTests.cc | 18 ++++++++++++++++++ testdata/oasis/duplicate_cellname.oas | Bin 0 -> 1444 bytes 3 files changed, 22 insertions(+) create mode 100644 testdata/oasis/duplicate_cellname.oas diff --git a/src/db/db/dbCommonReader.cc b/src/db/db/dbCommonReader.cc index 64eb1d85f..c184501e9 100644 --- a/src/db/db/dbCommonReader.cc +++ b/src/db/db/dbCommonReader.cc @@ -154,6 +154,10 @@ CommonReaderBase::rename_cell (db::Layout &layout, size_t id, const std::string common_reader_error (tl::sprintf (tl::to_string (tr ("Cell named %s with ID %ld was already given name %s")), cn, id, iid->second.first)); } + if (iname != m_name_map.end () && iname->second.first != null_id && iname->second.first != id) { + common_reader_error (tl::sprintf (tl::to_string (tr ("Same cell name %s, but different IDs: %ld and %ld")), cn, id, iname->second.first)); + } + if (iid != m_id_map.end () && iname != m_name_map.end ()) { if (iname->second.second != iid->second.second) { diff --git a/src/plugins/streamers/oasis/unit_tests/dbOASISReaderTests.cc b/src/plugins/streamers/oasis/unit_tests/dbOASISReaderTests.cc index d8b0d6c07..96f87436f 100644 --- a/src/plugins/streamers/oasis/unit_tests/dbOASISReaderTests.cc +++ b/src/plugins/streamers/oasis/unit_tests/dbOASISReaderTests.cc @@ -599,3 +599,21 @@ TEST(Bug_1474) EXPECT_EQ (ex.msg (), "Cell named ADDHX2 with ID 4 was already given name SEDFFTRX2 (position=763169, cell=)"); } } + +TEST(DuplicateCellname) +{ + db::Manager m (false); + db::Layout layout (&m); + + try { + tl::InputStream file (tl::testdata () + "/oasis/duplicate_cellname.oas"); + db::OASISReader reader (file); + reader.read (layout); + EXPECT_EQ (false, true); + } catch (tl::CancelException &ex) { + // Seen when private test data is not installed + throw; + } catch (tl::Exception &ex) { + EXPECT_EQ (ex.msg (), "Same cell name TOP, but different IDs: 3 and 0 (position=1070, cell=)"); + } +} diff --git a/testdata/oasis/duplicate_cellname.oas b/testdata/oasis/duplicate_cellname.oas new file mode 100644 index 0000000000000000000000000000000000000000..0ce5df9215310dddffc1a312f3158ea7d5b55f73 GIT binary patch literal 1444 zcmd^9&r1|h9Di@#do!~;j`rF&#-tufLp@k2L17B6rXU!WyP0*_!%7|c2X@({xdgH) zEoEh1l7tA{a-qnJ)Cv{-IJkktY7ibgl+4Burh74)H@jJ=b?Dl=%)HO%^S(n23d$=cci(fWm^MFW^BH`brakeJEjN=Ij<3yG7cQ z2%39Y-}z;B&vd|C=T~A_maS1J>p__0)c1Z4Ktf=6YGJ;sBzig2_ z?uYSW7Fs0zWkZKGt?>=qItl;^tRf$wp>YqJ2ML*#tnV%49tOlkqClRd;b$S<*(}V~ zu<%1+Yi2AwA#7*h8ro`rXG!eQCRA}yiXub5qkch#|Ie}V9Qdf?dpf>}^8y$CQ?l3X z5%SSWx&G5yG@owH!;IARd&b;lKI1Dpn|N;(vIqp(qW9|S9c$DR0T5JYut$KZKrI*- z5}4Ml9r!GGA`pTH#g_$6A)9(vWmHj1=mjcfK?JxF2FFB|u;6NLtBTaZqhg9^M+LAo zHKu9suBb|R5l#L@w}Kq4%z_`V(@J$wi{xsrplyq*{5i8K2tcYRRYdEOCGi%zEX^L8 z3ec=;6Tu>a^WF3=)Uz<+Z=1mySa=2T7sCNpf1yvw2KtQTwW>lbIp=2{Z||poTH=6c zHPf%|RG^w#3g1YoFVNE3(GlouYxA}G5%PDQDBT6*QUtyHx{eWS<~PG+gL_2s*tCr` zSJZNP#>Sij^8{gUx3|kVOb}_VIM(jtn{g2#Z%+I~M3V1BYfHPggEMIn5${jgO9{aq hj((B|>N#_kpi|wa1vn_f5f}WP`!#`#o$CLzegJ3%XM_L% literal 0 HcmV?d00001