static void kRing_equals_kRingInternal_assertions()

in src/apps/testapps/testKRing.c [30:73]


static void kRing_equals_kRingInternal_assertions(H3Index h3) {
    for (int k = 0; k < 3; k++) {
        int kSz = H3_EXPORT(maxKringSize)(k);

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

        H3Index *internalNeighbors = calloc(kSz, sizeof(H3Index));
        int *internalDistances = calloc(kSz, sizeof(int));
        _kRingInternal(h3, k, internalNeighbors, internalDistances, kSz, 0);

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

                for (int 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);
    }
}