• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

geo-engine / geoengine / 3929938005

pending completion
3929938005

push

github

GitHub
Merge #713

84930 of 96741 relevant lines covered (87.79%)

79640.1 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.41
/datatypes/src/plots/area_line_plot.rs
1
use crate::error;
2
use crate::plots::{Plot, PlotData, PlotMetaData};
3
use crate::primitives::{Measurement, TimeInstance};
4
use crate::util::Result;
5
use snafu::ensure;
6

7
pub struct AreaLineChart {
8
    timestamps: Vec<TimeInstance>,
9
    values: Vec<f64>,
10
    measurement: Measurement,
11
    draw_area: bool,
12
}
13

14
impl AreaLineChart {
15
    pub fn new(
6✔
16
        timestamps: Vec<TimeInstance>,
6✔
17
        values: Vec<f64>,
6✔
18
        measurement: Measurement,
6✔
19
        draw_area: bool,
6✔
20
    ) -> Result<Self> {
6✔
21
        ensure!(
6✔
22
            timestamps.len() == values.len(),
6✔
23
            error::Plot {
×
24
                details: "`timestamps` length must equal `values` length"
×
25
            }
×
26
        );
27

28
        Ok(Self {
6✔
29
            timestamps,
6✔
30
            values,
6✔
31
            measurement,
6✔
32
            draw_area,
6✔
33
        })
6✔
34
    }
6✔
35
}
36

37
impl Plot for AreaLineChart {
38
    fn to_vega_embeddable(&self, _allow_interactions: bool) -> Result<PlotData> {
6✔
39
        let data = self
6✔
40
            .timestamps
6✔
41
            .iter()
6✔
42
            .zip(&self.values)
6✔
43
            .map(|(timestamp, value)| {
19✔
44
                serde_json::json!({
19✔
45
                    "x": timestamp.as_datetime_string(),
19✔
46
                    "y": value,
19✔
47
                })
19✔
48
            })
19✔
49
            .collect::<Vec<_>>();
6✔
50

6✔
51
        let x_axis_label = "Time";
6✔
52
        let y_axis_label = self.measurement.to_string();
6✔
53

54
        let mark_type = if self.draw_area { "area" } else { "line" };
6✔
55

56
        let vega_string = serde_json::json!({
6✔
57
            "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json",
6✔
58
            "data": {
6✔
59
                "values": data
6✔
60
            },
6✔
61
            "description": "Area Plot",
6✔
62
            "encoding": {
6✔
63
                "x": {
6✔
64
                    "field": "x",
6✔
65
                    "title": x_axis_label,
6✔
66
                    "type": "temporal"
6✔
67
                },
6✔
68
                "y": {
6✔
69
                    "field": "y",
6✔
70
                    "title": y_axis_label,
6✔
71
                    "type": "quantitative"
6✔
72
                }
6✔
73
            },
6✔
74
            "mark": {
6✔
75
                "type": mark_type,
6✔
76
                "line": true,
6✔
77
                "point": true
6✔
78
            }
6✔
79
        })
6✔
80
        .to_string();
6✔
81

6✔
82
        Ok(PlotData {
6✔
83
            vega_string,
6✔
84
            metadata: PlotMetaData::None,
6✔
85
        })
6✔
86
    }
6✔
87
}
88

89
#[cfg(test)]
90
mod tests {
91
    use crate::primitives::{ContinuousMeasurement, DateTime};
92

93
    use super::*;
94

95
    #[test]
1✔
96
    fn serialization() {
1✔
97
        let chart = AreaLineChart::new(
1✔
98
            vec![
1✔
99
                TimeInstance::from(DateTime::new_utc(2010, 1, 1, 0, 0, 0)),
1✔
100
                TimeInstance::from(DateTime::new_utc(2011, 1, 1, 0, 0, 0)),
1✔
101
                TimeInstance::from(DateTime::new_utc(2012, 1, 1, 0, 0, 0)),
1✔
102
                TimeInstance::from(DateTime::new_utc(2013, 1, 1, 0, 0, 0)),
1✔
103
                TimeInstance::from(DateTime::new_utc(2014, 1, 1, 0, 0, 0)),
1✔
104
            ],
1✔
105
            vec![0., 1., 4., 9., 7.],
1✔
106
            Measurement::Unitless,
1✔
107
            true,
1✔
108
        )
1✔
109
        .unwrap();
1✔
110

1✔
111
        assert_eq!(
1✔
112
            chart.to_vega_embeddable(false).unwrap(),
1✔
113
            PlotData {
1✔
114
                vega_string: r#"{"$schema":"https://vega.github.io/schema/vega-lite/v4.17.0.json","data":{"values":[{"x":"2010-01-01T00:00:00+00:00","y":0.0},{"x":"2011-01-01T00:00:00+00:00","y":1.0},{"x":"2012-01-01T00:00:00+00:00","y":4.0},{"x":"2013-01-01T00:00:00+00:00","y":9.0},{"x":"2014-01-01T00:00:00+00:00","y":7.0}]},"description":"Area Plot","encoding":{"x":{"field":"x","title":"Time","type":"temporal"},"y":{"field":"y","title":"","type":"quantitative"}},"mark":{"line":true,"point":true,"type":"area"}}"#.to_owned(),
1✔
115
                metadata: PlotMetaData::None,
1✔
116
            }
1✔
117
        );
1✔
118
    }
1✔
119

120
    #[test]
1✔
121
    fn without_area() {
1✔
122
        let chart = AreaLineChart::new(
1✔
123
            vec![
1✔
124
                TimeInstance::from(DateTime::new_utc(2010, 1, 1, 0, 0, 0)),
1✔
125
                TimeInstance::from(DateTime::new_utc(2011, 1, 1, 0, 0, 0)),
1✔
126
                TimeInstance::from(DateTime::new_utc(2012, 1, 1, 0, 0, 0)),
1✔
127
                TimeInstance::from(DateTime::new_utc(2013, 1, 1, 0, 0, 0)),
1✔
128
                TimeInstance::from(DateTime::new_utc(2014, 1, 1, 0, 0, 0)),
1✔
129
            ],
1✔
130
            vec![0., 1., 4., 9., 7.],
1✔
131
            Measurement::Continuous(ContinuousMeasurement {
1✔
132
                measurement: "Joy".to_owned(),
1✔
133
                unit: Some("Pct".to_owned()),
1✔
134
            }),
1✔
135
            false,
1✔
136
        )
1✔
137
        .unwrap();
1✔
138

1✔
139
        assert_eq!(
1✔
140
            chart.to_vega_embeddable(false).unwrap(),
1✔
141
            PlotData {
1✔
142
                vega_string: r#"{"$schema":"https://vega.github.io/schema/vega-lite/v4.17.0.json","data":{"values":[{"x":"2010-01-01T00:00:00+00:00","y":0.0},{"x":"2011-01-01T00:00:00+00:00","y":1.0},{"x":"2012-01-01T00:00:00+00:00","y":4.0},{"x":"2013-01-01T00:00:00+00:00","y":9.0},{"x":"2014-01-01T00:00:00+00:00","y":7.0}]},"description":"Area Plot","encoding":{"x":{"field":"x","title":"Time","type":"temporal"},"y":{"field":"y","title":"Joy in Pct","type":"quantitative"}},"mark":{"line":true,"point":true,"type":"line"}}"#.to_owned(),
1✔
143
                metadata: PlotMetaData::None,
1✔
144
            }
1✔
145
        );
1✔
146
    }
1✔
147
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc