Files
troupe-standup/wizard-work/beam/test_sliding_window_max.py
T

47 lines
1.1 KiB
Python

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
from sliding_window_max import sliding_window_max as f
def test_basic():
assert f([1,3,-1,-3,5,3,6,7], 3) == [3,3,5,5,6,7]
def test_k1():
assert f([5,4,3], 1) == [5,4,3]
def test_k_large():
assert f([1,2,3], 5) == [3]
def test_empty():
assert f([], 3) == []
assert f([1,2,3], 0) == []
def test_all_equal():
assert f([7,7,7,7], 2) == [7,7,7]
def test_negatives():
assert f([-1,-2,-3,-4], 2) == [-1,-2,-3]
def test_single():
assert f([42], 1) == [42]
assert f([42], 5) == [42]
# brute fuzz
import random
rng = random.Random(99)
for _ in range(3000):
n = rng.randint(0, 25)
nums = [rng.randint(-10, 10) for _ in range(n)]
k = rng.randint(0, n + 2) if n else rng.randint(0, 4)
got = f(nums, k)
if not nums or k <= 0:
exp = []
elif k == 1:
exp = list(nums)
elif k >= len(nums):
exp = [max(nums)]
else:
exp = [max(nums[i:i+k]) for i in range(len(nums)-k+1)]
assert got == exp, (nums, k, got, exp)
print("ALL TESTS PASSED")