Add more tests.

This commit is contained in:
wo80
2022-02-16 21:17:53 +01:00
parent 8952d7d993
commit 5082449432
5 changed files with 161 additions and 21 deletions
@@ -0,0 +1,27 @@
using NUnit.Framework;
using TriangleNet.Geometry;
namespace TriangleNet.Tests.Geometry
{
public class ContourTest
{
[Test]
public void TestFindInteriorPoint()
{
// The vertices that define the contour (have to be in order, obviously).
var vertices = new Vertex[]
{
new Vertex(0d, 0d),
new Vertex(1d ,0d),
new Vertex(1d, 1d),
new Vertex(0d, 1d),
};
var contour = new Contour(vertices);
var p = contour.FindInteriorPoint();
Assert.IsTrue(p.X > 0d && p.X < 1d && p.Y > 0d && p.Y < 1d);
}
}
}
+35
View File
@@ -0,0 +1,35 @@
namespace TriangleNet.Tests
{
using System.Collections.Generic;
using TriangleNet.Geometry;
using TriangleNet.Topology;
static class Helper
{
public static Contour Rectangle(double left, double top,
double right, double bottom, int mark = 0)
{
var points = new List<Vertex>(4);
points.Add(new Vertex(left, top, mark));
points.Add(new Vertex(right, top, mark));
points.Add(new Vertex(right, bottom, mark));
points.Add(new Vertex(left, bottom, mark));
return new Contour(points, mark, true);
}
public static Triangle CreateTriangle(int id, Vertex org, Vertex dest, Vertex apex)
{
var t = new Triangle() { id = id, hash = id };
// Node ordering 'plus 1 mod 3'.
t.vertices[0] = apex;
t.vertices[1] = org;
t.vertices[2] = dest;
return t;
}
}
}
@@ -0,0 +1,35 @@
using NUnit.Framework;
using TriangleNet.Geometry;
using TriangleNet.Meshing.Iterators;
using TriangleNet.Tools;
using TriangleNet.Topology;
namespace TriangleNet.Tests.Meshing.Iterators
{
public class RegionIteratorTest
{
public void TestProcessRegionProtected()
{
var poly = new Polygon();
// Outer region.
poly.Add(Helper.Rectangle(-2d, 2d, 2d, -2d, 2));
// Inner region.
poly.Add(Helper.Rectangle(-1d, 1d, 1d, -1d, 1));
poly.Regions.Add(new RegionPointer(0d, 0d, 1));
var mesh = (Mesh)poly.Triangulate();
var iterator = new RegionIterator(mesh);
var qtree = new TriangleQuadTree(mesh);
// Find a seeding triangle in region 1.
var seed = (Triangle)qtree.Query(0.0, 0.0);
iterator.Process(seed, t => Assert.AreEqual(1, t.Label));
}
}
}
@@ -0,0 +1,55 @@
using NUnit.Framework;
using TriangleNet.Geometry;
namespace TriangleNet.Tests
{
public class RobustPredicatesTest
{
[Test]
public void TestCounterClockwise()
{
var robust = RobustPredicates.Default;
var a = new Point(-1d, 0d);
var b = new Point( 0d, 1d);
Assert.IsTrue(robust.CounterClockwise(a, b, new Point(1d, 0d)) < 0d);
Assert.IsTrue(robust.CounterClockwise(a, b, new Point(0d, 2d)) > 0d);
Assert.IsTrue(robust.CounterClockwise(a, b, new Point(1d, 2d)) == 0d);
}
[Test]
public void TestInCircle()
{
var robust = RobustPredicates.Default;
var a = new Point(-1d, 0d);
var b = new Point(0d, 1d);
var c = new Point(1d, 0d);
Assert.IsTrue(robust.InCircle(a, b, c, new Point(0d, 0.5)) < 0d);
Assert.IsTrue(robust.InCircle(a, b, c, new Point(0d, 1.5)) > 0d);
Assert.IsTrue(robust.InCircle(a, b, c, new Point(0d, 1d)) == 0d);
}
[Test]
public void TestFindCircumcenter()
{
var robust = RobustPredicates.Default;
var a = new Point(-1d, 0d);
var b = new Point(0d, 1d);
var c = new Point(1d, 0d);
double xi = 0d, eta = 0d;
var actual = robust.FindCircumcenter(a, b, c, ref xi, ref eta);
var expected = new Point(0d, 0d);
Assert.AreEqual(expected.X, actual.X);
Assert.AreEqual(expected.Y, actual.Y);
Assert.AreEqual(0.0, xi);
Assert.AreEqual(0.5, eta);
}
}
}
+9 -21
View File
@@ -47,10 +47,10 @@ namespace TriangleNet.Tests
//
// This is because, for example, and oriented triange will return as its
// origin (Org() method) the element at index [(orientation + 1) % 3].
var t0 = triangles[0] = CreateTriangle(0, vertices[0], vertices[1], vertices[3]);
var t1 = triangles[1] = CreateTriangle(1, vertices[1], vertices[4], vertices[3]);
var t2 = triangles[2] = CreateTriangle(2, vertices[1], vertices[2], vertices[4]);
var t3 = triangles[3] = CreateTriangle(3, vertices[3], vertices[4], vertices[5]);
var t0 = triangles[0] = Helper.CreateTriangle(0, vertices[0], vertices[1], vertices[3]);
var t1 = triangles[1] = Helper.CreateTriangle(1, vertices[1], vertices[4], vertices[3]);
var t2 = triangles[2] = Helper.CreateTriangle(2, vertices[1], vertices[2], vertices[4]);
var t3 = triangles[3] = Helper.CreateTriangle(3, vertices[3], vertices[4], vertices[5]);
// Setup connectivity of triangle 0.
t0.neighbors[0].tri = dummy;
@@ -81,18 +81,6 @@ namespace TriangleNet.Tests
return triangles;
}
private Triangle CreateTriangle(int id, Vertex org, Vertex dest, Vertex apex)
{
var t = new Triangle() { id = id, hash = id };
// Node ordering 'plus 1 mod 3'.
t.vertices[0] = apex;
t.vertices[1] = org;
t.vertices[2] = dest;
return t;
}
[SetUp]
public void Initialize()
{
@@ -111,7 +99,7 @@ namespace TriangleNet.Tests
{
Otri t = default;
t.tri = CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.tri = Helper.CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.orient = 0;
Assert.AreEqual(1, t.Org().ID);
@@ -128,7 +116,7 @@ namespace TriangleNet.Tests
{
Otri t = default;
t.tri = CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.tri = Helper.CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.orient = 0;
Assert.AreEqual(4, t.Dest().ID);
@@ -145,7 +133,7 @@ namespace TriangleNet.Tests
{
Otri t = default;
t.tri = CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.tri = Helper.CreateTriangle(0, vertices[1], vertices[4], vertices[3]);
t.orient = 0;
Assert.AreEqual(3, t.Apex().ID);
@@ -423,8 +411,8 @@ namespace TriangleNet.Tests
Otri tmp = default;
s.tri = CreateTriangle(0, vertices[0], vertices[1], vertices[3]);
t.tri = CreateTriangle(1, vertices[1], vertices[4], vertices[3]);
s.tri = Helper.CreateTriangle(0, vertices[0], vertices[1], vertices[3]);
t.tri = Helper.CreateTriangle(1, vertices[1], vertices[4], vertices[3]);
s.orient = 1; // Edge 1 -> 3.
t.orient = 2; // Edge 3 -> 1.