실행 시간 예측 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.

"""실행 시간 예측: 단순 평균과 지수 평균 (Stallings 식 9.1~9.3)."""
from fractions import Fraction as F


def simple(T, S1=0):
    S, out = F(S1), []
    for n, t in enumerate(T, 1):
        S = F(t, n) + F(n - 1, n) * S       # S_{n+1} = T_n/n + (n-1)/n * S_n
        out.append(S)
    return out


def expo(T, alpha, S1):
    S, out = F(S1), [F(S1)]
    for t in T:
        S = alpha * t + (1 - alpha) * S     # S_{n+1} = a T_n + (1-a) S_n
        out.append(S)
    return out


if __name__ == "__main__":
    T = [6, 4, 6, 4, 13, 13, 13]
    e = expo(T, F(1, 2), 10)
    print([float(x) for x in e])
    assert e == [10, 8, 6, 6, 5, 9, 11, 12]
    # 단순 평균은 지금까지의 산술 평균과 같다
    s = simple(T)
    assert all(s[k] == F(sum(T[:k + 1]), k + 1) for k in range(len(T)))
    # 가중치: alpha = 0.8이면 T_n, T_{n-1}, T_{n-2}의 가중치 0.8, 0.16, 0.032
    a = F(4, 5)
    assert [a * (1 - a) ** i for i in range(3)] == [F(4, 5), F(4, 25), F(4, 125)]
    # 카드 C2: alpha 0.5, S1 = 10, T = 2, 2, 2 -> 6, 4, 3
    assert expo([2, 2, 2], F(1, 2), 10)[1:] == [6, 4, 3]
    print("ALL CHECKS PASSED")