private void checkAllCrossings( List<S2Edge> allEdges, int minCrossings, int maxChecksCrossingsRatio) { var index = new EdgeVectorIndex(allEdges); index.ComputeIndex(); var it = new S2EdgeIndex.DataEdgeIterator(index); double totalCrossings = 0; double totalIndexChecks = 0; for (var @in = 0; @in < allEdges.Count; ++@in) { var e = allEdges[@in]; var candidateSet = new HashSet<int>(); var sb = new StringBuilder(); it.GetCandidates(e.Start, e.End); foreach (var i in it)// it.GetCandidates(e.Start, e.End); it.HasNext; it.Next()) { candidateSet.Add(i); sb.Append(i).Append("/"); ++totalIndexChecks; } for (var i = 0; i < allEdges.Count; ++i) { var crossing = S2EdgeUtil.RobustCrossing( e.Start, e.End, allEdges[i].Start, allEdges[i].End); if (crossing >= 0) { var sbError = new StringBuilder(); sbError .Append("\n==CHECK_ERROR===================================\n") .Append("CandidateSet: ") .Append(sb) .Append("\nin=") .Append(@in) .Append(" i=") .Append(i) .Append(" robustCrossing=") .Append(crossing) .Append("\nfrom:\n") .Append(e) .Append("\nto:\n") .Append(allEdges[i]) .Append("\n=================================================="); assertTrue(sbError.ToString(), candidateSet.Contains(i)); ++totalCrossings; } } } Console.WriteLine( "Pairs/num crossings/check crossing ratio: " + (allEdges.Count*allEdges.Count) + "/" + totalCrossings + "/" + (totalIndexChecks/totalCrossings)); assertTrue(minCrossings <= totalCrossings); assertTrue(totalCrossings*maxChecksCrossingsRatio >= totalIndexChecks); }
private void checkAllCrossings( List <S2Edge> allEdges, int minCrossings, int maxChecksCrossingsRatio) { var index = new EdgeVectorIndex(allEdges); index.ComputeIndex(); var it = new S2EdgeIndex.DataEdgeIterator(index); double totalCrossings = 0; double totalIndexChecks = 0; for (var @in = 0; @in < allEdges.Count; ++@in) { var e = allEdges[@in]; var candidateSet = new HashSet <int>(); var sb = new StringBuilder(); it.GetCandidates(e.Start, e.End); foreach (var i in it)// it.GetCandidates(e.Start, e.End); it.HasNext; it.Next()) { candidateSet.Add(i); sb.Append(i).Append("/"); ++totalIndexChecks; } for (var i = 0; i < allEdges.Count; ++i) { var crossing = S2EdgeUtil.RobustCrossing( e.Start, e.End, allEdges[i].Start, allEdges[i].End); if (crossing >= 0) { var sbError = new StringBuilder(); sbError .Append("\n==CHECK_ERROR===================================\n") .Append("CandidateSet: ") .Append(sb) .Append("\nin=") .Append(@in) .Append(" i=") .Append(i) .Append(" robustCrossing=") .Append(crossing) .Append("\nfrom:\n") .Append(e) .Append("\nto:\n") .Append(allEdges[i]) .Append("\n=================================================="); assertTrue(sbError.ToString(), candidateSet.Contains(i)); ++totalCrossings; } } } Console.WriteLine( "Pairs/num crossings/check crossing ratio: " + (allEdges.Count * allEdges.Count) + "/" + totalCrossings + "/" + (totalIndexChecks / totalCrossings)); assertTrue(minCrossings <= totalCrossings); assertTrue(totalCrossings * maxChecksCrossingsRatio >= totalIndexChecks); }