work on new engine
This commit is contained in:
parent
44476da13f
commit
a1e5a21847
126 changed files with 3425 additions and 6695 deletions
143
apps/stock/engine/tests/basic_tests.rs
Normal file
143
apps/stock/engine/tests/basic_tests.rs
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
use engine::{Order, OrderType, Side, TimeInForce, Quote, Bar, Trade, MarketDataType};
|
||||
use chrono::Utc;
|
||||
|
||||
#[test]
|
||||
fn test_order_creation() {
|
||||
let order = Order {
|
||||
id: "test-order-1".to_string(),
|
||||
symbol: "AAPL".to_string(),
|
||||
side: Side::Buy,
|
||||
quantity: 100.0,
|
||||
order_type: OrderType::Market,
|
||||
time_in_force: TimeInForce::Day,
|
||||
};
|
||||
|
||||
assert_eq!(order.id, "test-order-1");
|
||||
assert_eq!(order.symbol, "AAPL");
|
||||
assert_eq!(order.side, Side::Buy);
|
||||
assert_eq!(order.quantity, 100.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_order_types() {
|
||||
let market = OrderType::Market;
|
||||
let limit = OrderType::Limit { price: 150.0 };
|
||||
let stop = OrderType::Stop { stop_price: 145.0 };
|
||||
let stop_limit = OrderType::StopLimit {
|
||||
stop_price: 145.0,
|
||||
limit_price: 144.5,
|
||||
};
|
||||
|
||||
match limit {
|
||||
OrderType::Limit { price } => assert_eq!(price, 150.0),
|
||||
_ => panic!("Expected limit order"),
|
||||
}
|
||||
|
||||
match stop {
|
||||
OrderType::Stop { stop_price } => assert_eq!(stop_price, 145.0),
|
||||
_ => panic!("Expected stop order"),
|
||||
}
|
||||
|
||||
match stop_limit {
|
||||
OrderType::StopLimit { stop_price, limit_price } => {
|
||||
assert_eq!(stop_price, 145.0);
|
||||
assert_eq!(limit_price, 144.5);
|
||||
}
|
||||
_ => panic!("Expected stop limit order"),
|
||||
}
|
||||
|
||||
assert!(matches!(market, OrderType::Market));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_quote_creation() {
|
||||
let quote = Quote {
|
||||
bid: 149.95,
|
||||
ask: 150.05,
|
||||
bid_size: 1000.0,
|
||||
ask_size: 800.0,
|
||||
};
|
||||
|
||||
assert_eq!(quote.bid, 149.95);
|
||||
assert_eq!(quote.ask, 150.05);
|
||||
assert_eq!(quote.bid_size, 1000.0);
|
||||
assert_eq!(quote.ask_size, 800.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bar_creation() {
|
||||
let bar = Bar {
|
||||
open: 150.0,
|
||||
high: 152.0,
|
||||
low: 149.0,
|
||||
close: 151.0,
|
||||
volume: 1_000_000.0,
|
||||
vwap: Some(150.5),
|
||||
};
|
||||
|
||||
assert_eq!(bar.open, 150.0);
|
||||
assert_eq!(bar.high, 152.0);
|
||||
assert_eq!(bar.low, 149.0);
|
||||
assert_eq!(bar.close, 151.0);
|
||||
assert_eq!(bar.volume, 1_000_000.0);
|
||||
assert_eq!(bar.vwap, Some(150.5));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_trade_creation() {
|
||||
let trade = Trade {
|
||||
price: 150.0,
|
||||
size: 500.0,
|
||||
side: Side::Buy,
|
||||
};
|
||||
|
||||
assert_eq!(trade.price, 150.0);
|
||||
assert_eq!(trade.size, 500.0);
|
||||
assert_eq!(trade.side, Side::Buy);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_market_data_type() {
|
||||
let quote = Quote {
|
||||
bid: 149.95,
|
||||
ask: 150.05,
|
||||
bid_size: 100.0,
|
||||
ask_size: 100.0,
|
||||
};
|
||||
|
||||
let quote_data = MarketDataType::Quote(quote.clone());
|
||||
|
||||
match quote_data {
|
||||
MarketDataType::Quote(q) => {
|
||||
assert_eq!(q.bid, quote.bid);
|
||||
assert_eq!(q.ask, quote.ask);
|
||||
}
|
||||
_ => panic!("Expected quote data"),
|
||||
}
|
||||
|
||||
let bar = Bar {
|
||||
open: 150.0,
|
||||
high: 152.0,
|
||||
low: 149.0,
|
||||
close: 151.0,
|
||||
volume: 10000.0,
|
||||
vwap: None,
|
||||
};
|
||||
|
||||
let bar_data = MarketDataType::Bar(bar.clone());
|
||||
|
||||
match bar_data {
|
||||
MarketDataType::Bar(b) => {
|
||||
assert_eq!(b.open, bar.open);
|
||||
assert_eq!(b.close, bar.close);
|
||||
}
|
||||
_ => panic!("Expected bar data"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_side_equality() {
|
||||
assert_eq!(Side::Buy, Side::Buy);
|
||||
assert_eq!(Side::Sell, Side::Sell);
|
||||
assert_ne!(Side::Buy, Side::Sell);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue