static void gridDisk_equals_gridDiskDistancesSafe_assertions()

in src/apps/testapps/testGridDisk.c [30:76]


static void gridDisk_equals_gridDiskDistancesSafe_assertions(H3Index h3) {
    for (int k = 0; k < 3; k++) {
        int64_t kSz;
        t_assertSuccess(H3_EXPORT(maxGridDiskSize)(k, &kSz));

        H3Index *neighbors = calloc(kSz, sizeof(H3Index));
        int *distances = calloc(kSz, sizeof(int));
        t_assertSuccess(
            H3_EXPORT(gridDiskDistances)(h3, k, neighbors, distances));

        H3Index *internalNeighbors = calloc(kSz, sizeof(H3Index));
        int *internalDistances = calloc(kSz, sizeof(int));
        t_assertSuccess(H3_EXPORT(gridDiskDistancesSafe)(
            h3, k, internalNeighbors, internalDistances));

        int found = 0;
        int internalFound = 0;
        for (int64_t iNeighbor = 0; iNeighbor < kSz; iNeighbor++) {
            if (neighbors[iNeighbor] != 0) {
                found++;

                for (int64_t iInternal = 0; iInternal < kSz; iInternal++) {
                    if (internalNeighbors[iInternal] == neighbors[iNeighbor]) {
                        internalFound++;

                        t_assert(distances[iNeighbor] ==
                                     internalDistances[iInternal],
                                 "External and internal agree on "
                                 "distance");

                        break;
                    }
                }

                t_assert(found == internalFound,
                         "External and internal implementations "
                         "produce same output");
            }
        }

        free(internalDistances);
        free(internalNeighbors);

        free(distances);
        free(neighbors);
    }
}