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]
73 fn test_serde_df_bincode() {
74 let df = sample_dataframe();
75 let bytes = bincode::serialize(&df).unwrap();
76 let out = bincode::deserialize::<DataFrame>(&bytes).unwrap(); assert!(df.equals_missing(&out));
78 }
79
80 #[test]
82 fn test_serde_df_owned_json() {
83 let df = sample_dataframe();
84 let json = serde_json::to_string(&df).unwrap();
85
86 let out = serde_json::from_reader::<_, DataFrame>(json.as_bytes()).unwrap(); assert!(df.equals_missing(&out));
88 }
89
90 #[test]
91 fn test_serde_binary_series_owned_bincode() {
92 let s1 = Column::new(
93 "foo".into(),
94 &[
95 vec![1u8, 2u8, 3u8],
96 vec![4u8, 5u8, 6u8, 7u8],
97 vec![8u8, 9u8],
98 ],
99 );
100 let df = DataFrame::new(vec![s1]).unwrap();
101 let bytes = bincode::serialize(&df).unwrap();
102 let out = bincode::deserialize_from::<_, DataFrame>(bytes.as_slice()).unwrap();
103 assert!(df.equals_missing(&out));
104 }
105
106 #[ignore]
108 #[test]
109 #[cfg(feature = "dtype-struct")]
110 fn test_serde_struct_series_owned_json() {
111 let row_1 = AnyValue::StructOwned(Box::new((
112 vec![
113 AnyValue::String("1:1"),
114 AnyValue::Null,
115 AnyValue::String("1:3"),
116 ],
117 vec![
118 Field::new("fld_1".into(), DataType::String),
119 Field::new("fld_2".into(), DataType::String),
120 Field::new("fld_3".into(), DataType::String),
121 ],
122 )));
123 let dtype = DataType::Struct(vec![
124 Field::new("fld_1".into(), DataType::String),
125 Field::new("fld_2".into(), DataType::String),
126 Field::new("fld_3".into(), DataType::String),
127 ]);
128 let row_2 = AnyValue::StructOwned(Box::new((
129 vec![
130 AnyValue::String("2:1"),
131 AnyValue::String("2:2"),
132 AnyValue::String("2:3"),
133 ],
134 vec![
135 Field::new("fld_1".into(), DataType::String),
136 Field::new("fld_2".into(), DataType::String),
137 Field::new("fld_3".into(), DataType::String),
138 ],
139 )));
140 let row_3 = AnyValue::Null;
141
142 let s =
143 Series::from_any_values_and_dtype("item".into(), &[row_1, row_2, row_3], &dtype, false)
144 .unwrap();
145 let df = DataFrame::new(vec![s.into()]).unwrap();
146
147 let df_str = serde_json::to_string(&df).unwrap();
148 let out = serde_json::from_str::<DataFrame>(&df_str).unwrap();
149 assert!(df.equals_missing(&out));
150 }
151 #[test]
153 fn test_serde_df_owned_bincode() {
154 let df = sample_dataframe();
155 let bytes = bincode::serialize(&df).unwrap();
156 let out = bincode::deserialize_from::<_, DataFrame>(bytes.as_slice()).unwrap(); assert!(df.equals_missing(&out));
158 }
159}