private static void h3Distance_kRing_assertions(H3Index h3) { int r = H3Index.H3_GET_RESOLUTION(h3); Assert.True(r <= 5, "resolution supported by test function (kRing)"); int maxK = MAX_DISTANCES[r]; int sz = Algos.maxKringSize(maxK); var neighbors = new H3Index[sz].ToList(); var distances = new int[sz].ToList(); Algos.kRingDistances(h3, maxK, ref neighbors, ref distances); for (int i = 0; i < sz; i++) { if (neighbors[i] == 0) { continue; } int calculatedDistance = LocalIJ.h3Distance(h3, neighbors[i]); // Don't consider indexes where h3Distance reports failure to // generate Assert.True(calculatedDistance == distances[i] || calculatedDistance == -1, "kRingDistances matches h3Distance"); } }
public void testIndexDistance() { H3Index bc = 0; H3Index.setH3Index(ref bc, 1, 17, (Direction)0); H3Index p = 0; H3Index.setH3Index(ref p, 1, 14, (Direction)0); H3Index p2 = 0; H3Index.setH3Index(ref p2, 1, 14, (Direction)2); H3Index p3 = 0; H3Index.setH3Index(ref p3, 1, 14, (Direction)3); H3Index p4 = 0; H3Index.setH3Index(ref p4, 1, 14, (Direction)4); H3Index p5 = 0; H3Index.setH3Index(ref p5, 1, 14, (Direction)5); H3Index p6 = 0; H3Index.setH3Index(ref p6, 1, 14, (Direction)6); Assert.True(LocalIJ.h3Distance(bc, p) == 3, "distance onto pentagon"); Assert.True(LocalIJ.h3Distance(bc, p2) == 2, "distance onto p2"); Assert.True(LocalIJ.h3Distance(bc, p3) == 3, "distance onto p3"); // TODO works correctly but is rejected due to possible pentagon // distortion. // t_assert(H3_EXPORT(h3Distance)(bc, p4) == 3, "distance onto p4"); // t_assert(H3_EXPORT(h3Distance)(bc, p5) == 4, "distance onto p5"); Assert.True(LocalIJ.h3Distance(bc, p6) == 2, "distance onto p6"); }
public void h3DistanceBaseCells() { Assert.True(LocalIJ.h3Distance(bc1, pent1) == 1, "distance to neighbor is 1 (15, 4)"); Assert.True(LocalIJ.h3Distance(bc1, bc2) == 1, "distance to neighbor is 1 (15, 8)"); Assert.True(LocalIJ.h3Distance(bc1, bc3) == 1, "distance to neighbor is 1 (15, 31)"); Assert.True(LocalIJ.h3Distance(pent1, bc3) == -1, "distance to neighbor is invalid"); }
public void testIndexDistance2() { H3Index origin = 0x820c4ffffffffffL; // Destination is on the other side of the pentagon H3Index destination = 0x821ce7fffffffffL; // TODO doesn't work because of pentagon distortion. Both should be 5. Assert.True(LocalIJ.h3Distance(destination, origin) == -1, "distance in res 2 across pentagon"); Assert.True(LocalIJ.h3Distance(origin, destination) == -1, "distance in res 2 across pentagon (reversed)"); }
public static HexRangeResult experimentalLocalIjToH3(Code.H3Index origin, Code.LocalIJ.CoordIJ ij) { Code.H3Index h3 = new Code.H3Index(0); var result = LocalIJ.experimentalLocalIjToH3(origin, ij, ref h3); return(new HexRangeResult { Result = result, Indexes = new H3Index[] { new H3Index { Value = h3.value } } }); }
public static ExperimentalIJ ExperimentalH3ToLocalIj(Code.H3Index origin, Code.H3Index h3) { LocalIJ.CoordIJ ij = new LocalIJ.CoordIJ(); int result = LocalIJ.experimentalH3ToLocalIj(origin, h3, ij); return(new ExperimentalIJ { Result = result, IJ = new CoordIJ { I = ij.i, J = ij.j } }); }
public void h3DistanceEdge() { H3Index origin = 0x832830fffffffffL; H3Index dest = 0x832834fffffffffL; H3Index edge = H3UniEdge.getH3UnidirectionalEdge(origin, dest); Assert.True(0 != edge, "test edge is valid"); Assert.True(LocalIJ.h3Distance(edge, origin) == 0, "edge has zero distance to origin"); Assert.True(LocalIJ.h3Distance(origin, edge) == 0, "origin has zero distance to edge"); Assert.True(LocalIJ.h3Distance(edge, dest) == 1, "edge has distance to destination"); Assert.True(LocalIJ.h3Distance(edge, dest) == 1, "destination has distance to edge"); }
public static int H3Distance(Code.H3Index origin, Code.H3Index h3) { return(LocalIJ.h3Distance(origin, h3)); }
public void h3DistanceResolutionMismatch() { Assert.True( LocalIJ.h3Distance(0x832830fffffffffL, 0x822837fffffffffL) == -1, "cannot compare at different resolutions"); }
private static void h3Distance_identity_assertions(H3Index h3) { Assert.True(LocalIJ.h3Distance(h3, h3) == 0, "distance to self is 0"); }