Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-sql/tests/functions_cumulative.rs
6939 views
1
use polars_core::prelude::*;
2
use polars_lazy::prelude::*;
3
use polars_sql::*;
4
5
fn create_df() -> LazyFrame {
6
df! {
7
"Year" => [2018, 2018, 2019, 2019, 2020, 2020],
8
"Country" => ["US", "UK", "US", "UK", "US", "UK"],
9
"Sales" => [1000, 2000, 3000, 4000, 5000, 6000]
10
}
11
.unwrap()
12
.lazy()
13
}
14
15
fn create_expected(expr: Expr, sql: &str) -> (DataFrame, DataFrame) {
16
let df = create_df();
17
let alias = "TEST";
18
19
let query = format!(
20
r#"
21
SELECT
22
{sql} as {alias}
23
FROM
24
df
25
ORDER BY
26
{alias}
27
"#
28
);
29
30
let expected = df
31
.clone()
32
.select(&[expr.alias(alias)])
33
.sort([alias], Default::default())
34
.collect()
35
.unwrap();
36
let mut ctx = SQLContext::new();
37
ctx.register("df", df);
38
39
let actual = ctx.execute(&query).unwrap().collect().unwrap();
40
(expected, actual)
41
}
42
43
#[test]
44
fn test_cumulative_sum() {
45
let expr = col("Sales")
46
.sort(SortOptions::default().with_order_descending(true))
47
.cum_sum(false);
48
49
let sql_expr = "SUM(Sales) OVER (ORDER BY Sales DESC)";
50
let (expected, actual) = create_expected(expr, sql_expr);
51
52
assert!(expected.equals(&actual))
53
}
54
55
#[test]
56
fn test_cumulative_min() {
57
let expr = col("Sales")
58
.sort(SortOptions::default().with_order_descending(true))
59
.cum_min(false);
60
61
let sql_expr = "MIN(Sales) OVER (ORDER BY Sales DESC)";
62
let (expected, actual) = create_expected(expr, sql_expr);
63
64
assert!(expected.equals(&actual))
65
}
66
67
#[test]
68
fn test_cumulative_max() {
69
let expr = col("Sales")
70
.sort(SortOptions::default().with_order_descending(true))
71
.cum_max(false);
72
73
let sql_expr = "MAX(Sales) OVER (ORDER BY Sales DESC)";
74
let (expected, actual) = create_expected(expr, sql_expr);
75
76
assert!(expected.equals(&actual))
77
}
78
79