47 lines
1.1 KiB
Python
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")
|