From 7d52bc8be4b1a66c257a3fccf80899b4f468de3f Mon Sep 17 00:00:00 2001 From: BobLd Date: Wed, 18 Mar 2020 08:49:53 +0000 Subject: [PATCH] make Distances.FindIndexNearest public add tests for Distances.FindIndexNearest --- .../Distances.cs | 4 +- .../Dla/DistancesTest.cs | 1122 +++++++++++++++++ 2 files changed, 1124 insertions(+), 2 deletions(-) diff --git a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/Distances.cs b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/Distances.cs index 9fd5ad20..bb13f97a 100644 --- a/src/UglyToad.PdfPig.DocumentLayoutAnalysis/Distances.cs +++ b/src/UglyToad.PdfPig.DocumentLayoutAnalysis/Distances.cs @@ -130,7 +130,7 @@ /// /// The distance measure to use. /// The distance between reference point, and its nearest neighbour. - internal static int FindIndexNearest(T element, IReadOnlyList candidates, + public static int FindIndexNearest(T element, IReadOnlyList candidates, Func candidatesPoint, Func pivotPoint, Func distanceMeasure, out double distance) { @@ -172,7 +172,7 @@ /// /// The distance measure between two lines to use. /// The distance between reference line, and its nearest neighbour. - internal static int FindIndexNearest(T element, IReadOnlyList candidates, + public static int FindIndexNearest(T element, IReadOnlyList candidates, Func candidatesLine, Func pivotLine, Func distanceMeasure, out double distance) { diff --git a/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs b/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs index a082c4b2..af862236 100644 --- a/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs +++ b/src/UglyToad.PdfPig.Tests/Dla/DistancesTest.cs @@ -2127,6 +2127,1115 @@ 13 } }; + + + public static PdfPoint[] NNData = new PdfPoint[] + { + new PdfPoint(82.45353838109239, 62.415005093558115), + new PdfPoint(16.445674398013832, 7.051331644986569), + new PdfPoint(35.583597244228336, 27.46872033901967), + new PdfPoint(63.8245554804822, 44.89509346225664), + new PdfPoint(0.7742372570967326, 6.938583013317256), + new PdfPoint(65.40181734760978, 22.29324720161768), + new PdfPoint(97.13960454465617, 50.25370334786503), + new PdfPoint(19.15551535520754, 45.53805856543256), + new PdfPoint(80.59123120177551, 25.51233282470693), + new PdfPoint(5.021252133213605, 56.04912906205743), + new PdfPoint(24.41810676553939, 79.31739454102991), + new PdfPoint(98.12630738875605, 12.483472098628233), + new PdfPoint(82.48631571672695, 29.34364176375367), + new PdfPoint(35.803655214742406, 5.16089154047169), + new PdfPoint(1.813800375443253, 47.255096977735214), + new PdfPoint(80.11998397458856, 25.99984035749021), + new PdfPoint(90.26397977468233, 88.93339150438577), + new PdfPoint(8.254965696884042, 8.97868520394496), + new PdfPoint(14.158071542303697, 98.52077265281578), + new PdfPoint(70.71899728005727, 9.70650341683359), + new PdfPoint(58.60508497220939, 69.22169822597527), + new PdfPoint(15.143510163282482, 66.19892308162831), + new PdfPoint(16.49098129875618, 61.44894011847811), + new PdfPoint(59.31519405414486, 64.30374393065894), + new PdfPoint(58.880198617023936, 69.74930498275906), + new PdfPoint(58.78888045620321, 4.76405876739463), + new PdfPoint(11.228694290441743, 12.860145308234605), + new PdfPoint(80.62371302859762, 81.02375037506395), + new PdfPoint(90.87481745321885, 8.048659530077462), + new PdfPoint(86.97060905691454, 53.23733886383501), + new PdfPoint(79.77968787046065, 62.69132229661655), + new PdfPoint(97.45369858932968, 33.575350634376086), + new PdfPoint(55.68259729639997, 78.53266468780453), + new PdfPoint(84.80993603153726, 40.80973096746926), + new PdfPoint(52.89633110070122, 15.424096971651757), + new PdfPoint(31.112041569584935, 55.44209995586027), + new PdfPoint(49.53804959253269, 92.63065004232082), + new PdfPoint(92.45607820110665, 72.66951564303699), + new PdfPoint(24.636942156010523, 22.044633809864933), + new PdfPoint(99.76982890678676, 52.90800974490838), + new PdfPoint(82.61099784649278, 17.85771383958713), + new PdfPoint(74.16588992664359, 81.00550169213861), + new PdfPoint(13.34483441571791, 47.0726836958395), + new PdfPoint(47.945049322341525, 9.252548969452246), + new PdfPoint(82.78544384909999, 85.53384162961818), + new PdfPoint(86.41791572882465, 84.5461317010868), + new PdfPoint(67.53711275495073, 90.39020510040851), + new PdfPoint(62.56803790975437, 46.05914229645705), + new PdfPoint(71.56130305322326, 8.098723357173876), + new PdfPoint(37.970724110053844, 36.503310666941424), + new PdfPoint(18.3788032374675, 19.84795034896214), + new PdfPoint(18.13308334914272, 1.2881803099952127), + new PdfPoint(81.60160120456186, 59.00242318333139), + new PdfPoint(37.57869607184197, 27.967241358959505), + new PdfPoint(97.7460348272766, 5.634112362720456), + new PdfPoint(84.9666796464414, 68.61319827025679), + new PdfPoint(29.725739779656745, 38.277277199189065), + new PdfPoint(15.448731011261907, 30.373061794712797), + new PdfPoint(70.09436264721477, 86.01779473250726), + new PdfPoint(71.14819197800337, 52.17424240997747), + new PdfPoint(43.017566199578106, 57.09185921458071), + new PdfPoint(33.433656443618766, 3.2699185921492235), + new PdfPoint(2.4884293540186175, 29.514037079380717), + new PdfPoint(72.74747856539602, 44.441442049411116), + new PdfPoint(15.264247773398054, 0.8939481426395335), + new PdfPoint(82.27200991589356, 79.74763514660499), + new PdfPoint(34.43836768761709, 85.52303143204219), + new PdfPoint(91.90691599722378, 96.20420265233045), + new PdfPoint(10.747687004702266, 72.62390777764313), + new PdfPoint(18.204503055467892, 62.00619128580146), + new PdfPoint(91.00755813085259, 81.62926984298593), + new PdfPoint(52.97863363490906, 68.26721122337617), + new PdfPoint(84.97188896260866, 40.483497230772926), + new PdfPoint(82.04208148460329, 71.99786553392418), + new PdfPoint(75.03458936225277, 45.61844875850991), + new PdfPoint(62.777729239709636, 93.54972672515291), + new PdfPoint(70.36073331446983, 3.9743344551363857), + new PdfPoint(84.64548329605812, 44.580018552016185), + new PdfPoint(44.866927314279856, 7.669932380951572), + new PdfPoint(90.03637785608008, 39.71900281528301), + new PdfPoint(63.98092485758994, 24.420561596263646), + new PdfPoint(11.201209707090698, 49.55375920684947), + new PdfPoint(99.66377946738517, 22.268044551668787), + new PdfPoint(57.19140901930086, 6.016576988006017), + new PdfPoint(42.195134616764996, 62.54652068319705), + new PdfPoint(49.61310425442538, 20.010647167526496), + new PdfPoint(52.44257355334966, 84.19422038812934), + new PdfPoint(67.0752294529232, 39.24937886844233), + new PdfPoint(43.03278016511083, 4.6357991376672185), + new PdfPoint(49.42598643546282, 18.91930873569896), + new PdfPoint(93.45285655237589, 26.040139241642603), + new PdfPoint(99.36796037285181, 90.9895050206579), + new PdfPoint(69.38884149074713, 6.0366785105100185), + new PdfPoint(99.69679458529599, 47.806517636673476), + new PdfPoint(80.69475374791655, 21.854199922464968), + new PdfPoint(89.04717161055198, 88.20721990563409), + new PdfPoint(46.898436066324166, 25.173429288152636), + new PdfPoint(8.420107657979937, 68.0080815210619), + new PdfPoint(28.000497306010118, 81.20161949340638), + new PdfPoint(24.103817108644833, 21.163820177769633) +}; + + public static IEnumerable NNExpectedData => new[] + { + new object[] + { + new PdfPoint(87.37822238977932, 47.13424664374255), + new object[] + { + 3.7405807168027154, + 77, + new PdfPoint(84.64548329605812, 44.580018552016185), + } + }, + new object[] + { + new PdfPoint(74.5026032549824, 69.93356102115371), + new object[] + { + 7.816974165006036, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(54.01419184925133, 71.12439211149801), + new object[] + { + 3.039056340830242, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(53.56967860131475, 54.19173302307295), + new object[] + { + 10.943391067925589, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(33.62320720050764, 38.388295379543614), + new object[] + { + 3.899048259891558, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(67.71643075209577, 98.50616915055454), + new object[] + { + 6.996934624874407, + 75, + new PdfPoint(62.777729239709636, 93.54972672515291), + } + }, + new object[] + { + new PdfPoint(62.853776192101186, 77.58809088626217), + new object[] + { + 7.233120102743402, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(39.1710541173474, 6.731437418177089), + new object[] + { + 3.7156412263891623, + 13, + new PdfPoint(35.803655214742406, 5.16089154047169), + } + }, + new object[] + { + new PdfPoint(9.500054562360727, 40.24933325499364), + new object[] + { + 7.832014004033237, + 42, + new PdfPoint(13.34483441571791, 47.0726836958395), + } + }, + new object[] + { + new PdfPoint(4.158440156246623, 15.800929441459854), + new object[] + { + 7.657460730577243, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + } + }, + new object[] + { + new PdfPoint(70.38603008213099, 37.92398478562566), + new object[] + { + 3.5662403566120062, + 87, + new PdfPoint(67.0752294529232, 39.24937886844233), + } + }, + new object[] + { + new PdfPoint(36.49654657133572, 22.300307481532634), + new object[] + { + 5.24842528186342, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(44.448096442616745, 76.71337511467348), + new object[] + { + 10.948730989453496, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + } + }, + new object[] + { + new PdfPoint(18.520340417793502, 44.31476289468993), + new object[] + { + 1.378368419246679, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + } + }, + new object[] + { + new PdfPoint(68.27767536726084, 94.51997472754229), + new object[] + { + 4.195644188434987, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(80.9852186456766, 37.41169774270004), + new object[] + { + 5.032841375488803, + 72, + new PdfPoint(84.97188896260866, 40.483497230772926), + } + }, + new object[] + { + new PdfPoint(57.035762190811745, 39.26879178691382), + new object[] + { + 8.758706221403711, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(12.085443471887913, 97.92593979377935), + new object[] + { + 2.1562961875551574, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(77.27841905993205, 42.15685387387795), + new object[] + { + 4.125216461895987, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + } + }, + new object[] + { + new PdfPoint(85.87212254856951, 56.063370792337665), + new object[] + { + 3.032017326786329, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + } + }, + new object[] + { + new PdfPoint(12.121061998950344, 88.5888682638655), + new object[] + { + 10.138645504748764, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(87.40498458296966, 51.58451776586178), + new object[] + { + 1.7089469504759578, + 29, + new PdfPoint(86.97060905691454, 53.23733886383501), + } + }, + new object[] + { + new PdfPoint(55.13592516333022, 41.86805042798852), + new object[] + { + 8.532382488232894, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(46.67110223109417, 55.89363812932652), + new object[] + { + 3.8450044606910225, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(16.092850368369838, 39.120936314989095), + new object[] + { + 7.110511570818105, + 7, + new PdfPoint(19.15551535520754, 45.53805856543256), + } + }, + new object[] + { + new PdfPoint(60.44407078486588, 51.23153354793123), + new object[] + { + 5.591499584720878, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(16.3698062506329, 73.24470440615686), + new object[] + { + 5.656289708761183, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(23.603385764313224, 35.368200010880244), + new object[] + { + 6.7783441028566624, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(55.00466410944499, 87.18171359059261), + new object[] + { + 3.9356605103079088, + 86, + new PdfPoint(52.44257355334966, 84.19422038812934), + } + }, + new object[] + { + new PdfPoint(79.35386322733488, 71.45043817963591), + new object[] + { + 2.7433909868872557, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(92.04745240854216, 81.04432394243022), + new object[] + { + 1.193122715963635, + 70, + new PdfPoint(91.00755813085259, 81.62926984298593), + } + }, + new object[] + { + new PdfPoint(38.38165092946303, 48.26803735488079), + new object[] + { + 9.967524396930479, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(76.69366761932686, 86.37384253935019), + new object[] + { + 5.9336956035398005, + 41, + new PdfPoint(74.16588992664359, 81.00550169213861), + } + }, + new object[] + { + new PdfPoint(26.857001817848914, 72.32337753974622), + new object[] + { + 7.407056290485798, + 10, + new PdfPoint(24.41810676553939, 79.31739454102991), + } + }, + new object[] + { + new PdfPoint(67.72139867299835, 92.06400298246639), + new object[] + { + 1.6839123045966824, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(60.07059131774799, 65.14826966545107), + new object[] + { + 1.1330704932109386, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + } + }, + new object[] + { + new PdfPoint(98.18469148101073, 19.636669855162936), + new object[] + { + 3.018581465663707, + 82, + new PdfPoint(99.66377946738517, 22.268044551668787), + } + }, + new object[] + { + new PdfPoint(13.315505500931046, 2.219169876084226), + new object[] + { + 2.3566520929687598, + 64, + new PdfPoint(15.264247773398054, 0.8939481426395335), + } + }, + new object[] + { + new PdfPoint(9.499232323084716, 53.073137917110024), + new object[] + { + 3.9093162473638645, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + } + }, + new object[] + { + new PdfPoint(68.33664969059441, 84.3521765566152), + new object[] + { + 2.4215364431973803, + 58, + new PdfPoint(70.09436264721477, 86.01779473250726), + } + }, + new object[] + { + new PdfPoint(68.17553361331473, 88.07665773162144), + new object[] + { + 2.4000172124415697, + 46, + new PdfPoint(67.53711275495073, 90.39020510040851), + } + }, + new object[] + { + new PdfPoint(49.166278548969665, 1.397572786085366), + new object[] + { + 6.93584258247533, + 88, + new PdfPoint(43.03278016511083, 4.6357991376672185), + } + }, + new object[] + { + new PdfPoint(24.727638210913018, 32.081396611116276), + new object[] + { + 7.960524829000644, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(88.42089809955208, 39.026696182483356), + new object[] + { + 1.7575731329222621, + 79, + new PdfPoint(90.03637785608008, 39.71900281528301), + } + }, + new object[] + { + new PdfPoint(51.42556152624328, 15.448878446223556), + new object[] + { + 1.470978335201828, + 34, + new PdfPoint(52.89633110070122, 15.424096971651757), + } + }, + new object[] + { + new PdfPoint(19.693229959708034, 2.7893290005286175), + new object[] + { + 2.1650646266448024, + 51, + new PdfPoint(18.13308334914272, 1.2881803099952127), + } + }, + new object[] + { + new PdfPoint(9.279840978602271, 29.123265376879715), + new object[] + { + 6.294219198683488, + 57, + new PdfPoint(15.448731011261907, 30.373061794712797), + } + }, + new object[] + { + new PdfPoint(78.20191411050928, 81.43682258294183), + new object[] + { + 2.4567740328680956, + 27, + new PdfPoint(80.62371302859762, 81.02375037506395), + } + }, + new object[] + { + new PdfPoint(40.537261184519394, 72.9327512887614), + new object[] + { + 10.517715080249477, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + } + }, + new object[] + { + new PdfPoint(7.386788690671264, 3.4978575051093697), + new object[] + { + 5.549162421342523, + 17, + new PdfPoint(8.254965696884042, 8.97868520394496), + } + }, + new object[] + { + new PdfPoint(26.05756081867855, 84.20846377940514), + new object[] + { + 3.579960160958175, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + } + }, + new object[] + { + new PdfPoint(74.3139313663137, 31.084939962251912), + new object[] + { + 7.718062249062456, + 15, + new PdfPoint(80.11998397458856, 25.99984035749021), + } + }, + new object[] + { + new PdfPoint(27.08914433160744, 37.16399756733006), + new object[] + { + 2.8619970467116924, + 56, + new PdfPoint(29.725739779656745, 38.277277199189065), + } + }, + new object[] + { + new PdfPoint(70.85333147347784, 5.242611226453819), + new object[] + { + 1.3605803595971302, + 76, + new PdfPoint(70.36073331446983, 3.9743344551363857), + } + }, + new object[] + { + new PdfPoint(51.77204458863274, 52.932206910888034), + new object[] + { + 9.69245062675278, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(13.471218812546915, 11.31698816247696), + new object[] + { + 2.7221774756150476, + 26, + new PdfPoint(11.228694290441743, 12.860145308234605), + } + }, + new object[] + { + new PdfPoint(23.382642351306295, 64.21491294035737), + new object[] + { + 5.629527326020367, + 69, + new PdfPoint(18.204503055467892, 62.00619128580146), + } + }, + new object[] + { + new PdfPoint(21.987233262429573, 11.042886413409592), + new object[] + { + 6.829449766789799, + 1, + new PdfPoint(16.445674398013832, 7.051331644986569), + } + }, + new object[] + { + new PdfPoint(44.65334716075204, 56.72809804882697), + new object[] + { + 1.6757391022022616, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(14.413577866791204, 65.20588702038663), + new object[] + { + 1.2324454456029377, + 21, + new PdfPoint(15.143510163282482, 66.19892308162831), + } + }, + new object[] + { + new PdfPoint(1.496525343024535, 34.243471455041515), + new object[] + { + 4.83233101936407, + 62, + new PdfPoint(2.4884293540186175, 29.514037079380717), + } + }, + new object[] + { + new PdfPoint(60.37475135874306, 86.38587789183474), + new object[] + { + 7.556125515305361, + 75, + new PdfPoint(62.777729239709636, 93.54972672515291), + } + }, + new object[] + { + new PdfPoint(87.96474891454915, 60.71664437764912), + new object[] + { + 5.766963730198733, + 0, + new PdfPoint(82.45353838109239, 62.415005093558115), + } + }, + new object[] + { + new PdfPoint(93.90443153077325, 3.5656814220870303), + new object[] + { + 4.363063424232462, + 54, + new PdfPoint(97.7460348272766, 5.634112362720456), + } + }, + new object[] + { + new PdfPoint(56.99120651646804, 81.00351342714225), + new object[] + { + 2.7959884805796307, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(76.89422069517484, 54.17932624450519), + new object[] + { + 6.085820174967678, + 59, + new PdfPoint(71.14819197800337, 52.17424240997747), + } + }, + new object[] + { + new PdfPoint(63.45013931565355, 80.49930589119406), + new object[] + { + 8.012639180927806, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(31.33405794501082, 30.022880285076926), + new object[] + { + 4.958055796946755, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(59.209873769066554, 46.30109565207685), + new object[] + { + 3.366869142407712, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(78.79398195705156, 78.45536064489083), + new object[] + { + 3.153496725896489, + 27, + new PdfPoint(80.62371302859762, 81.02375037506395), + } + }, + new object[] + { + new PdfPoint(85.57104507254752, 24.654183310002807), + new object[] + { + 5.053213509947922, + 8, + new PdfPoint(80.59123120177551, 25.51233282470693), + } + }, + new object[] + { + new PdfPoint(78.95708936964519, 12.704872047938153), + new object[] + { + 6.31686834491134, + 40, + new PdfPoint(82.61099784649278, 17.85771383958713), + } + }, + new object[] + { + new PdfPoint(13.174935980071456, 88.82914034992214), + new object[] + { + 9.741370141218182, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(55.623046798666124, 96.84465577887713), + new object[] + { + 7.4016913841622145, + 36, + new PdfPoint(49.53804959253269, 92.63065004232082), + } + }, + new object[] + { + new PdfPoint(8.430144926873329, 97.99469494927773), + new object[] + { + 5.75203451501427, + 18, + new PdfPoint(14.158071542303697, 98.52077265281578), + } + }, + new object[] + { + new PdfPoint(43.22581030476383, 49.88363608992273), + new object[] + { + 7.211230562268732, + 60, + new PdfPoint(43.017566199578106, 57.09185921458071), + } + }, + new object[] + { + new PdfPoint(52.462469277256375, 74.30081146714733), + new object[] + { + 5.317688044710818, + 32, + new PdfPoint(55.68259729639997, 78.53266468780453), + } + }, + new object[] + { + new PdfPoint(2.0752344418159763, 84.50188522953496), + new object[] + { + 14.707065710166793, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(87.72047866413772, 86.93785567990162), + new object[] + { + 1.8361371712469572, + 95, + new PdfPoint(89.04717161055198, 88.20721990563409), + } + }, + new object[] + { + new PdfPoint(85.69225991285919, 6.507776800176323), + new object[] + { + 5.40677558683976, + 28, + new PdfPoint(90.87481745321885, 8.048659530077462), + } + }, + new object[] + { + new PdfPoint(95.701988137853, 51.80572553493597), + new object[] + { + 2.11554101881059, + 6, + new PdfPoint(97.13960454465617, 50.25370334786503), + } + }, + new object[] + { + new PdfPoint(77.4844196684514, 50.073882954946704), + new object[] + { + 5.084541514035221, + 74, + new PdfPoint(75.03458936225277, 45.61844875850991), + } + }, + new object[] + { + new PdfPoint(93.83858926824583, 78.54914176983279), + new object[] + { + 4.183530356997088, + 70, + new PdfPoint(91.00755813085259, 81.62926984298593), + } + }, + new object[] + { + new PdfPoint(69.60341179436881, 2.118953273473234), + new object[] + { + 2.003989823845886, + 76, + new PdfPoint(70.36073331446983, 3.9743344551363857), + } + }, + new object[] + { + new PdfPoint(21.036323077268815, 30.797805649614528), + new object[] + { + 5.603712380054862, + 57, + new PdfPoint(15.448731011261907, 30.373061794712797), + } + }, + new object[] + { + new PdfPoint(67.01310772132939, 11.758224733999745), + new object[] + { + 4.235938831569964, + 19, + new PdfPoint(70.71899728005727, 9.70650341683359), + } + }, + new object[] + { + new PdfPoint(58.40755345770724, 54.22645743167164), + new object[] + { + 9.16595152690823, + 47, + new PdfPoint(62.56803790975437, 46.05914229645705), + } + }, + new object[] + { + new PdfPoint(49.248852518964966, 70.66641193673007), + new object[] + { + 4.434797767182969, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(2.7054302324065804, 31.088830779825305), + new object[] + { + 1.5896743629376124, + 62, + new PdfPoint(2.4884293540186175, 29.514037079380717), + } + }, + new object[] + { + new PdfPoint(30.842485871231062, 31.67560039456263), + new object[] + { + 6.3384522442698294, + 2, + new PdfPoint(35.583597244228336, 27.46872033901967), + } + }, + new object[] + { + new PdfPoint(55.56502506452341, 65.54856266577112), + new object[] + { + 3.75239531592163, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + }, + new object[] + { + new PdfPoint(1.267016931392484, 79.30364358908852), + new object[] + { + 11.59749867642406, + 68, + new PdfPoint(10.747687004702266, 72.62390777764313), + } + }, + new object[] + { + new PdfPoint(85.80159109593838, 72.9274073673635), + new object[] + { + 3.8727200438238047, + 73, + new PdfPoint(82.04208148460329, 71.99786553392418), + } + }, + new object[] + { + new PdfPoint(31.687705038346536, 73.64980455511628), + new object[] + { + 8.403892534033446, + 98, + new PdfPoint(28.000497306010118, 81.20161949340638), + } + }, + new object[] + { + new PdfPoint(9.155398598534447, 51.101027419495416), + new object[] + { + 2.565030606787517, + 81, + new PdfPoint(11.201209707090698, 49.55375920684947), + } + }, + new object[] + { + new PdfPoint(95.78765937402926, 29.508025935639814), + new object[] + { + 4.180615066997134, + 90, + new PdfPoint(93.45285655237589, 26.040139241642603), + } + }, + new object[] + { + new PdfPoint(67.92396367960997, 22.903155180355462), + new object[] + { + 2.5948429360078844, + 5, + new PdfPoint(65.40181734760978, 22.29324720161768), + } + }, + new object[] + { + new PdfPoint(38.49112754016583, 70.52567748005846), + new object[] + { + 8.79696604588175, + 84, + new PdfPoint(42.195134616764996, 62.54652068319705), + } + }, + new object[] + { + new PdfPoint(59.65725942551804, 65.37065649962103), + new object[] + { + 1.120406688708154, + 23, + new PdfPoint(59.31519405414486, 64.30374393065894), + } + }, + new object[] + { + new PdfPoint(45.15904139251526, 74.24820871457037), + new object[] + { + 9.844711972778917, + 71, + new PdfPoint(52.97863363490906, 68.26721122337617), + } + } + }; #endregion [Theory] @@ -2156,5 +3265,18 @@ { Assert.Equal(expected, Distances.MinimumEditDistance(strings[0], strings[1])); } + + [Theory] + [MemberData(nameof(NNExpectedData))] + public void FindIndexNearest(PdfPoint point, object[] expected) + { + var expectedDistance = (double)expected[0]; + var expectedIndex = (int)expected[1]; + + var nn = Distances.FindIndexNearest(point, NNData, p => p, p => p, Distances.Euclidean, out double distance); + + Assert.Equal(expectedIndex, nn); + Assert.Equal(expectedDistance, distance, PreciseDoubleComparer); + } } }