|
|
@@ -0,0 +1,149 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+"""
|
|
|
+测试order_book有效性检查和清空功能
|
|
|
+"""
|
|
|
+
|
|
|
+import sys
|
|
|
+import os
|
|
|
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
+
|
|
|
+from main import OrderBook
|
|
|
+from decimal import Decimal
|
|
|
+
|
|
|
+def test_order_book_validity():
|
|
|
+ """测试order_book有效性检查"""
|
|
|
+ print("=" * 60)
|
|
|
+ print("测试1: OrderBook有效性检查")
|
|
|
+ print("=" * 60)
|
|
|
+
|
|
|
+ # 创建一个OrderBook实例
|
|
|
+ ob = OrderBook(market_index=1)
|
|
|
+
|
|
|
+ # 测试1.1: 空的order_book应该无效
|
|
|
+ print("\n测试1.1: 空的order_book")
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert not is_valid, "空的order_book应该无效"
|
|
|
+ print(" ✓ 通过:空order_book被正确识别为无效")
|
|
|
+
|
|
|
+ # 测试1.2: 只有买单的order_book应该无效
|
|
|
+ print("\n测试1.2: 只有买单的order_book")
|
|
|
+ ob.bids[Decimal('100')] = Decimal('10')
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert not is_valid, "只有买单的order_book应该无效"
|
|
|
+ print(" ✓ 通过:只有买单的order_book被正确识别为无效")
|
|
|
+
|
|
|
+ # 测试1.3: 只有卖单的order_book应该无效
|
|
|
+ print("\n测试1.3: 只有卖单的order_book")
|
|
|
+ ob.bids.clear()
|
|
|
+ ob.asks[Decimal('101')] = Decimal('10')
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert not is_valid, "只有卖单的order_book应该无效"
|
|
|
+ print(" ✓ 通过:只有卖单的order_book被正确识别为无效")
|
|
|
+
|
|
|
+ # 测试1.4: 有买卖单但买价>=卖价的order_book应该无效
|
|
|
+ print("\n测试1.4: 买价>=卖价的order_book")
|
|
|
+ ob.bids[Decimal('101')] = Decimal('10')
|
|
|
+ ob.asks[Decimal('101')] = Decimal('10')
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert not is_valid, "买价>=卖价的order_book应该无效"
|
|
|
+ print(" ✓ 通过:买价>=卖价的order_book被正确识别为无效")
|
|
|
+
|
|
|
+ # 测试1.5: 正常的order_book应该有效
|
|
|
+ print("\n测试1.5: 正常的order_book(买价<卖价)")
|
|
|
+ ob.bids.clear()
|
|
|
+ ob.asks.clear()
|
|
|
+ ob.bids[Decimal('100')] = Decimal('10')
|
|
|
+ ob.asks[Decimal('101')] = Decimal('10')
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert is_valid, "正常的order_book应该有效"
|
|
|
+ print(" ✓ 通过:正常的order_book被正确识别为有效")
|
|
|
+
|
|
|
+ # 测试1.6: 多个档位的order_book应该有效
|
|
|
+ print("\n测试1.6: 多个档位的order_book")
|
|
|
+ ob.bids[Decimal('99')] = Decimal('20')
|
|
|
+ ob.bids[Decimal('98')] = Decimal('30')
|
|
|
+ ob.asks[Decimal('102')] = Decimal('20')
|
|
|
+ ob.asks[Decimal('103')] = Decimal('30')
|
|
|
+ is_valid = ob.is_valid()
|
|
|
+ print(f" is_valid() = {is_valid}")
|
|
|
+ assert is_valid, "多个档位的order_book应该有效"
|
|
|
+ print(" ✓ 通过:多个档位的order_book被正确识别为有效")
|
|
|
+
|
|
|
+ print("\n" + "=" * 60)
|
|
|
+ print("所有有效性检查测试通过!✓")
|
|
|
+ print("=" * 60)
|
|
|
+
|
|
|
+
|
|
|
+def test_order_book_update():
|
|
|
+ """测试order_book更新功能"""
|
|
|
+ print("\n" + "=" * 60)
|
|
|
+ print("测试2: OrderBook更新功能")
|
|
|
+ print("=" * 60)
|
|
|
+
|
|
|
+ ob = OrderBook(market_index=1)
|
|
|
+
|
|
|
+ # 测试2.1: 初始更新
|
|
|
+ print("\n测试2.1: 初始更新")
|
|
|
+ order_book_data = {
|
|
|
+ 'bids': [
|
|
|
+ {'price': '100', 'size': '10'},
|
|
|
+ {'price': '99', 'size': '20'}
|
|
|
+ ],
|
|
|
+ 'asks': [
|
|
|
+ {'price': '101', 'size': '10'},
|
|
|
+ {'price': '102', 'size': '20'}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ob.update(order_book_data, offset=1)
|
|
|
+ print(f" 更新后的统计信息: {ob.get_stats()}")
|
|
|
+ assert ob.is_valid(), "更新后的order_book应该有效"
|
|
|
+ print(" ✓ 通过:初始更新成功")
|
|
|
+
|
|
|
+ # 测试2.2: 增量更新(删除档位)
|
|
|
+ print("\n测试2.2: 增量更新(删除档位)")
|
|
|
+ order_book_data = {
|
|
|
+ 'bids': [
|
|
|
+ {'price': '99', 'size': '0'} # 删除99的买单
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ob.update(order_book_data, offset=2)
|
|
|
+ print(f" 更新后的统计信息: {ob.get_stats()}")
|
|
|
+ assert ob.is_valid(), "删除档位后的order_book应该有效"
|
|
|
+ assert Decimal('99') not in ob.bids, "99的买单应该被删除"
|
|
|
+ print(" ✓ 通过:增量更新成功")
|
|
|
+
|
|
|
+ # 测试2.3: 清空order_book
|
|
|
+ print("\n测试2.3: 清空order_book")
|
|
|
+ ob.bids.clear()
|
|
|
+ ob.asks.clear()
|
|
|
+ print(f" 清空后的统计信息: {ob.get_stats()}")
|
|
|
+ assert not ob.is_valid(), "清空后的order_book应该无效"
|
|
|
+ print(" ✓ 通过:清空成功")
|
|
|
+
|
|
|
+ print("\n" + "=" * 60)
|
|
|
+ print("所有更新功能测试通过!✓")
|
|
|
+ print("=" * 60)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ try:
|
|
|
+ test_order_book_validity()
|
|
|
+ test_order_book_update()
|
|
|
+ print("\n" + "=" * 60)
|
|
|
+ print("所有测试通过!✓✓✓")
|
|
|
+ print("=" * 60)
|
|
|
+ except AssertionError as e:
|
|
|
+ print(f"\n✗ 测试失败: {e}")
|
|
|
+ sys.exit(1)
|
|
|
+ except Exception as e:
|
|
|
+ print(f"\n✗ 测试出错: {e}")
|
|
|
+ import traceback
|
|
|
+ traceback.print_exc()
|
|
|
+ sys.exit(1)
|
|
|
+
|