use hyprstream_core::aggregation::TimeWindow;
use std::time::Duration;
#[test]
fn test_window_bounds_none() {
let window = TimeWindow::None;
let timestamp = 1000;
let (start, end) = window.window_bounds(timestamp);
assert_eq!(start, i64::MIN);
assert_eq!(end, i64::MAX);
}
#[test]
fn test_window_bounds_fixed() {
let window = TimeWindow::Fixed(Duration::from_secs(60)); let timestamp = 100; let (start, end) = window.window_bounds(timestamp);
assert_eq!(start, 60); assert_eq!(end, 120); }
#[test]
fn test_window_bounds_sliding() {
let window = TimeWindow::Sliding {
window: Duration::from_secs(300), slide: Duration::from_secs(60), };
let timestamp = 100;
let (start, end) = window.window_bounds(timestamp);
assert_eq!(start, 60); assert_eq!(end, 360); }
#[test]
fn test_window_sql_generation() {
let window = TimeWindow::None;
assert!(window.to_sql().is_none());
let window = TimeWindow::Fixed(Duration::from_secs(60));
let sql = window.to_sql().unwrap();
assert!(sql.contains("timestamp / 60"));
assert!(sql.contains("window_start"));
assert!(sql.contains("window_end"));
let window = TimeWindow::Sliding {
window: Duration::from_secs(300),
slide: Duration::from_secs(60),
};
let sql = window.to_sql().unwrap();
assert!(sql.contains("timestamp / 60"));
assert!(sql.contains("window_start"));
assert!(sql.contains("window_end"));
assert!(sql.contains("300")); }