You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.2 KiB
C++

1 month ago
#include <chrono>
#include <cstdlib>
#include <future>
#include <iostream>
#include <memory>
#include <thread>
#include <vector>
#include <catch.hpp>
#include <SurfaceGrid.h>
TEST_CASE("Point", "Test1")
{
ais::Point p(2, 2);
CHECK(p.in_line(ais::Point(0, 0), ais::Point(1, 1), false));
CHECK(p.in_line(ais::Point(0, 0), ais::Point(3, 3)));
std::vector<ais::Point> region{{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}};
std::vector<ais::Point> region1{{0, 0}, {0, 3}, {3, 3}, {3, 0}, {0, 0}};
std::vector<ais::Point> region2{{0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0}};
std::vector<ais::Point> region3{{1, 1}, {2, 3}, {4, 2}, {2, 0}, {1, 1}};
CHECK(!p.in_polygon(region));
CHECK(p.in_polygon(region1));
CHECK(p.in_polygon(region2));
CHECK(p.in_polygon(region3));
ais::PointXYZ p1("2.3,15,-1");
REQUIRE(p1 == ais::PointXYZ(2.3, 15, -1));
}
TEST_CASE("PointInterpolate", "Test1")
{
ais::Point3D p1(2, 2, 2);
ais::Point3D p2(4, 4, 4);
ais::Point3D p3(2, 4, 6);
ais::Point3D p(3.5, 2.5, INFINITY);
auto z1 = p.point_interpolate(p1, p2, p3);
auto z2 = p.point_interpolate(p2, p3, p1);
auto z3 = p.point_interpolate(p3, p1, p2);
std::cout << z1 << std::endl;
std::cout << z2 << std::endl;
std::cout << z3 << std::endl;
}
TEST_CASE("Polygon", "Test1")
{
std::vector<ais::Point> p1{{2, 5}, {7, 5}, {7, 10}, {2, 10}, {2, 5}};
std::vector<ais::Point> p2{{2, 2}, {2, 3}, {3, 3}, {3, 2}, {2, 2}};
CHECK(!ais::polygon_intersect(p1, p2));
}
TEST_CASE("Triangle", "Test1")
{
std::vector<ais::Point> p{{1.78, 1.4}, {2, 1.1}, {2.43, 3.3}, {3.3, 2.22}, {2.3, 1.88}};
std::vector<ais::Triangle<ais::Point>> t;
ais::delaunay_triangulation(p, t);
CHECK(t.size() == 4);
}
TEST_CASE("PointInterpolate0", "Test2")
{
ais::Point3D p1(2, 2, 2);
ais::Point3D p2(4, 4, 0);
ais::Point3D p3(2, 4, 0);
ais::Point3D p(3.5, 2.5, INFINITY);
auto z1 = p.point_interpolate(p1, p2, p3);
auto z2 = p.point_interpolate(p2, p3, p1);
auto z3 = p.point_interpolate(p3, p1, p2);
std::cout << z1 << std::endl;
std::cout << z2 << std::endl;
std::cout << z3 << std::endl;
}
TEST_CASE("BreakLine", "Test1")
{
ais::BreakLine bl("4,1\n0.0465, 2.1455,-10\n4.6455, 3.5975,-8\n6.969, 5.4365,-4.5\n8.9055, 6.89,-5.5\n");
CHECK(bl.points.size() == 4);
std::cout << bl << std::endl;
ais::BreakLineFile blf("DemoBreakLine.bln");
for (auto kv : blf.lines)
{
std::cout << kv.second << std::endl;
}
}
TEST_CASE("Fault", "Test1")
{
ais::Fault fault("4,1\n0.0465, 2.1455,-10\n4.6455, 3.5975,-8\n6.969, 5.4365,-4.5\n8.9055, 6.89,-5.5\n");
CHECK(fault.points.size() == 4);
std::cout << fault << std::endl;
ais::FaultFile blf("DemoFault.bln");
for (auto kv : blf.faults)
{
std::cout << kv.second << std::endl;
}
ais::FaultFile blf2("Faults.dat");
for (auto kv : blf2.faults)
{
std::cout << kv.second << std::endl;
}
ais::FaultFile blf3("Faults.dfd");
for (auto kv : blf3.faults)
{
std::cout << kv.second << std::endl;
}
ais::Fault fault2("4,1\n0,0\n2,2\n2,5\n5,5\n");
std::cout << fault2 << std::endl;
ais::Point p1{2, 3};
CHECK(p1.in_polylines(fault2.points));
}