public void Test_S2ClosestCellQuery_OptionsNotModified() { // Tests that FindClosestCell(), GetDistance(), and IsDistanceLess() do not // modify query.Options_, even though all of these methods have their own // specific options requirements. S2ClosestCellQuery.Options options = new(); options.MaxResults = (3); options.MaxDistance = (S1ChordAngle.FromDegrees(3)); options.MaxError = (S1ChordAngle.FromDegrees(0.001)); S2CellIndex index = new(); index.Add(new S2CellId(MakePointOrDie("1:1")), 1); index.Add(new S2CellId(MakePointOrDie("1:2")), 2); index.Add(new S2CellId(MakePointOrDie("1:3")), 3); index.Build(); S2ClosestCellQuery query = new(index, options); S2ClosestCellQuery.PointTarget target = new(MakePointOrDie("2:2")); Assert.Equal(2, query.FindClosestCell(target).Label); Assert2.Near(1.0, query.GetDistance(target).Degrees(), 1e-7); Assert.True(query.IsDistanceLess(target, S1ChordAngle.FromDegrees(1.5))); // Verify that none of the options above were modified. Assert.Equal(options.MaxResults, query.Options_.MaxResults); Assert.Equal(options.MaxDistance, query.Options_.MaxDistance); Assert.Equal(options.MaxError, query.Options_.MaxError); }
public void Test_S1ChordAngle_Arithmetic() { S1ChordAngle zero = S1ChordAngle.Zero; S1ChordAngle degree30 = S1ChordAngle.FromDegrees(30); //0.26794919243112264 S1ChordAngle degree60 = S1ChordAngle.FromDegrees(60); //0.99999999999999978 S1ChordAngle degree90 = S1ChordAngle.FromDegrees(90); //1.9999999999999996 //2.0000000000000004 S1ChordAngle degree120 = S1ChordAngle.FromDegrees(120); //2.9999999999999996 S1ChordAngle degree180 = S1ChordAngle.Straight; Assert.Equal(0, (zero + zero).Degrees()); Assert.Equal(0, (zero - zero).Degrees()); Assert.Equal(0, (degree60 - degree60).Degrees()); Assert.Equal(0, (degree180 - degree180).Degrees()); Assert.Equal(0, (zero - degree60).Degrees()); Assert.Equal(0, (degree30 - degree90).Degrees()); Assert2.DoubleEqual(60, (degree60 + zero).Degrees()); Assert2.DoubleEqual(60, (degree60 - zero).Degrees()); Assert2.DoubleEqual(60, (zero + degree60).Degrees()); Assert2.DoubleEqual(90, (degree30 + degree60).Degrees()); Assert2.DoubleEqual(90, (degree60 + degree30).Degrees()); Assert2.DoubleEqual(60, (degree90 - degree30).Degrees()); Assert2.DoubleEqual(30, (degree90 - degree60).Degrees(), 5); Assert.Equal(180, (degree180 + zero).Degrees()); Assert.Equal(180, (degree180 - zero).Degrees()); Assert.Equal(180, (degree90 + degree90).Degrees()); Assert.Equal(180, (degree120 + degree90).Degrees()); Assert.Equal(180, (degree120 + degree120).Degrees()); Assert.Equal(180, (degree30 + degree180).Degrees()); Assert.Equal(180, (degree180 + degree180).Degrees()); }
public void Test_S2ClosestEdgeQuery_OptionsNotModified() { // Tests that FindClosestEdge(), GetDistance(), and IsDistanceLess() do not // modify query.Options_, even though all of these methods have their own // specific options requirements. S2ClosestEdgeQuery.Options options = new(); options.MaxResults = (3); options.MaxDistance = (Distance.FromDegrees(3)); options.MaxError = (Distance.FromDegrees(0.001)); var index = MakeIndexOrDie("1:1 | 1:2 | 1:3 # #"); S2ClosestEdgeQuery query = new(index, options); S2ClosestEdgeQuery.PointTarget target = new(MakePointOrDie("2:2")); Assert.Equal(1, query.FindClosestEdge(target).EdgeId); Assert2.Near(1.0, query.GetDistance(target).Degrees(), S2.DoubleError); Assert.True(query.IsDistanceLess(target, Distance.FromDegrees(1.5))); // Verify that none of the options above were modified. Assert.Equal(options.MaxResults, query.Options_.MaxResults); Assert.Equal(options.MaxDistance, query.Options_.MaxDistance); Assert.Equal(options.MaxError, query.Options_.MaxError); }