99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
"""Entropyk — Performance Benchmark Tests.
|
|
|
|
Tests that measure Python→Rust call overhead and verify performance.
|
|
These are not unit tests — they measure timing and should be run with
|
|
``pytest -s`` for visible output.
|
|
"""
|
|
|
|
import time
|
|
import pytest
|
|
import entropyk
|
|
|
|
|
|
class TestConstructorOverhead:
|
|
"""Benchmark component construction overhead."""
|
|
|
|
def test_1000_compressor_constructions(self):
|
|
"""Constructing 1000 Compressors should be very fast (< 100 ms)."""
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
entropyk.Compressor()
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"1000 Compressor constructions took {elapsed:.3f}s"
|
|
|
|
def test_1000_pressure_constructions(self):
|
|
"""Constructing 1000 Pressure objects should be very fast."""
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
entropyk.Pressure(bar=1.0)
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"1000 Pressure constructions took {elapsed:.3f}s"
|
|
|
|
def test_1000_temperature_constructions(self):
|
|
"""Constructing 1000 Temperature objects should be very fast."""
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
entropyk.Temperature(celsius=25.0)
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"1000 Temperature constructions took {elapsed:.3f}s"
|
|
|
|
|
|
class TestConversionOverhead:
|
|
"""Benchmark unit conversion overhead."""
|
|
|
|
def test_1000_pressure_conversions(self):
|
|
"""Unit conversions should add negligible overhead."""
|
|
p = entropyk.Pressure(bar=1.0)
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
_ = p.to_bar()
|
|
_ = p.to_pascals()
|
|
_ = p.to_kpa()
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"3000 pressure conversions took {elapsed:.3f}s"
|
|
|
|
def test_1000_temperature_conversions(self):
|
|
"""Temperature conversions should be fast."""
|
|
t = entropyk.Temperature(celsius=25.0)
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
_ = t.to_celsius()
|
|
_ = t.to_kelvin()
|
|
_ = t.to_fahrenheit()
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"3000 temperature conversions took {elapsed:.3f}s"
|
|
|
|
|
|
class TestArithmeticOverhead:
|
|
"""Benchmark arithmetic operation overhead."""
|
|
|
|
def test_1000_additions(self):
|
|
"""1000 pressure additions should be fast."""
|
|
p1 = entropyk.Pressure(pa=101325.0)
|
|
p2 = entropyk.Pressure(pa=50000.0)
|
|
start = time.perf_counter()
|
|
for _ in range(1000):
|
|
_ = p1 + p2
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 0.1, f"1000 additions took {elapsed:.3f}s"
|
|
|
|
|
|
class TestSystemBuildOverhead:
|
|
"""Benchmark system construction overhead."""
|
|
|
|
def test_100_system_builds(self):
|
|
"""Building 100 simple systems (4 components + 4 edges) should be fast."""
|
|
start = time.perf_counter()
|
|
for _ in range(100):
|
|
system = entropyk.System()
|
|
c = system.add_component(entropyk.Compressor())
|
|
d = system.add_component(entropyk.Condenser())
|
|
e = system.add_component(entropyk.ExpansionValve())
|
|
v = system.add_component(entropyk.Evaporator())
|
|
system.add_edge(c, d)
|
|
system.add_edge(d, e)
|
|
system.add_edge(e, v)
|
|
system.add_edge(v, c)
|
|
elapsed = time.perf_counter() - start
|
|
assert elapsed < 1.0, f"100 system builds took {elapsed:.3f}s"
|