Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryGeneratorTests.cs =================================================================== diff -u -r6030 -r6404 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryGeneratorTests.cs (.../GeometryGeneratorTests.cs) (revision 6030) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryGeneratorTests.cs (.../GeometryGeneratorTests.cs) (revision 6404) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2024. All rights reserved. +// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the Dam Engine. // @@ -20,8 +20,6 @@ // All rights reserved. using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; using Deltares.DamEngine.Data.Geometry; using NUnit.Framework; @@ -30,84 +28,6 @@ [TestFixture] public class GeometryGeneratorTests { - [TestCase(0.52, 0.51, false, true)] - [TestCase(0.51, 0.52, true, false)] - [TestCase(0.51, 0.51, true, true)] - [Test] - public void WhenDeterminePointClosestToLine_ThenResultIsAsExpected(double x1, double x2, bool isPoint1Closest, bool isPoint2Closest) - { - // Given - var line = new GeometryCurve(new Point2D(0.0, 0.0), new Point2D(1.0, 1.0)); - var point1 = new Point2D(x1, 0.5); - var point2 = new Point2D(x2, 0.5); - var isPoint1ClosestToLine = true; - var isPoint2ClosestToLine = true; - // When - GeometryGenerator.DeterminePointClosestToLine(point1, point2, line, ref isPoint1ClosestToLine, ref isPoint2ClosestToLine); - Assert.Multiple(() => - { - // Then - Assert.That(isPoint1ClosestToLine, Is.EqualTo(isPoint1Closest)); - Assert.That(isPoint2ClosestToLine, Is.EqualTo(isPoint2Closest)); - }); - } - - [Test, TestCaseSource(nameof(CurvesToBeTestedForParallelCurves))] - public void TestRegenerateParallelCurves(TestCaseCurvesToBeTestedForParallelCurves testCase) - { - // Given - var geometryData = new GeometryData(); - geometryData.Points.Add(testCase.InputPoint1); - geometryData.Points.Add(testCase.InputPoint2); - geometryData.Points.Add(testCase.InputPoint3); - geometryData.Points.Add(testCase.InputPoint4); - var curve1 = new GeometryCurve(testCase.InputPoint1, testCase.InputPoint2); - var curve2 = new GeometryCurve(testCase.InputPoint3, testCase.InputPoint4); - geometryData.Curves.Add(curve1); - geometryData.Curves.Add(curve2); - var generator = new GeometryGenerator(geometryData); - - // When - bool isCurveInserted = false; - generator.RegenerateParallelCurves(curve1, curve2, ref isCurveInserted); - - // Then - Assert.Multiple(() => - { - Assert.That(curve1.HeadPoint, Is.EqualTo(testCase.ExpectedPoint1)); - Assert.That(curve1.EndPoint, Is.EqualTo(testCase.ExpectedPoint2)); - Assert.That(curve2.HeadPoint, Is.EqualTo(testCase.ExpectedPoint3)); - Assert.That(curve2.EndPoint, Is.EqualTo(testCase.ExpectedPoint4)); - Assert.That(isCurveInserted, Is.EqualTo(testCase.IsCurveInserted)); - if (testCase.ExpectedPoint5 != null) - { - Assert.That(geometryData.NewlyEffectedCurves[0].HeadPoint, Is.EqualTo(testCase.ExpectedPoint5)); - } - if (testCase.ExpectedPoint6 != null) - { - Assert.That(geometryData.NewlyEffectedCurves[0].EndPoint, Is.EqualTo(testCase.ExpectedPoint6)); - } - }); - } - - /// - /// Test case class for parallel curves - /// - public class TestCaseCurvesToBeTestedForParallelCurves - { - public Point2D InputPoint1 { get; init; } - public Point2D InputPoint2 { get; init; } - public Point2D InputPoint3 { get; init; } - public Point2D InputPoint4 { get; init; } - public Point2D ExpectedPoint1 { get; init; } - public Point2D ExpectedPoint2 { get; init; } - public Point2D ExpectedPoint3 { get; init; } - public Point2D ExpectedPoint4 { get; init; } - public Point2D ExpectedPoint5 { get; init; } - public Point2D ExpectedPoint6 { get; init; } - public bool IsCurveInserted { get; init; } - public int TestNumber { get; init; } - } private static IEnumerable CurvesToBeTestedForParallelCurves { get @@ -119,9 +39,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point1, - InputPoint2 = point2, - InputPoint3 = point2, + InputPoint1 = point1, + InputPoint2 = point2, + InputPoint3 = point2, InputPoint4 = point3, IsCurveInserted = false, ExpectedPoint1 = point1, @@ -131,7 +51,7 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 1: ordered, not parallel should do nothing"); - + var point2_1 = new Point2D(0.0, 0.0); var point2_2 = new Point2D(4.0, 4.0); var point2_3 = new Point2D(2.0, 2.0); @@ -140,9 +60,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point2_1, - InputPoint2 = point2_2, - InputPoint3 = point2_3, + InputPoint1 = point2_1, + InputPoint2 = point2_2, + InputPoint3 = point2_3, InputPoint4 = point2_4, IsCurveInserted = true, ExpectedPoint1 = point2_1, @@ -152,7 +72,7 @@ ExpectedPoint5 = point2_4, ExpectedPoint6 = point2_2 }).SetName("Test 2: p1--p3--p4--p2 -> split c1 to c(p1--p3) keep c2, insert c(p4--p2)"); - + var point3_1 = new Point2D(0.0, 0.0); var point3_2 = new Point2D(4.0, 4.0); var point3_3 = new Point2D(3.0, 3.0); @@ -161,9 +81,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point3_1, - InputPoint2 = point3_2, - InputPoint3 = point3_3, + InputPoint1 = point3_1, + InputPoint2 = point3_2, + InputPoint3 = point3_3, InputPoint4 = point3_4, IsCurveInserted = true, ExpectedPoint1 = point3_1, @@ -173,7 +93,7 @@ ExpectedPoint5 = point3_3, ExpectedPoint6 = point3_2 }).SetName("Test 3: p1--p4--p3--p2 split c1 to c(p1--p4) keep c2, insert c(p3--p2)"); - + var point4_1 = new Point2D(0.0, 0.0); var point4_2 = new Point2D(3.0, 3.0); var point4_3 = new Point2D(2.0, 2.0); @@ -182,9 +102,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point4_1, - InputPoint2 = point4_2, - InputPoint3 = point4_3, + InputPoint1 = point4_1, + InputPoint2 = point4_2, + InputPoint3 = point4_3, InputPoint4 = point4_4, IsCurveInserted = true, ExpectedPoint1 = point4_1, @@ -194,7 +114,7 @@ ExpectedPoint5 = point4_3, ExpectedPoint6 = point4_2 }).SetName("Test 4: p1--p3--p2--p4 split c1 to c(p1--p3) split c2 to c(p2--p4), insert c(p3--p2)"); - + var point5_1 = new Point2D(0.0, 0.0); var point5_2 = new Point2D(3.0, 3.0); var point5_3 = new Point2D(4.0, 4.0); @@ -203,9 +123,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point5_1, - InputPoint2 = point5_2, - InputPoint3 = point5_3, + InputPoint1 = point5_1, + InputPoint2 = point5_2, + InputPoint3 = point5_3, InputPoint4 = point5_4, IsCurveInserted = true, ExpectedPoint1 = point5_1, @@ -215,7 +135,7 @@ ExpectedPoint5 = point5_4, ExpectedPoint6 = point5_2 }).SetName("Test 5: p1--p4--p2--p3 split c1 to c(p1--p4) split c2 to c(p3--p2), insert c(p4--p2)"); - + var point6_1 = new Point2D(0.0, 0.0); var point6_2 = new Point2D(2.0, 2.0); var point6_3 = new Point2D(4.0, 4.0); @@ -224,9 +144,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point6_1, - InputPoint2 = point6_2, - InputPoint3 = point6_3, + InputPoint1 = point6_1, + InputPoint2 = point6_2, + InputPoint3 = point6_3, InputPoint4 = point6_4, IsCurveInserted = false, ExpectedPoint1 = point6_1, @@ -236,7 +156,7 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 6: p1--p2 <--> p4--p3 in each other's extension, no overlap do nothing"); - + var point7_1 = new Point2D(0.0, 0.0); var point7_2 = new Point2D(2.0, 2.0); var point7_3 = new Point2D(3.0, 3.0); @@ -245,9 +165,9 @@ new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point7_1, - InputPoint2 = point7_2, - InputPoint3 = point7_3, + InputPoint1 = point7_1, + InputPoint2 = point7_2, + InputPoint3 = point7_3, InputPoint4 = point7_4, IsCurveInserted = false, ExpectedPoint1 = point7_1, @@ -257,18 +177,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 7: p1--p2 <--> p3--p4 in each other's extension, no overlap do nothing"); - + var point8_1 = new Point2D(0.0, 0.0); var point8_2 = new Point2D(2.0, 2.0); - var point8_3 = point8_1; + Point2D point8_3 = point8_1; var point8_4 = new Point2D(4.0, 4.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point8_1, - InputPoint2 = point8_2, - InputPoint3 = point8_3, + InputPoint1 = point8_1, + InputPoint2 = point8_2, + InputPoint3 = point8_3, InputPoint4 = point8_4, IsCurveInserted = false, ExpectedPoint1 = point8_1, @@ -278,18 +198,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 8: p1/p3--p2--p4 keep c1, split c2 to c(p2--p4)"); - + var point9_1 = new Point2D(0.0, 0.0); var point9_2 = new Point2D(4.0, 4.0); - var point9_3 = point9_1; + Point2D point9_3 = point9_1; var point9_4 = new Point2D(2.0, 2.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point9_1, - InputPoint2 = point9_2, - InputPoint3 = point9_3, + InputPoint1 = point9_1, + InputPoint2 = point9_2, + InputPoint3 = point9_3, InputPoint4 = point9_4, IsCurveInserted = false, ExpectedPoint1 = point9_4, @@ -299,18 +219,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 9: p1/p3--p4--p2 split c1 to c(p4--p2), keep c2 (p3-p4)"); - + var point10_1 = new Point2D(0.0, 0.0); var point10_2 = new Point2D(2.0, 2.0); var point10_3 = new Point2D(4.0, 4.0); - var point10_4 = point10_1; + Point2D point10_4 = point10_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point10_1, - InputPoint2 = point10_2, - InputPoint3 = point10_3, + InputPoint1 = point10_1, + InputPoint2 = point10_2, + InputPoint3 = point10_3, InputPoint4 = point10_4, IsCurveInserted = false, ExpectedPoint1 = point10_1, @@ -320,18 +240,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 10: p1/p4--p2--p3 keep c1(p1,p2) , split c2 to c(p3--p2)"); - + var point11_1 = new Point2D(0.0, 0.0); var point11_2 = new Point2D(4.0, 4.0); var point11_3 = new Point2D(2.0, 2.0); - var point11_4 = point11_1; + Point2D point11_4 = point11_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point11_1, - InputPoint2 = point11_2, - InputPoint3 = point11_3, + InputPoint1 = point11_1, + InputPoint2 = point11_2, + InputPoint3 = point11_3, InputPoint4 = point11_4, IsCurveInserted = false, ExpectedPoint1 = point11_3, @@ -341,18 +261,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 11: p1/p4--p3--p2 split c1 to c1(p3,p2), keep c2 (p3--p4)"); - + var point12_1 = new Point2D(0.0, 0.0); var point12_2 = new Point2D(2.0, 2.0); - var point12_3 = point12_2; + Point2D point12_3 = point12_2; var point12_4 = new Point2D(4.0, 4.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point12_1, - InputPoint2 = point12_2, - InputPoint3 = point12_3, + InputPoint1 = point12_1, + InputPoint2 = point12_2, + InputPoint3 = point12_3, InputPoint4 = point12_4, IsCurveInserted = false, ExpectedPoint1 = point12_1, @@ -362,18 +282,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 12: p1--p2/p3--p4 keep c1(p1,p2) , split c2(p2--p4)"); - + var point13_1 = new Point2D(4.0, 4.0); var point13_2 = new Point2D(2.0, 2.0); - var point13_3 = point13_2; + Point2D point13_3 = point13_2; var point13_4 = new Point2D(0.0, 0.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point13_1, - InputPoint2 = point13_2, - InputPoint3 = point13_3, + InputPoint1 = point13_1, + InputPoint2 = point13_2, + InputPoint3 = point13_3, InputPoint4 = point13_4, IsCurveInserted = false, ExpectedPoint1 = point13_1, @@ -383,18 +303,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 13: p4--p2/p3--p1 keep c1(p1,p2) , keep c2(p3--p4)"); - + var point14_1 = new Point2D(2.0, 2.0); var point14_2 = new Point2D(4.0, 4.0); var point14_3 = new Point2D(0.0, 0.0); - var point14_4 = point14_1; + Point2D point14_4 = point14_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point14_1, - InputPoint2 = point14_2, - InputPoint3 = point14_3, + InputPoint1 = point14_1, + InputPoint2 = point14_2, + InputPoint3 = point14_3, InputPoint4 = point14_4, IsCurveInserted = false, ExpectedPoint1 = point14_1, @@ -404,18 +324,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 14: p3--p1/p4--p2 keep c1(p1,p2) , keep c2(p3--p4)"); - + var point15_1 = new Point2D(2.0, 2.0); var point15_2 = new Point2D(0.0, 0.0); var point15_3 = new Point2D(4.0, 4.0); - var point15_4 = point15_1; + Point2D point15_4 = point15_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point15_1, - InputPoint2 = point15_2, - InputPoint3 = point15_3, + InputPoint1 = point15_1, + InputPoint2 = point15_2, + InputPoint3 = point15_3, InputPoint4 = point15_4, IsCurveInserted = false, ExpectedPoint1 = point15_1, @@ -425,18 +345,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 15: p2--p1/p4--p3 keep c1(p1,p2) , keep c2(p3--p4)"); - + var point16_1 = new Point2D(4.0, 4.0); var point16_2 = new Point2D(0.0, 0.0); var point16_3 = new Point2D(2.0, 2.0); - var point16_4 = point16_1; + Point2D point16_4 = point16_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point16_1, - InputPoint2 = point16_2, - InputPoint3 = point16_3, + InputPoint1 = point16_1, + InputPoint2 = point16_2, + InputPoint3 = point16_3, InputPoint4 = point16_4, IsCurveInserted = false, ExpectedPoint1 = point16_3, @@ -446,18 +366,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 16: p2--p3--p1/p4 split c1(p3,p2) , keep c2(p3--p4)"); - + var point17_1 = new Point2D(4.0, 4.0); var point17_2 = new Point2D(2.0, 2.0); var point17_3 = new Point2D(0.0, 0.0); - var point17_4 = point17_1; + Point2D point17_4 = point17_1; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point17_1, - InputPoint2 = point17_2, - InputPoint3 = point17_3, + InputPoint1 = point17_1, + InputPoint2 = point17_2, + InputPoint3 = point17_3, InputPoint4 = point17_4, IsCurveInserted = false, ExpectedPoint1 = point17_1, @@ -467,18 +387,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 17: p3--p2--p1/p4 keep c1(p1,p2) , split c2(p3--p2)"); - + var point18_1 = new Point2D(2.0, 2.0); var point18_2 = new Point2D(4.0, 4.0); - var point18_3 = point18_1; + Point2D point18_3 = point18_1; var point18_4 = new Point2D(0.0, 0.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point18_1, - InputPoint2 = point18_2, - InputPoint3 = point18_3, + InputPoint1 = point18_1, + InputPoint2 = point18_2, + InputPoint3 = point18_3, InputPoint4 = point18_4, IsCurveInserted = false, ExpectedPoint1 = point18_1, @@ -488,18 +408,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 18: p4--p1/p3--p2 keep c1(p1,p2) , keep c2(p3--p4)"); - + var point19_1 = new Point2D(2.0, 2.0); var point19_2 = new Point2D(0.0, 0.0); - var point19_3 = point19_1; + Point2D point19_3 = point19_1; var point19_4 = new Point2D(4.0, 4.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point19_1, - InputPoint2 = point19_2, - InputPoint3 = point19_3, + InputPoint1 = point19_1, + InputPoint2 = point19_2, + InputPoint3 = point19_3, InputPoint4 = point19_4, IsCurveInserted = false, ExpectedPoint1 = point19_1, @@ -509,18 +429,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 19: p2--p1/p3--p4 keep c1(p1,p2) , keep c2(p3--p4)"); - + var point20_1 = new Point2D(4.0, 4.0); var point20_2 = new Point2D(0.0, 0.0); - var point20_3 = point20_1; + Point2D point20_3 = point20_1; var point20_4 = new Point2D(2.0, 2.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point20_1, - InputPoint2 = point20_2, - InputPoint3 = point20_3, + InputPoint1 = point20_1, + InputPoint2 = point20_2, + InputPoint3 = point20_3, InputPoint4 = point20_4, IsCurveInserted = false, ExpectedPoint1 = point20_4, @@ -530,18 +450,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 20: p2--p4--p1/p3 split c1(p4,p2) , keep c2(p3--p4)"); - + var point21_1 = new Point2D(4.0, 4.0); var point21_2 = new Point2D(2.0, 2.0); - var point21_3 = point21_1; + Point2D point21_3 = point21_1; var point21_4 = new Point2D(0.0, 0.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point21_1, - InputPoint2 = point21_2, - InputPoint3 = point21_3, + InputPoint1 = point21_1, + InputPoint2 = point21_2, + InputPoint3 = point21_3, InputPoint4 = point21_4, IsCurveInserted = false, ExpectedPoint1 = point21_1, @@ -551,18 +471,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 21: p4--p2--p1/p3 keep c1(p1,p2) , split c2(p2-p4)"); - + var point22_1 = new Point2D(2.0, 2.0); var point22_2 = new Point2D(0.0, 0.0); var point22_3 = new Point2D(4.0, 4.0); - var point22_4 = point22_2; + Point2D point22_4 = point22_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point22_1, - InputPoint2 = point22_2, - InputPoint3 = point22_3, + InputPoint1 = point22_1, + InputPoint2 = point22_2, + InputPoint3 = point22_3, InputPoint4 = point22_4, IsCurveInserted = false, ExpectedPoint1 = point22_1, @@ -572,18 +492,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 22: p2/p4--p1--p3 keep c1(p1,p2) , split c2(p3-p1)"); - + var point23_1 = new Point2D(4.0, 4.0); var point23_2 = new Point2D(0.0, 0.0); var point23_3 = new Point2D(2.0, 2.0); - var point23_4 = point23_2; + Point2D point23_4 = point23_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point23_1, - InputPoint2 = point23_2, - InputPoint3 = point23_3, + InputPoint1 = point23_1, + InputPoint2 = point23_2, + InputPoint3 = point23_3, InputPoint4 = point23_4, IsCurveInserted = false, ExpectedPoint1 = point23_1, @@ -593,18 +513,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 23: p2/p4--p3--p1 split c1(p1,p3) , keep c2(p3-p4)"); - + var point24_1 = new Point2D(0.0, 0.0); var point24_2 = new Point2D(2.0, 2.0); var point24_3 = new Point2D(4.0, 4.0); - var point24_4 = point24_2; + Point2D point24_4 = point24_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point24_1, - InputPoint2 = point24_2, - InputPoint3 = point24_3, + InputPoint1 = point24_1, + InputPoint2 = point24_2, + InputPoint3 = point24_3, InputPoint4 = point24_4, IsCurveInserted = false, ExpectedPoint1 = point24_1, @@ -614,18 +534,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 24: p1--p2/p4--p3 keep c1(p1,p2) , keep c2(p3-p4)"); - + var point25_1 = new Point2D(4.0, 4.0); var point25_2 = new Point2D(2.0, 2.0); var point25_3 = new Point2D(0.0, 0.0); - var point25_4 = point25_2; + Point2D point25_4 = point25_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point25_1, - InputPoint2 = point25_2, - InputPoint3 = point25_3, + InputPoint1 = point25_1, + InputPoint2 = point25_2, + InputPoint3 = point25_3, InputPoint4 = point25_4, IsCurveInserted = false, ExpectedPoint1 = point25_1, @@ -635,18 +555,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 25: p3--p2/p4--p1 keep c1(p1,p2) , keep c2(p3-p4)"); - + var point26_1 = new Point2D(0.0, 0.0); var point26_2 = new Point2D(4.0, 4.0); var point26_3 = new Point2D(2.0, 2.0); - var point26_4 = point26_2; + Point2D point26_4 = point26_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point26_1, - InputPoint2 = point26_2, - InputPoint3 = point26_3, + InputPoint1 = point26_1, + InputPoint2 = point26_2, + InputPoint3 = point26_3, InputPoint4 = point26_4, IsCurveInserted = false, ExpectedPoint1 = point26_1, @@ -656,18 +576,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 26: p1--p3--p2/p4 split c1(p1,p3) , keep c2(p3-p4)"); - + var point27_1 = new Point2D(2.0, 2.0); var point27_2 = new Point2D(4.0, 4.0); var point27_3 = new Point2D(0.0, 0.0); - var point27_4 = point27_2; + Point2D point27_4 = point27_2; yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point27_1, - InputPoint2 = point27_2, - InputPoint3 = point27_3, + InputPoint1 = point27_1, + InputPoint2 = point27_2, + InputPoint3 = point27_3, InputPoint4 = point27_4, IsCurveInserted = false, ExpectedPoint1 = point27_1, @@ -677,18 +597,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 27: p3--p1--p2/p4 keep c1(p1,p2) , split c2(p3-p1)"); - + var point28_1 = new Point2D(2.0, 2.0); var point28_2 = new Point2D(0.0, 0.0); - var point28_3 = point28_2; + Point2D point28_3 = point28_2; var point28_4 = new Point2D(4.0, 4.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point28_1, - InputPoint2 = point28_2, - InputPoint3 = point28_3, + InputPoint1 = point28_1, + InputPoint2 = point28_2, + InputPoint3 = point28_3, InputPoint4 = point28_4, IsCurveInserted = false, ExpectedPoint1 = point28_1, @@ -698,18 +618,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 28: p2/p3--p1--p4 keep c1(p1,p2) , split c2(p1-p4)"); - + var point29_1 = new Point2D(4.0, 4.0); var point29_2 = new Point2D(0.0, 0.0); - var point29_3 = point29_2; + Point2D point29_3 = point29_2; var point29_4 = new Point2D(2.0, 2.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point29_1, - InputPoint2 = point29_2, - InputPoint3 = point29_3, + InputPoint1 = point29_1, + InputPoint2 = point29_2, + InputPoint3 = point29_3, InputPoint4 = point29_4, IsCurveInserted = false, ExpectedPoint1 = point29_1, @@ -719,18 +639,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 29: p2/p3--p4--p1 split c1(p1,p4) , keep c2(p3-p4)"); - + var point30_1 = new Point2D(0.0, 0.0); var point30_2 = new Point2D(2.0, 2.0); - var point30_3 = point30_2; + Point2D point30_3 = point30_2; var point30_4 = new Point2D(4.0, 4.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point30_1, - InputPoint2 = point30_2, - InputPoint3 = point30_3, + InputPoint1 = point30_1, + InputPoint2 = point30_2, + InputPoint3 = point30_3, InputPoint4 = point30_4, IsCurveInserted = false, ExpectedPoint1 = point30_1, @@ -740,18 +660,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 30: p1--p2/p3--p4 keep c1(p1,p2) , keep c2(p3-p4)"); - + var point31_1 = new Point2D(4.0, 4.0); var point31_2 = new Point2D(2.0, 2.0); - var point31_3 = point31_2; + Point2D point31_3 = point31_2; var point31_4 = new Point2D(0.0, 0.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point31_1, - InputPoint2 = point31_2, - InputPoint3 = point31_3, + InputPoint1 = point31_1, + InputPoint2 = point31_2, + InputPoint3 = point31_3, InputPoint4 = point31_4, IsCurveInserted = false, ExpectedPoint1 = point31_1, @@ -761,18 +681,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 31: p4--p2/p3--p1 keep c1(p1,p2) , keep c2(p3-p4)"); - + var point32_1 = new Point2D(0.0, 0.0); var point32_2 = new Point2D(4.0, 4.0); - var point32_3 = point32_2; + Point2D point32_3 = point32_2; var point32_4 = new Point2D(2.0, 2.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point32_1, - InputPoint2 = point32_2, - InputPoint3 = point32_3, + InputPoint1 = point32_1, + InputPoint2 = point32_2, + InputPoint3 = point32_3, InputPoint4 = point32_4, IsCurveInserted = false, ExpectedPoint1 = point32_1, @@ -782,19 +702,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 32: p1--p4--p2/p3 split c1(p1,p4) , keep c2(p3-p4)"); - - + var point33_1 = new Point2D(2.0, 2.0); var point33_2 = new Point2D(4.0, 4.0); - var point33_3 = point33_2; + Point2D point33_3 = point33_2; var point33_4 = new Point2D(0.0, 0.0); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point33_1, - InputPoint2 = point33_2, - InputPoint3 = point33_3, + InputPoint1 = point33_1, + InputPoint2 = point33_2, + InputPoint3 = point33_3, InputPoint4 = point33_4, IsCurveInserted = false, ExpectedPoint1 = point33_1, @@ -804,18 +723,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 33: p4--p1--p2/p3 keep c1(p1,p2) , split c2(p1-p4)"); - + var point34_1 = new Point2D(39.580, 4.550); var point34_2 = new Point2D(41.070, 4.540); - var point34_3 = point34_1; + Point2D point34_3 = point34_1; var point34_4 = new Point2D(39.730, 4.549); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point34_1, - InputPoint2 = point34_2, - InputPoint3 = point34_3, + InputPoint1 = point34_1, + InputPoint2 = point34_2, + InputPoint3 = point34_3, InputPoint4 = point34_4, IsCurveInserted = false, ExpectedPoint1 = point34_4, @@ -825,18 +744,18 @@ ExpectedPoint5 = null, ExpectedPoint6 = null }).SetName("Test 34: near parallel p1/p3--p4--p2 split c1 to c(p4--p2), keep c2 (p3-p4)"); - + var point35_1 = new Point2D(39.580, 4.550); var point35_2 = new Point2D(39.730, 4.549); - var point35_3 =point35_1; + Point2D point35_3 = point35_1; var point35_4 = new Point2D(41.070, 4.540); yield return new TestCaseData( new TestCaseCurvesToBeTestedForParallelCurves { TestNumber = 1, - InputPoint1 = point35_1, - InputPoint2 = point35_2, - InputPoint3 = point35_3, + InputPoint1 = point35_1, + InputPoint2 = point35_2, + InputPoint3 = point35_3, InputPoint4 = point35_4, IsCurveInserted = false, ExpectedPoint1 = point35_1, @@ -848,4 +767,84 @@ }).SetName("Test 35: near parallel p1/p3--p2--p4 keep c1, split c2 to c(p2--p4)"); } } + + [TestCase(0.52, 0.51, false, true)] + [TestCase(0.51, 0.52, true, false)] + [TestCase(0.51, 0.51, true, true)] + [Test] + public void WhenDeterminePointClosestToLine_ThenResultIsAsExpected(double x1, double x2, bool isPoint1Closest, bool isPoint2Closest) + { + // Given + var line = new GeometryCurve(new Point2D(0.0, 0.0), new Point2D(1.0, 1.0)); + var point1 = new Point2D(x1, 0.5); + var point2 = new Point2D(x2, 0.5); + var isPoint1ClosestToLine = true; + var isPoint2ClosestToLine = true; + // When + GeometryGenerator.DeterminePointClosestToLine(point1, point2, line, ref isPoint1ClosestToLine, ref isPoint2ClosestToLine); + Assert.Multiple(() => + { + // Then + Assert.That(isPoint1ClosestToLine, Is.EqualTo(isPoint1Closest)); + Assert.That(isPoint2ClosestToLine, Is.EqualTo(isPoint2Closest)); + }); + } + + [Test, TestCaseSource(nameof(CurvesToBeTestedForParallelCurves))] + public void TestRegenerateParallelCurves(TestCaseCurvesToBeTestedForParallelCurves testCase) + { + // Given + var geometryData = new GeometryData(); + geometryData.Points.Add(testCase.InputPoint1); + geometryData.Points.Add(testCase.InputPoint2); + geometryData.Points.Add(testCase.InputPoint3); + geometryData.Points.Add(testCase.InputPoint4); + var curve1 = new GeometryCurve(testCase.InputPoint1, testCase.InputPoint2); + var curve2 = new GeometryCurve(testCase.InputPoint3, testCase.InputPoint4); + geometryData.Curves.Add(curve1); + geometryData.Curves.Add(curve2); + var generator = new GeometryGenerator(geometryData); + + // When + var isCurveInserted = false; + generator.RegenerateParallelCurves(curve1, curve2, ref isCurveInserted); + + // Then + Assert.Multiple(() => + { + Assert.That(curve1.HeadPoint, Is.EqualTo(testCase.ExpectedPoint1)); + Assert.That(curve1.EndPoint, Is.EqualTo(testCase.ExpectedPoint2)); + Assert.That(curve2.HeadPoint, Is.EqualTo(testCase.ExpectedPoint3)); + Assert.That(curve2.EndPoint, Is.EqualTo(testCase.ExpectedPoint4)); + Assert.That(isCurveInserted, Is.EqualTo(testCase.IsCurveInserted)); + if (testCase.ExpectedPoint5 != null) + { + Assert.That(geometryData.NewlyEffectedCurves[0].HeadPoint, Is.EqualTo(testCase.ExpectedPoint5)); + } + + if (testCase.ExpectedPoint6 != null) + { + Assert.That(geometryData.NewlyEffectedCurves[0].EndPoint, Is.EqualTo(testCase.ExpectedPoint6)); + } + }); + } + + /// + /// Test case class for parallel curves + /// + public class TestCaseCurvesToBeTestedForParallelCurves + { + public Point2D InputPoint1 { get; init; } + public Point2D InputPoint2 { get; init; } + public Point2D InputPoint3 { get; init; } + public Point2D InputPoint4 { get; init; } + public Point2D ExpectedPoint1 { get; init; } + public Point2D ExpectedPoint2 { get; init; } + public Point2D ExpectedPoint3 { get; init; } + public Point2D ExpectedPoint4 { get; init; } + public Point2D ExpectedPoint5 { get; init; } + public Point2D ExpectedPoint6 { get; init; } + public bool IsCurveInserted { get; init; } + public int TestNumber { get; init; } + } } \ No newline at end of file