@@ -7,6 +7,7 @@ use datafusion_common::ScalarValue;
77use serde_json:: json;
88use util:: check:: check_transform_evaluation;
99use util:: datasets:: vega_json_dataset;
10+ use vegafusion_common:: data:: table:: VegaFusionTable ;
1011use vegafusion_core:: spec:: transform:: formula:: FormulaTransformSpec ;
1112use vegafusion_core:: spec:: transform:: TransformSpec ;
1213use vegafusion_runtime:: expression:: compiler:: config:: CompilationConfig ;
@@ -287,3 +288,42 @@ fn test_formula_span() {
287288 & eq_config,
288289 ) ;
289290}
291+
292+ #[ test]
293+ fn test_formula_time_offset_date ( ) {
294+ let dataset = VegaFusionTable :: from_json ( & json ! ( [
295+ { "date" : "2023-01-15" } ,
296+ { "date" : "2023-06-20" } ,
297+ { "date" : "2023-12-31" } ,
298+ ] ) )
299+ . unwrap ( ) ;
300+
301+ let transform_specs: Vec < TransformSpec > = serde_json:: from_value ( json ! ( [
302+ {
303+ "type" : "formula" ,
304+ "expr" : "toDate(datum['date'])" ,
305+ "as" : "timestamp"
306+ } ,
307+ {
308+ "type" : "formula" ,
309+ "expr" : "timeOffset('date', datum['timestamp'], -1)" ,
310+ "as" : "prev_day"
311+ } ,
312+ {
313+ "type" : "formula" ,
314+ "expr" : "timeOffset('date', datum['timestamp'], 1)" ,
315+ "as" : "next_day"
316+ } ,
317+ ] ) )
318+ . unwrap ( ) ;
319+
320+ let comp_config = Default :: default ( ) ;
321+ let eq_config = Default :: default ( ) ;
322+
323+ check_transform_evaluation (
324+ & dataset,
325+ transform_specs. as_slice ( ) ,
326+ & comp_config,
327+ & eq_config,
328+ ) ;
329+ }
0 commit comments