#include <array>
#include <cstdint>
#include <iostream>
#include <limits>

extern "C" unsigned transform_four(unsigned);

int main() {
    static_assert(std::numeric_limits<unsigned>::digits == 32);
    const std::array<unsigned, 5> inputs{0U, 1U, 7U, 2147483648U, 4294967295U};
    for (const unsigned x : inputs) {
        const std::uint64_t wide{static_cast<std::uint64_t>(x) * 4U + 1U};
        const unsigned expected{static_cast<unsigned>(wide)};
        const unsigned actual{transform_four(x)};
        if (actual != expected) {
            std::cerr << "mismatch for " << x << ": " << actual
                      << " expected " << expected << '\n';
            return 1;
        }
        std::cout << x << " -> " << actual << '\n';
    }
}
