xref: /netbsd-src/tests/lib/libc/stdlib/t_random.c (revision 53263fa593adb212abc5323f344ba7e025cc3337)
1*53263fa5Sjruoho /* $NetBSD: t_random.c,v 1.1 2012/03/28 10:33:57 jruoho Exp $ */
2*53263fa5Sjruoho 
3*53263fa5Sjruoho /*-
4*53263fa5Sjruoho  * Copyright (c) 2012 The NetBSD Foundation, Inc.
5*53263fa5Sjruoho  * All rights reserved.
6*53263fa5Sjruoho  *
7*53263fa5Sjruoho  * This code is derived from software contributed to The NetBSD Foundation
8*53263fa5Sjruoho  * by Jukka Ruohonen.
9*53263fa5Sjruoho  *
10*53263fa5Sjruoho  * Redistribution and use in source and binary forms, with or without
11*53263fa5Sjruoho  * modification, are permitted provided that the following conditions
12*53263fa5Sjruoho  * are met:
13*53263fa5Sjruoho  * 1. Redistributions of source code must retain the above copyright
14*53263fa5Sjruoho  *    notice, this list of conditions and the following disclaimer.
15*53263fa5Sjruoho  * 2. Redistributions in binary form must reproduce the above copyright
16*53263fa5Sjruoho  *    notice, this list of conditions and the following disclaimer in the
17*53263fa5Sjruoho  *    documentation and/or other materials provided with the distribution.
18*53263fa5Sjruoho  *
19*53263fa5Sjruoho  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20*53263fa5Sjruoho  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21*53263fa5Sjruoho  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22*53263fa5Sjruoho  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23*53263fa5Sjruoho  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*53263fa5Sjruoho  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*53263fa5Sjruoho  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*53263fa5Sjruoho  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*53263fa5Sjruoho  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*53263fa5Sjruoho  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*53263fa5Sjruoho  * POSSIBILITY OF SUCH DAMAGE.
30*53263fa5Sjruoho  */
31*53263fa5Sjruoho #include <sys/cdefs.h>
32*53263fa5Sjruoho __RCSID("$NetBSD: t_random.c,v 1.1 2012/03/28 10:33:57 jruoho Exp $");
33*53263fa5Sjruoho 
34*53263fa5Sjruoho #include <atf-c.h>
35*53263fa5Sjruoho #include <stdlib.h>
36*53263fa5Sjruoho 
37*53263fa5Sjruoho /*
38*53263fa5Sjruoho  * TODO: Add some general RNG tests (cf. the famous "diehard" tests?).
39*53263fa5Sjruoho  */
40*53263fa5Sjruoho 
41*53263fa5Sjruoho ATF_TC(random_zero);
42*53263fa5Sjruoho ATF_TC_HEAD(random_zero, tc)
43*53263fa5Sjruoho {
44*53263fa5Sjruoho 	atf_tc_set_md_var(tc, "descr",
45*53263fa5Sjruoho 	    "Test that random(3) does not always return "
46*53263fa5Sjruoho 	    "zero when the seed is initialized to zero");
47*53263fa5Sjruoho }
48*53263fa5Sjruoho 
49*53263fa5Sjruoho ATF_TC_BODY(random_zero, tc)
50*53263fa5Sjruoho {
51*53263fa5Sjruoho 	const size_t n = 1000000;
52*53263fa5Sjruoho 	size_t i, j;
53*53263fa5Sjruoho 	long x;
54*53263fa5Sjruoho 
55*53263fa5Sjruoho 	srandom(0);
56*53263fa5Sjruoho 
57*53263fa5Sjruoho 	for (i = j = 0; i < n; i++) {
58*53263fa5Sjruoho 
59*53263fa5Sjruoho 		if ((x = random()) == 0)
60*53263fa5Sjruoho 			j++;
61*53263fa5Sjruoho 	}
62*53263fa5Sjruoho 
63*53263fa5Sjruoho 	ATF_REQUIRE(j != n);
64*53263fa5Sjruoho }
65*53263fa5Sjruoho 
66*53263fa5Sjruoho ATF_TP_ADD_TCS(tp)
67*53263fa5Sjruoho {
68*53263fa5Sjruoho 
69*53263fa5Sjruoho 	ATF_TP_ADD_TC(tp, random_zero);
70*53263fa5Sjruoho 
71*53263fa5Sjruoho 	return atf_no_error();
72*53263fa5Sjruoho }
73