public void testConversion() { // Test special cases: poles, "date line" assertDoubleNear( new S2LatLng(S2LatLng.FromDegrees(90.0, 65.0).ToPoint()).Lat.Degrees, 90.0); assertEquals( new S2LatLng(S2LatLng.FromRadians(-S2.PiOver2, 1).ToPoint()).Lat.Radians, -S2.PiOver2); assertDoubleNear( Math.Abs(new S2LatLng(S2LatLng.FromDegrees(12.2, 180.0).ToPoint()).Lng.Degrees), 180.0); assertEquals( Math.Abs(new S2LatLng(S2LatLng.FromRadians(0.1, -S2.Pi).ToPoint()).Lng.Radians), S2.Pi); // Test a bunch of random points. for (var i = 0; i < 100000; ++i) { var p = randomPoint(); assertTrue(S2.ApproxEquals(p, new S2LatLng(p).ToPoint())); } // Test generation from E5 var test = S2LatLng.FromE5(123456, 98765); assertDoubleNear(test.Lat.Degrees, 1.23456); assertDoubleNear(test.Lng.Degrees, 0.98765); }
public void Test_E5() { for (var i = 0; i < kIters; i++) { var ll = S2LatLng.FromPoint(S2Testing.RandomPoint()); var ll_e5 = S2LatLng.FromE5(ll.Lat().E5(), ll.Lng().E5()); ExpectMaxDigits(ll_e5, 5); } }
public void Test_IntLatLngSnapFunction_SnapPoint() { for (int iter = 0; iter < 1000; ++iter) { // Test that IntLatLngSnapFunction does not modify points that were // generated using the S2LatLng.From{E5,E6,E7} methods. This ensures // that both functions are using bitwise-compatible conversion methods. S2Point p = S2Testing.RandomPoint(); S2LatLng ll = new(p); S2Point p5 = S2LatLng.FromE5(ll.Lat().E5(), ll.Lng().E5()).ToPoint(); Assert.Equal(p5, new IntLatLngSnapFunction(5).SnapPoint(p5)); S2Point p6 = S2LatLng.FromE6(ll.Lat().E6(), ll.Lng().E6()).ToPoint(); Assert.Equal(p6, new IntLatLngSnapFunction(6).SnapPoint(p6)); S2Point p7 = S2LatLng.FromE7(ll.Lat().E7(), ll.Lng().E7()).ToPoint(); Assert.Equal(p7, new IntLatLngSnapFunction(7).SnapPoint(p7)); // Make sure that we're not snapping using some lower exponent. S2Point p7not6 = S2LatLng.FromE7(10 * ll.Lat().E6() + 1, 10 * ll.Lng().E6() + 1).ToPoint(); Assert.NotEqual(p7not6, new IntLatLngSnapFunction(6).SnapPoint(p7not6)); } }