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