1#!/usr/bin/env python
2#  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3#
4#  Use of this source code is governed by a BSD-style license
5#  that can be found in the LICENSE file in the root of the source
6#  tree. An additional intellectual property rights grant can be found
7#  in the file PATENTS.  All contributing project authors may
8#  be found in the AUTHORS file in the root of the source tree.
9
10"""Run the tests with
11
12      python misc_test.py
13or
14      python3 misc_test.py
15"""
16
17from __future__ import division
18import random
19import unittest
20
21import misc
22
23
24class TestMisc(unittest.TestCase):
25  def testUnwrapMod3(self):
26    data = [0, 1, 2, 0, -1, -2, -3, -4]
27    unwrapped_3 = misc.Unwrap(data, 3)
28    self.assertEqual([0, 1, 2, 3, 2, 1, 0, -1], unwrapped_3)
29
30  def testUnwrapMod4(self):
31    data = [0, 1, 2, 0, -1, -2, -3, -4]
32    unwrapped_4 = misc.Unwrap(data, 4)
33    self.assertEqual([0, 1, 2, 0, -1, -2, -3, -4], unwrapped_4)
34
35  def testDataShouldNotChangeAfterUnwrap(self):
36    data = [0, 1, 2, 0, -1, -2, -3, -4]
37    _ = misc.Unwrap(data, 4)
38
39    self.assertEqual([0, 1, 2, 0, -1, -2, -3, -4], data)
40
41  def testRandomlyMultiplesOfModAdded(self):
42    # `unwrap` definition says only multiples of mod are added.
43    random_data = [random.randint(0, 9) for _ in range(100)]
44
45    for mod in range(1, 100):
46      random_data_unwrapped_mod = misc.Unwrap(random_data, mod)
47
48      for (old_a, a) in zip(random_data, random_data_unwrapped_mod):
49        self.assertEqual((old_a - a) % mod, 0)
50
51  def testRandomlyAgainstInequalityDefinition(self):
52    # Data has to satisfy -mod/2 <= difference < mod/2 for every
53    # difference between consecutive values after unwrap.
54    random_data = [random.randint(0, 9) for _ in range(100)]
55
56    for mod in range(1, 100):
57      random_data_unwrapped_mod = misc.Unwrap(random_data, mod)
58
59      for (a, b) in zip(random_data_unwrapped_mod,
60                        random_data_unwrapped_mod[1:]):
61        self.assertTrue(-mod / 2 <= b - a < mod / 2)
62
63  def testRandomlyDataShouldNotChangeAfterUnwrap(self):
64    random_data = [random.randint(0, 9) for _ in range(100)]
65    random_data_copy = random_data[:]
66    for mod in range(1, 100):
67      _ = misc.Unwrap(random_data, mod)
68
69      self.assertEqual(random_data, random_data_copy)
70
71if __name__ == "__main__":
72  unittest.main()
73