41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import unittest
|
|
from trapping_rain_water import trap, trap_prefix
|
|
|
|
class TestTrap(unittest.TestCase):
|
|
def test_empty(self):
|
|
self.assertEqual(trap([]), 0)
|
|
self.assertEqual(trap_prefix([]), 0)
|
|
|
|
def test_single(self):
|
|
self.assertEqual(trap([5]), 0)
|
|
|
|
def test_flat(self):
|
|
self.assertEqual(trap([2, 2, 2, 2]), 0)
|
|
|
|
def test_classic(self):
|
|
self.assertEqual(trap([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]), 6)
|
|
|
|
def test_ascending(self):
|
|
self.assertEqual(trap([1, 2, 3, 4]), 0)
|
|
|
|
def test_descending(self):
|
|
self.assertEqual(trap([4, 3, 2, 1]), 0)
|
|
|
|
def test_two_peaks(self):
|
|
self.assertEqual(trap([3, 0, 2, 0, 4]), 7)
|
|
|
|
def test_agreement_random(self):
|
|
import random
|
|
rng = random.Random(42)
|
|
for _ in range(2000):
|
|
n = rng.randint(0, 40)
|
|
hs = [rng.randint(0, 9) for _ in range(n)]
|
|
self.assertEqual(trap(hs), trap_prefix(hs))
|
|
|
|
def test_large(self):
|
|
hs = [10**6] + [0] * 100000 + [10**6]
|
|
self.assertEqual(trap(hs), 10**6 * 100000)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|