klayout/src/unit_tests/dbOASISWriter2.cc

93 lines
2.8 KiB
C++

/*
KLayout Layout Viewer
Copyright (C) 2006-2017 Matthias Koefferlein
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "dbOASISReader.h"
#include "dbOASISWriter.h"
#include "dbShapeProcessor.h"
#include "utHead.h"
#include <stdlib.h>
#include <QDir>
// Test the writer's capabilities to write polygon's with holes
TEST(1)
{
db::ShapeProcessor sp;
db::Manager m;
db::Layout layout_org (&m);
{
std::string fn (ut::testsrc ());
fn += "/testdata/other/d1.oas.gz";
tl::InputStream stream (fn);
db::Reader reader (stream);
reader.read (layout_org);
}
db::Cell &top_org = layout_org.cell (*layout_org.begin_top_down ());
for (unsigned int i = 0; i < layout_org.layers (); ++i) {
if (layout_org.is_valid_layer (i)) {
sp.merge (layout_org, top_org, i, top_org.shapes (i), true, 0, false /*don't resolve holes*/);
}
}
std::string tmp_file = ut::TestBase::tmp_file ("tmp_OASISWriter2.gds");
{
tl::OutputStream stream (tmp_file);
db::OASISWriter writer;
db::SaveLayoutOptions options;
writer.write (layout_org, stream, options);
}
db::Layout layout_read (&m);
{
tl::InputStream file (tmp_file);
db::Reader reader (file);
reader.read (layout_read);
}
db::Cell &top_read = layout_read.cell (*layout_org.begin_top_down ());
unsigned int xor_layer = layout_org.insert_layer (db::LayerProperties ());
for (unsigned int i = 0; i < layout_org.layers (); ++i) {
if (layout_org.is_valid_layer (i)) {
const db::LayerProperties lp_org = layout_org.get_properties (i);
for (unsigned int j = 0; j < layout_read.layers (); ++j) {
if (layout_read.is_valid_layer (j) && layout_read.get_properties (j) == lp_org) {
EXPECT_EQ (top_org.shapes (i).size () > 0, true);
sp.boolean (layout_org, top_org, i,
layout_read, top_read, j,
top_org.shapes (xor_layer), db::BooleanOp::Xor, true, false);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), -1, -1);
EXPECT_EQ (top_org.shapes (xor_layer).size () == 0, true);
}
}
}
}
}