From 02ec262df013272beded3574e7f9e4e26981c494 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 3 Jun 2021 23:43:00 +0200 Subject: [PATCH] Normalized resistor contact polygons for better test reproducibility. --- src/db/db/dbNetlistDeviceExtractorClasses.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/db/db/dbNetlistDeviceExtractorClasses.cc b/src/db/db/dbNetlistDeviceExtractorClasses.cc index 1b8ff6280..2eb1d5c2a 100644 --- a/src/db/db/dbNetlistDeviceExtractorClasses.cc +++ b/src/db/db/dbNetlistDeviceExtractorClasses.cc @@ -468,8 +468,16 @@ void NetlistDeviceExtractorResistor::extract_devices (const std::vectorset_parameter_value (db::DeviceClassResistor::param_id_A, sdbu () * sdbu () * p->area ()); device->set_parameter_value (db::DeviceClassResistor::param_id_P, sdbu () * p->perimeter ()); + // collect and normalize the contact polygons (gives better reproducibility) + std::vector contact_poly; + contact_poly.reserve (2); + for (db::Region::const_iterator d = contacts_per_res.begin (); !d.at_end (); ++d) { + contact_poly.push_back (*d); + } + std::sort (contact_poly.begin (), contact_poly.end ()); + int cont_index = 0; - for (db::Region::const_iterator d = contacts_per_res.begin (); !d.at_end () && cont_index < 2; ++d, ++cont_index) { + for (std::vector::const_iterator d = contact_poly.begin (); d != contact_poly.end () && cont_index < 2; ++d, ++cont_index) { size_t terminal_geometry_index = cont_index == 0 ? a_terminal_geometry_index : b_terminal_geometry_index; define_terminal (device, cont_index == 0 ? db::DeviceClassResistor::terminal_id_A : db::DeviceClassResistor::terminal_id_B, terminal_geometry_index, *d); }