1*2abb3134SXin Li#!/usr/bin/python -S 2*2abb3134SXin Li# 3*2abb3134SXin Li# Copyright 2014 Google Inc. All rights reserved. 4*2abb3134SXin Li# 5*2abb3134SXin Li# Licensed under the Apache License, Version 2.0 (the "License"); 6*2abb3134SXin Li# you may not use this file except in compliance with the License. 7*2abb3134SXin Li# You may obtain a copy of the License at 8*2abb3134SXin Li# 9*2abb3134SXin Li# http://www.apache.org/licenses/LICENSE-2.0 10*2abb3134SXin Li# 11*2abb3134SXin Li# Unless required by applicable law or agreed to in writing, software 12*2abb3134SXin Li# distributed under the License is distributed on an "AS IS" BASIS, 13*2abb3134SXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*2abb3134SXin Li# See the License for the specific language governing permissions and 15*2abb3134SXin Li# limitations under the License. 16*2abb3134SXin Li 17*2abb3134SXin Li""" 18*2abb3134SXin Lifastrand_test.py: Tests for _fastrand extension module. 19*2abb3134SXin Li""" 20*2abb3134SXin Liimport unittest 21*2abb3134SXin Li 22*2abb3134SXin Liimport _fastrand # module under test 23*2abb3134SXin Li 24*2abb3134SXin Li 25*2abb3134SXin LiBIT_WIDTHS = [8, 16, 32, 64] 26*2abb3134SXin Li 27*2abb3134SXin Li 28*2abb3134SXin Liclass FastRandTest(unittest.TestCase): 29*2abb3134SXin Li 30*2abb3134SXin Li def testRandbits64(self): 31*2abb3134SXin Li for n in BIT_WIDTHS: 32*2abb3134SXin Li #print '== %d' % n 33*2abb3134SXin Li for p1 in [0.1, 0.5, 0.9]: 34*2abb3134SXin Li #print '-- %f' % p1 35*2abb3134SXin Li for i in xrange(5): 36*2abb3134SXin Li r = _fastrand.randbits(p1, n) 37*2abb3134SXin Li # Rough sanity check 38*2abb3134SXin Li self.assertLess(r, 2 ** n) 39*2abb3134SXin Li 40*2abb3134SXin Li # Visual check 41*2abb3134SXin Li #b = bin(r) 42*2abb3134SXin Li #print b 43*2abb3134SXin Li #print b.count('1') 44*2abb3134SXin Li 45*2abb3134SXin Li 46*2abb3134SXin Li def testRandbits64_EdgeCases(self): 47*2abb3134SXin Li for n in BIT_WIDTHS: 48*2abb3134SXin Li r = _fastrand.randbits(0.0, n) 49*2abb3134SXin Li self.assertEqual(0, r) 50*2abb3134SXin Li 51*2abb3134SXin Li for n in BIT_WIDTHS: 52*2abb3134SXin Li r = _fastrand.randbits(1.0, n) 53*2abb3134SXin Li self.assertEqual(2 ** n - 1, r) 54*2abb3134SXin Li 55*2abb3134SXin Li def testRandbitsError(self): 56*2abb3134SXin Li r = _fastrand.randbits(-1, 64) 57*2abb3134SXin Li # TODO: Should probably raise exceptions 58*2abb3134SXin Li self.assertEqual(None, r) 59*2abb3134SXin Li 60*2abb3134SXin Li r = _fastrand.randbits(0.0, 65) 61*2abb3134SXin Li self.assertEqual(None, r) 62*2abb3134SXin Li 63*2abb3134SXin Li 64*2abb3134SXin Liif __name__ == '__main__': 65*2abb3134SXin Li unittest.main() 66