Path: blob/main/crates/polars-sql/tests/functions_cumulative.rs
6939 views
use polars_core::prelude::*;1use polars_lazy::prelude::*;2use polars_sql::*;34fn create_df() -> LazyFrame {5df! {6"Year" => [2018, 2018, 2019, 2019, 2020, 2020],7"Country" => ["US", "UK", "US", "UK", "US", "UK"],8"Sales" => [1000, 2000, 3000, 4000, 5000, 6000]9}10.unwrap()11.lazy()12}1314fn create_expected(expr: Expr, sql: &str) -> (DataFrame, DataFrame) {15let df = create_df();16let alias = "TEST";1718let query = format!(19r#"20SELECT21{sql} as {alias}22FROM23df24ORDER BY25{alias}26"#27);2829let expected = df30.clone()31.select(&[expr.alias(alias)])32.sort([alias], Default::default())33.collect()34.unwrap();35let mut ctx = SQLContext::new();36ctx.register("df", df);3738let actual = ctx.execute(&query).unwrap().collect().unwrap();39(expected, actual)40}4142#[test]43fn test_cumulative_sum() {44let expr = col("Sales")45.sort(SortOptions::default().with_order_descending(true))46.cum_sum(false);4748let sql_expr = "SUM(Sales) OVER (ORDER BY Sales DESC)";49let (expected, actual) = create_expected(expr, sql_expr);5051assert!(expected.equals(&actual))52}5354#[test]55fn test_cumulative_min() {56let expr = col("Sales")57.sort(SortOptions::default().with_order_descending(true))58.cum_min(false);5960let sql_expr = "MIN(Sales) OVER (ORDER BY Sales DESC)";61let (expected, actual) = create_expected(expr, sql_expr);6263assert!(expected.equals(&actual))64}6566#[test]67fn test_cumulative_max() {68let expr = col("Sales")69.sort(SortOptions::default().with_order_descending(true))70.cum_max(false);7172let sql_expr = "MAX(Sales) OVER (ORDER BY Sales DESC)";73let (expected, actual) = create_expected(expr, sql_expr);7475assert!(expected.equals(&actual))76}777879