File size: 1,782 Bytes
ae5ecc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # backend/tests/test_cpp_bindings.py
"""
Unit test suite for C++ Pybind11 Low-Latency Quant Engine bindings.
Verifies microsecond Order Flow Imbalance (OFI), MicroPrice, VWAP, and EMA.
"""
import sys
import os
import pytest
import numpy as np
# Add C++ build directory to sys.path
cpp_build_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../cpp_engine/build"))
if cpp_build_dir not in sys.path:
sys.path.insert(0, cpp_build_dir)
def test_cpp_quant_engine_import_and_math():
try:
import cpp_quant_engine as cqe
# Test MicroPrice static calculation
p_micro = cqe.FastAlphaEngine.calculate_micro_price(100.0, 100.2, 500.0, 300.0)
assert p_micro == pytest.approx(100.125, abs=0.001)
# Test Order Book Imbalance static calculation
obi = cqe.FastAlphaEngine.calculate_obi(600.0, 400.0)
assert obi == pytest.approx(0.20, abs=0.001)
# Test Fast EMA vector calculation
prices = [100.0, 102.0, 104.0, 103.0, 105.0]
ema_vals = cqe.FastAlphaEngine.fast_ema(prices, 9)
assert len(ema_vals) == len(prices)
assert ema_vals[-1] > prices[0]
# Test Real-Time Tick Processing Engine
engine = cqe.FastAlphaEngine(20)
tick = cqe.MarketTick(1.0, 100.0, 100.2, 500.0, 300.0, 100.1, 1000.0)
payload = engine.process_tick(tick)
assert payload.micro_price == pytest.approx(100.125, abs=0.001)
assert payload.order_book_imbalance == pytest.approx(0.25, abs=0.001)
assert payload.vwap == pytest.approx(100.1, abs=0.001)
print("✅ C++ Pybind11 Engine Integration PASSED!")
except ImportError:
pytest.skip("cpp_quant_engine dynamic library not yet compiled in cpp_engine/build")
|