1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.geometry.core.internal;
18
19 import org.apache.commons.geometry.core.RegionLocation;
20 import org.apache.commons.geometry.core.partitioning.Hyperplane;
21 import org.apache.commons.geometry.core.partitioning.HyperplaneBoundedRegion;
22 import org.apache.commons.geometry.core.partitioning.Split;
23 import org.apache.commons.geometry.core.partitioning.test.PartitionTestUtils;
24 import org.apache.commons.geometry.core.partitioning.test.TestLine;
25 import org.apache.commons.geometry.core.partitioning.test.TestPoint1D;
26 import org.apache.commons.geometry.core.partitioning.test.TestPoint2D;
27 import org.junit.jupiter.api.Assertions;
28 import org.junit.jupiter.api.Test;
29
30 class HyperplaneSubsetsTest {
31
32 @Test
33 void testClassify() {
34
35 final TestLine line = TestLine.X_AXIS;
36 final StubRegion1D region = new StubRegion1D();
37
38
39 Assertions.assertEquals(RegionLocation.INSIDE,
40 HyperplaneSubsets.classifyAgainstEmbeddedRegion(new TestPoint2D(-1, 0), line, region));
41 Assertions.assertEquals(RegionLocation.BOUNDARY,
42 HyperplaneSubsets.classifyAgainstEmbeddedRegion(new TestPoint2D(0, 0), line, region));
43
44 Assertions.assertEquals(RegionLocation.OUTSIDE,
45 HyperplaneSubsets.classifyAgainstEmbeddedRegion(new TestPoint2D(0, 1), line, region));
46 Assertions.assertEquals(RegionLocation.OUTSIDE,
47 HyperplaneSubsets.classifyAgainstEmbeddedRegion(new TestPoint2D(-1, 1), line, region));
48 Assertions.assertEquals(RegionLocation.OUTSIDE,
49 HyperplaneSubsets.classifyAgainstEmbeddedRegion(new TestPoint2D(-1, -1), line, region));
50 }
51
52 @Test
53 void testClosest() {
54
55 final TestLine line = TestLine.X_AXIS;
56 final StubRegion1D region = new StubRegion1D();
57 final StubRegion1D emptyRegion = new StubRegion1D(true);
58
59
60 PartitionTestUtils.assertPointsEqual(new TestPoint2D(-1, 0),
61 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(-1, 0), line, region));
62
63 PartitionTestUtils.assertPointsEqual(new TestPoint2D(0, 0),
64 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(0, 0), line, region));
65 PartitionTestUtils.assertPointsEqual(new TestPoint2D(0, 0),
66 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(1, 0), line, region));
67 PartitionTestUtils.assertPointsEqual(new TestPoint2D(0, 0),
68 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(1, 1), line, region));
69 PartitionTestUtils.assertPointsEqual(new TestPoint2D(0, 0),
70 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(1, -1), line, region));
71
72 PartitionTestUtils.assertPointsEqual(new TestPoint2D(-1, 0),
73 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(-1, 1), line, region));
74 PartitionTestUtils.assertPointsEqual(new TestPoint2D(-1, 0),
75 HyperplaneSubsets.closestToEmbeddedRegion(new TestPoint2D(-1, -1), line, region));
76
77 Assertions.assertNull(HyperplaneSubsets.closestToEmbeddedRegion(TestPoint2D.ZERO, line, emptyRegion));
78 }
79
80
81
82 private static class StubRegion1D implements HyperplaneBoundedRegion<TestPoint1D> {
83
84 private final boolean empty;
85
86 StubRegion1D() {
87 this(false);
88 }
89
90 StubRegion1D(final boolean empty) {
91 this.empty = empty;
92 }
93
94 @Override
95 public boolean isFull() {
96 throw new UnsupportedOperationException();
97 }
98
99 @Override
100 public boolean isEmpty() {
101 throw new UnsupportedOperationException();
102 }
103
104 @Override
105 public double getSize() {
106 throw new UnsupportedOperationException();
107 }
108
109 @Override
110 public double getBoundarySize() {
111 throw new UnsupportedOperationException();
112 }
113
114 @Override
115 public TestPoint1D getCentroid() {
116 throw new UnsupportedOperationException();
117 }
118
119 @Override
120 public RegionLocation classify(final TestPoint1D pt) {
121 if (!empty) {
122 final double sign = PartitionTestUtils.PRECISION.signum(pt.getX());
123
124 if (sign < 0) {
125 return RegionLocation.INSIDE;
126 } else if (sign == 0) {
127 return RegionLocation.BOUNDARY;
128 }
129 }
130 return RegionLocation.OUTSIDE;
131 }
132
133 @Override
134 public TestPoint1D project(final TestPoint1D pt) {
135 return empty ? null : new TestPoint1D(0);
136 }
137
138 @Override
139 public Split<? extends HyperplaneBoundedRegion<TestPoint1D>> split(final Hyperplane<TestPoint1D> splitter) {
140 throw new UnsupportedOperationException();
141 }
142 }
143 }