1pub mod chunked_array;
2mod df;
3pub mod series;
4
5#[cfg(test)]
6mod test {
7 use crate::chunked_array::flags::StatisticsFlags;
8 use crate::prelude::*;
9 use crate::series::IsSorted;
10
11 #[test]
12 fn test_serde() -> PolarsResult<()> {
13 let ca = UInt32Chunked::new("foo".into(), &[Some(1), None, Some(2)]);
14
15 let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
16
17 let out = serde_json::from_str::<Series>(&json).unwrap();
18 assert!(ca.into_series().equals_missing(&out));
19
20 let ca = StringChunked::new("foo".into(), &[Some("foo"), None, Some("bar")]);
21
22 let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
23
24 let out = serde_json::from_str::<Series>(&json).unwrap(); assert!(ca.into_series().equals_missing(&out));
26
27 Ok(())
28 }
29
30 #[test]
32 fn test_serde_owned() {
33 let ca = UInt32Chunked::new("foo".into(), &[Some(1), None, Some(2)]);
34
35 let json = serde_json::to_string(&ca.clone().into_series()).unwrap();
36
37 let out = serde_json::from_reader::<_, Series>(json.as_bytes()).unwrap(); assert!(ca.into_series().equals_missing(&out));
39 }
40
41 fn sample_dataframe() -> DataFrame {
42 let s1 = Series::new("foo".into(), &[1, 2, 3]);
43 let s2 = Series::new("bar".into(), &[Some(true), None, Some(false)]);
44 let s3 = Series::new("string".into(), &["mouse", "elephant", "dog"]);
45 let s_list = Column::new("list".into(), &[s1.clone(), s1.clone(), s1.clone()]);
46
47 DataFrame::new(vec![s1.into(), s2.into(), s3.into(), s_list]).unwrap()
48 }
49
50 #[test]
51 fn test_serde_flags() {
52 let df = sample_dataframe();
53
54 for mut column in df.columns {
55 column.set_sorted_flag(IsSorted::Descending);
56 let json = serde_json::to_string(&column).unwrap();
57 let out = serde_json::from_reader::<_, Column>(json.as_bytes()).unwrap();
58 let f = out.get_flags();
59 assert_ne!(f, StatisticsFlags::empty());
60 assert_eq!(column.get_flags(), out.get_flags());
61 }
62 }
63
64 #[test]
65 fn test_serde_df_json() {
66 let df = sample_dataframe();
67 let json = serde_json::to_string(&df).unwrap();
68 let out = serde_json::from_str::<DataFrame>(&json).unwrap(); assert!(df.equals_missing(&out));
70 }
71
72 #[test]
74 fn test_serde_df_owned_json() {
75 let df = sample_dataframe();
76 let json = serde_json::to_string(&df).unwrap();
77
78 let out = serde_json::from_reader::<_, DataFrame>(json.as_bytes()).unwrap(); assert!(df.equals_missing(&out));
80 }
81
82 #[ignore]
84 #[test]
85 #[cfg(feature = "dtype-struct")]
86 fn test_serde_struct_series_owned_json() {
87 let row_1 = AnyValue::StructOwned(Box::new((
88 vec![
89 AnyValue::String("1:1"),
90 AnyValue::Null,
91 AnyValue::String("1:3"),
92 ],
93 vec![
94 Field::new("fld_1".into(), DataType::String),
95 Field::new("fld_2".into(), DataType::String),
96 Field::new("fld_3".into(), DataType::String),
97 ],
98 )));
99 let dtype = DataType::Struct(vec![
100 Field::new("fld_1".into(), DataType::String),
101 Field::new("fld_2".into(), DataType::String),
102 Field::new("fld_3".into(), DataType::String),
103 ]);
104 let row_2 = AnyValue::StructOwned(Box::new((
105 vec![
106 AnyValue::String("2:1"),
107 AnyValue::String("2:2"),
108 AnyValue::String("2:3"),
109 ],
110 vec![
111 Field::new("fld_1".into(), DataType::String),
112 Field::new("fld_2".into(), DataType::String),
113 Field::new("fld_3".into(), DataType::String),
114 ],
115 )));
116 let row_3 = AnyValue::Null;
117
118 let s =
119 Series::from_any_values_and_dtype("item".into(), &[row_1, row_2, row_3], &dtype, false)
120 .unwrap();
121 let df = DataFrame::new(vec![s.into()]).unwrap();
122
123 let df_str = serde_json::to_string(&df).unwrap();
124 let out = serde_json::from_str::<DataFrame>(&df_str).unwrap();
125 assert!(df.equals_missing(&out));
126 }
127}