xref: /aosp_15_r20/external/rappor/tests/fastrand_test.py (revision 2abb31345f6c95944768b5222a9a5ed3fc68cc00)
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