From e2fa67e0f13d25230a605d6a1e01cd3447baf89d Mon Sep 17 00:00:00 2001
From: Daniel Schramm <xschramm@fi.muni.cz>
Date: Wed, 19 May 2021 23:18:40 +0200
Subject: [PATCH] PrioritySphere tests implemented

---
 .../visitors/mesh/PrioritySphereTest.java     | 123 ++++++++++++++++++
 1 file changed, 123 insertions(+)
 create mode 100644 Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/PrioritySphereTest.java

diff --git a/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/PrioritySphereTest.java b/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/PrioritySphereTest.java
new file mode 100644
index 00000000..4ecf0d7f
--- /dev/null
+++ b/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/PrioritySphereTest.java
@@ -0,0 +1,123 @@
+package cz.fidentis.analyst.visitors.mesh;
+
+import cz.fidentis.analyst.mesh.core.CornerTableRow;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshFacetImpl;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import cz.fidentis.analyst.mesh.core.MeshPointImpl;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.DoubleStream;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.junit.jupiter.api.Test;
+
+public class PrioritySphereTest {
+    
+    private static final double DELTA = 1e-15;
+    
+    protected MeshFacet getTrivialFacet(int count, double xSpace, double ySpace, double zSpace, int offset) {
+        final MeshFacet facet = new MeshFacetImpl();
+        for (int i = offset; i < count + offset; i++) {
+            facet.addVertex(new MeshPointImpl(new Point3d(xSpace * i, ySpace * i, zSpace * i),
+                    new Vector3d(0, 0, 1),
+                    new Vector3d()));
+            facet.getCornerTable().addRow(new CornerTableRow(i - offset, -1));
+        }
+
+        return facet;
+    }
+    
+    protected void performTest(Map<MeshFacet, List<Double>> facetsWithExpectedPriorities,
+            PrioritySphere visitor,
+            boolean concurrently) {
+
+        final Set<MeshFacet> facets = facetsWithExpectedPriorities.keySet();
+        
+        MeshModel model = new MeshModel();
+//        model.addFacets(new HashSet<>(facets));
+        for (final MeshFacet facet: facets) {
+            model.addFacet(facet);
+        }
+        
+        model.compute(visitor, concurrently);
+        
+        final Map<MeshFacet, List<Double>> priorities = visitor.getPriorities();
+        assertEquals(facetsWithExpectedPriorities.size(), priorities.size());
+        
+        for (final MeshFacet facet: facets) {
+            assertTrue(priorities.containsKey(facet));
+            
+            final List<Double> expectedPriorities = facetsWithExpectedPriorities.get(facet);
+            final List<Double> actualPriorities = priorities.get(facet);
+            assertEquals(expectedPriorities.size(), actualPriorities.size());
+            
+            for (int i = 0; i < expectedPriorities.size(); i++) {
+                assertEquals(expectedPriorities.get(i), actualPriorities.get(i), DELTA);
+            }
+        }
+    }
+    
+    @Test
+    public void variousPrioritiesTest() {
+        final List<Double> priorities = List.of(1d, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0d, 0d);
+        final Map<MeshFacet, List<Double>> expected = new HashMap<>();
+        expected.put(getTrivialFacet(12, 1, 0, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, -1, 0, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 1, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, -1, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 0, 1, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 0, -1, 0), priorities);
+        
+        final PrioritySphere visitor = new PrioritySphere(new Point3d(0, 0, 0), 10);
+        
+        performTest(expected, visitor, false);
+    }
+    
+    @Test
+    public void allZeroPrioritiesTest() {
+        final Map<MeshFacet, List<Double>> expected = new HashMap<>();
+        expected.put(getTrivialFacet(1, 3, 0, 0, 1), List.of(0d));
+        expected.put(getTrivialFacet(5, 0, 3, 0, 1), List.of(0d, 0d, 0d, 0d, 0d));
+        expected.put(getTrivialFacet(3, -3, -3, -3, 1), List.of(0d, 0d, 0d));
+        
+        final PrioritySphere visitor = new PrioritySphere(new Point3d(0, 0, 0), 3);
+        
+        performTest(expected, visitor, false);
+    }
+    
+    @Test
+    public void noZeroPriorityTest() {
+        final Map<MeshFacet, List<Double>> expected = new HashMap<>();
+        expected.put(getTrivialFacet(1, 10, 0, 0, 1), List.of(0.9));
+        expected.put(getTrivialFacet(5, 0, -20, 0, 0), List.of(1d, 0.8, 0.6, 0.4, 0.2));
+        expected.put(getTrivialFacet(100, 0, 0, -1, 0), DoubleStream.iterate(1, d -> d > 0d, d -> d - 0.01)
+                .boxed()
+                .collect(Collectors.toList()));
+        
+        final PrioritySphere visitor = new PrioritySphere(new Point3d(0, 0, 0), 100);
+        
+        performTest(expected, visitor, false);
+    }
+    
+    @Test
+    public void concurrencyTest() {
+        final List<Double> priorities = List.of(1d, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0d, 0d);
+        final Map<MeshFacet, List<Double>> expected = new HashMap<>();
+        expected.put(getTrivialFacet(12, 1, 0, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, -1, 0, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 1, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, -1, 0, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 0, 1, 0), priorities);
+        expected.put(getTrivialFacet(12, 0, 0, -1, 0), priorities);
+        
+        final PrioritySphere visitor = new PrioritySphere(new Point3d(0, 0, 0), 10);
+        
+        performTest(expected, visitor, true);
+    }
+}
-- 
GitLab