//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// Not a portable test

// <__hash_table>

// size_t __next_prime(size_t n);

// If n == 0, return 0, else return the lowest prime greater than or equal to n

#include <__hash_table>
#include <cassert>

bool
is_prime(size_t n)
{
    switch (n)
    {
    case 0:
    case 1:
        return false;
    }
    for (size_t i = 2; i*i <= n; ++i)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

int main()
{
    assert(std::__next_prime(0) == 0);
    for (std::size_t n = 1; n <= 100000; ++n)
    {
        std::size_t p = std::__next_prime(n);
        assert(p >= n);
        for (std::size_t i = n; i < p; ++i)
            assert(!is_prime(i));
        assert(is_prime(p));
    }
}
