Add more tests.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user