유선 링크 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.
"""유선 링크의 수치 검증.
문서: 32.유선 링크 (STS-n 규칙, 카드 C3, 광케이블과 임계각)
주장 1: STS-n의 속도는 STS-1(51.840 Mbps)의 n배다. 카드 C3의 STS-3 155.250 Mbps는 이 규칙과 맞지 않는다(155.520이어야 한다).
주장 2: 굴절률 = 진공에서의 속도 / 매체에서의 속도. 광케이블 2.0e8 m/s -> 1.5.
주장 3: 코어의 굴절률이 클래딩보다 크면 임계각 arcsin(n_clad / n_core)보다 비스듬히 닿은 빛은 모두 되돌아온다(전반사).
"""
import math
from fractions import Fraction as F
TABLE = { # 카드 C3의 표 (STS-3만 틀린 값), Mbps
1: F("51.840"), 3: F("155.250"), 12: F("622.080"), 24: F("1244.160"), 48: F("2488.320"),
}
def main():
base = TABLE[1]
for n, v in TABLE.items():
if n == 3:
assert v != n * base
assert n * base == F("155.520")
else:
assert v == n * base, (n, v)
print("[OK] STS-1/12/24/48은 51.84 x n과 일치, STS-3만 155.250 != 155.520")
# 굴절률
assert F(300_000_000, 200_000_000) == F(3, 2)
assert round(300_000_000 / 230_000_000, 2) == 1.30
print("[OK] 굴절률: 광케이블 1.5, 구리 케이블 속도 기준 약 1.30")
# 전반사: 예시 코어 1.50, 클래딩 1.48
theta_c = math.degrees(math.asin(1.48 / 1.50))
assert 80.5 < theta_c < 80.7
# 코어가 클래딩보다 작으면 임계각이 없다 (asin 인자 > 1)
assert 1.50 / 1.48 > 1
print(f"[OK] 임계각 {theta_c:.1f}도 (코어 1.50, 클래딩 1.48)")
# 100 m UTP의 전파 지연 (케이블 2.3e8 m/s)
assert round(100 / 230_000_000 * 1e6, 2) == 0.43
print("ALL CHECKS PASSED")
if __name__ == "__main__":
main()