mirror of https://github.com/KLayout/klayout.git
241 lines
6.1 KiB
C++
241 lines
6.1 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 "dbBox.h"
|
|
#include "utHead.h"
|
|
|
|
|
|
TEST(1)
|
|
{
|
|
db::Box b (0, 0, 100, 200);
|
|
db::Box empty;
|
|
|
|
EXPECT_EQ (empty.empty (), true);
|
|
EXPECT_EQ (b.empty (), false);
|
|
}
|
|
|
|
TEST(2)
|
|
{
|
|
db::Box b (0, 0, 100, 200);
|
|
db::Box empty;
|
|
|
|
EXPECT_EQ (b.moved (db::Vector (10, 20)), db::Box (110, 20, 10, 220));
|
|
EXPECT_EQ (b.enlarged (db::Vector (10, 20)), db::Box (-10, -20, 110, 220));
|
|
EXPECT_EQ (b + db::Box (-10, 20, 100, 200), db::Box (-10, 0, 100, 200));
|
|
EXPECT_EQ (b + db::Box (-10, -20, 100, -10), db::Box (-10, -20, 100, 200));
|
|
EXPECT_EQ (b + db::Box (110, 220, 120, 250), db::Box (0, 0, 120, 250));
|
|
EXPECT_EQ (b & db::Box (110, 220, 120, 250), empty);
|
|
EXPECT_EQ (b & db::Box (50, 100, 120, 250), db::Box (50, 100, 100, 200));
|
|
EXPECT_EQ (b & db::Box (50, 100, 60, 120), db::Box (50, 100, 60, 120));
|
|
}
|
|
|
|
TEST(3)
|
|
{
|
|
db::Box b (0, 0, 100, 200);
|
|
db::Box empty;
|
|
|
|
db::Trans t (2, true, db::Vector (10, 20));
|
|
EXPECT_EQ (t * b, db::Box (-90, 20, 10, 220));
|
|
EXPECT_EQ (t * empty, empty);
|
|
}
|
|
|
|
TEST(4)
|
|
{
|
|
db::Box b (0, 0, 100, 200);
|
|
db::Box empty;
|
|
|
|
EXPECT_EQ (b.inside (empty), false);
|
|
EXPECT_EQ (empty.inside (b), false);
|
|
EXPECT_EQ (b.enlarged (db::Vector (-10, -10)).inside (b), true);
|
|
EXPECT_EQ (b.enlarged (db::Vector (10, 10)).inside (b), false);
|
|
EXPECT_EQ (b.moved (db::Vector (10, 10)).inside (b), false);
|
|
EXPECT_EQ (b.overlaps (b.moved (db::Vector (10, 10))), true);
|
|
EXPECT_EQ (b.overlaps (b.moved (db::Vector (110, 110))), false);
|
|
EXPECT_EQ (b.overlaps (b.moved (db::Vector (100, 100))), false);
|
|
EXPECT_EQ (b.touches (b.moved (db::Vector (110, 110))), false);
|
|
EXPECT_EQ (b.touches (b.moved (db::Vector (100, 100))), true);
|
|
EXPECT_EQ (b.touches (b.moved (db::Vector (10, 10))), true);
|
|
}
|
|
|
|
TEST(5)
|
|
{
|
|
db::Box b (10, 10, 110, 210);
|
|
db::Box empty;
|
|
|
|
EXPECT_EQ (b.area (), 100.0 * 200.0);
|
|
EXPECT_EQ (b.perimeter (), db::Box::perimeter_type (600));
|
|
EXPECT_EQ (b.to_string (), "(10,10;110,210)");
|
|
EXPECT_EQ (b.width (), db::Box::distance_type (100));
|
|
EXPECT_EQ (b.height (), db::Box::distance_type (200));
|
|
EXPECT_EQ (b.top (), 210);
|
|
EXPECT_EQ (b.left (), 10);
|
|
EXPECT_EQ (b.right (), 110);
|
|
EXPECT_EQ (b.bottom (), 10);
|
|
EXPECT_EQ (db::Box (db::Point (110, 10), db::Point (10, 210)).p1 (), db::Point (10, 10));
|
|
EXPECT_EQ (db::Box (db::Point (110, 210), db::Point (10, 10)).p2 (), db::Point (110, 210));
|
|
}
|
|
|
|
TEST(6)
|
|
{
|
|
db::Box b (10, 10, 110, 210);
|
|
EXPECT_EQ (b.contains (db::Point (50, 50)), true);
|
|
EXPECT_EQ (b.contains (db::Point (10, 50)), true);
|
|
EXPECT_EQ (b.contains (db::Point (5, 50)), false);
|
|
EXPECT_EQ (b.contains (db::Point (110, 50)), true);
|
|
EXPECT_EQ (b.contains (db::Point (115, 50)), false);
|
|
EXPECT_EQ (b.contains (db::Point (10, 10)), true);
|
|
EXPECT_EQ (b.contains (db::Point (5, 5)), false);
|
|
}
|
|
|
|
TEST(7)
|
|
{
|
|
db::Box b;
|
|
db::Box bc (0, 1, 2, 3);
|
|
|
|
std::string s (b.to_string ());
|
|
EXPECT_EQ (s, "()");
|
|
tl::Extractor ex (s.c_str ());
|
|
ex.read (bc);
|
|
|
|
EXPECT_EQ (bc.to_string (), s);
|
|
}
|
|
|
|
TEST(8)
|
|
{
|
|
db::Box b (10, 20, 45, 60);
|
|
db::Box bc (0, 1, 2, 3);
|
|
|
|
std::string s (b.to_string ());
|
|
EXPECT_EQ (s, "(10,20;45,60)");
|
|
tl::Extractor ex (s.c_str ());
|
|
ex.read (bc);
|
|
|
|
EXPECT_EQ (bc.to_string (), s);
|
|
}
|
|
|
|
TEST(9)
|
|
{
|
|
db::DBox b;
|
|
db::DBox bc (0, 1, 2, 3);
|
|
|
|
std::string s (b.to_string ());
|
|
EXPECT_EQ (s, "()");
|
|
tl::Extractor ex (s.c_str ());
|
|
ex.read (bc);
|
|
|
|
EXPECT_EQ (bc.to_string (), s);
|
|
}
|
|
|
|
TEST(10)
|
|
{
|
|
db::Box b (10, 20, 45, 60);
|
|
db::Box bc (0, 1, 2, 3);
|
|
|
|
std::string s (b.to_string ());
|
|
EXPECT_EQ (s, "(10,20;45,60)");
|
|
tl::Extractor ex (s.c_str ());
|
|
ex.read (bc);
|
|
|
|
EXPECT_EQ (bc.to_string (), s);
|
|
}
|
|
|
|
TEST(11)
|
|
{
|
|
db::Box b;
|
|
|
|
b.set_left (10);
|
|
EXPECT_EQ (b.to_string (), "(10,0;10,0)");
|
|
b.set_left (5);
|
|
EXPECT_EQ (b.to_string (), "(5,0;10,0)");
|
|
b.set_left (15);
|
|
EXPECT_EQ (b.to_string (), "(15,0;15,0)");
|
|
|
|
b = db::Box ();
|
|
b.set_right (10);
|
|
EXPECT_EQ (b.to_string (), "(10,0;10,0)");
|
|
b.set_right (15);
|
|
EXPECT_EQ (b.to_string (), "(10,0;15,0)");
|
|
b.set_right (5);
|
|
EXPECT_EQ (b.to_string (), "(5,0;5,0)");
|
|
|
|
b = db::Box ();
|
|
b.set_bottom (10);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,10)");
|
|
b.set_bottom (5);
|
|
EXPECT_EQ (b.to_string (), "(0,5;0,10)");
|
|
b.set_bottom (15);
|
|
EXPECT_EQ (b.to_string (), "(0,15;0,15)");
|
|
|
|
b = db::Box ();
|
|
b.set_top (10);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,10)");
|
|
b.set_top (15);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,15)");
|
|
b.set_top (5);
|
|
EXPECT_EQ (b.to_string (), "(0,5;0,5)");
|
|
}
|
|
|
|
TEST(12)
|
|
{
|
|
db::DBox b;
|
|
|
|
b.set_left (10);
|
|
EXPECT_EQ (b.to_string (), "(10,0;10,0)");
|
|
b.set_left (5);
|
|
EXPECT_EQ (b.to_string (), "(5,0;10,0)");
|
|
b.set_left (15);
|
|
EXPECT_EQ (b.to_string (), "(15,0;15,0)");
|
|
|
|
b = db::DBox ();
|
|
b.set_right (10);
|
|
EXPECT_EQ (b.to_string (), "(10,0;10,0)");
|
|
b.set_right (15);
|
|
EXPECT_EQ (b.to_string (), "(10,0;15,0)");
|
|
b.set_right (5);
|
|
EXPECT_EQ (b.to_string (), "(5,0;5,0)");
|
|
|
|
b = db::DBox ();
|
|
b.set_bottom (10);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,10)");
|
|
b.set_bottom (5);
|
|
EXPECT_EQ (b.to_string (), "(0,5;0,10)");
|
|
b.set_bottom (15);
|
|
EXPECT_EQ (b.to_string (), "(0,15;0,15)");
|
|
|
|
b = db::DBox ();
|
|
b.set_top (10);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,10)");
|
|
b.set_top (15);
|
|
EXPECT_EQ (b.to_string (), "(0,10;0,15)");
|
|
b.set_top (5);
|
|
EXPECT_EQ (b.to_string (), "(0,5;0,5)");
|
|
}
|
|
|
|
TEST(13)
|
|
{
|
|
// 32bit overflow for perimeter
|
|
db::Box b (-1000000000, -1000000000, 1000000000, 1000000000);
|
|
EXPECT_EQ (b.perimeter (), 8000000000.0);
|
|
}
|
|
|