blob: 266d7f1f9d1ea3a9d479848239a035f6c03a4b79 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs5030eaf2014-12-11 22:05:18 +00009//
10// REQUIRES: long_tests
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000011
12// Not a portable test
13
14// <__hash_table>
15
16// size_t __next_prime(size_t n);
17
18// If n == 0, return 0, else return the lowest prime greater than or equal to n
19
20#include <__hash_table>
21#include <cassert>
22
23bool
24is_prime(size_t n)
25{
26 switch (n)
27 {
28 case 0:
29 case 1:
30 return false;
31 }
32 for (size_t i = 2; i*i <= n; ++i)
33 {
34 if (n % i == 0)
35 return false;
36 }
37 return true;
38}
39
40int main()
41{
42 assert(std::__next_prime(0) == 0);
43 for (std::size_t n = 1; n <= 100000; ++n)
44 {
45 std::size_t p = std::__next_prime(n);
46 assert(p >= n);
47 for (std::size_t i = n; i < p; ++i)
48 assert(!is_prime(i));
49 assert(is_prime(p));
50 }
51}