/rust/registry/src/index.crates.io-1949cf8c6b5b557f/revision-0.14.0/src/implementations/vecs.rs
Line | Count | Source |
1 | | use crate::DeserializeRevisioned; |
2 | | use crate::Error; |
3 | | use crate::Revisioned; |
4 | | use crate::SerializeRevisioned; |
5 | | |
6 | 16.0k | pub(crate) fn serialize_bytes<W>(v: &[u8], writer: &mut W) -> Result<(), Error> |
7 | 16.0k | where |
8 | 16.0k | W: std::io::Write, |
9 | | { |
10 | 16.0k | v.len().serialize_revisioned(writer)?; |
11 | 16.0k | writer.write_all(v).map_err(Error::Io) |
12 | 16.0k | } revision::implementations::vecs::serialize_bytes::<alloc::vec::Vec<u8>> Line | Count | Source | 6 | 16.0k | pub(crate) fn serialize_bytes<W>(v: &[u8], writer: &mut W) -> Result<(), Error> | 7 | 16.0k | where | 8 | 16.0k | W: std::io::Write, | 9 | | { | 10 | 16.0k | v.len().serialize_revisioned(writer)?; | 11 | 16.0k | writer.write_all(v).map_err(Error::Io) | 12 | 16.0k | } |
Unexecuted instantiation: revision::implementations::vecs::serialize_bytes::<_> |
13 | | |
14 | | impl<T> SerializeRevisioned for Vec<T> |
15 | | where |
16 | | T: SerializeRevisioned, |
17 | | { |
18 | | #[inline] |
19 | 1.70k | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { |
20 | 1.70k | self.len().serialize_revisioned(writer)?; |
21 | 4.53k | for v in self { |
22 | 2.82k | v.serialize_revisioned(writer)?; |
23 | | } |
24 | 1.70k | Ok(()) |
25 | 1.70k | } <alloc::vec::Vec<alloc::string::String> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 15 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 15 | self.len().serialize_revisioned(writer)?; | 21 | 28 | for v in self { | 22 | 13 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 15 | Ok(()) | 25 | 15 | } |
<alloc::vec::Vec<surrealdb_core::val::Value> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 1.31k | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 1.31k | self.len().serialize_revisioned(writer)?; | 21 | 4.00k | for v in self { | 22 | 2.69k | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 1.31k | Ok(()) | 25 | 1.31k | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::cf::mutations::TableMutation> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::val::geometry::Geometry> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::expression::Expr> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::kind::GeometryKind> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> <alloc::vec::Vec<surrealdb_core::expr::kind::Kind> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 10 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 10 | self.len().serialize_revisioned(writer)?; | 21 | 33 | for v in self { | 22 | 23 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 10 | Ok(()) | 25 | 10 | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::fetch::Fetch> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::field::Field> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::group::Group> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> <alloc::vec::Vec<surrealdb_core::expr::idiom::Idiom> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 36 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 36 | self.len().serialize_revisioned(writer)?; | 21 | 82 | for v in self { | 22 | 46 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 36 | Ok(()) | 25 | 36 | } |
<alloc::vec::Vec<surrealdb_core::expr::filter::Filter> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 11 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 11 | self.len().serialize_revisioned(writer)?; | 21 | 22 | for v in self { | 22 | 11 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 11 | Ok(()) | 25 | 11 | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::operation::Operation> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> <alloc::vec::Vec<surrealdb_core::expr::tokenizer::Tokenizer> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 10 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 10 | self.len().serialize_revisioned(writer)?; | 21 | 50 | for v in self { | 22 | 40 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 10 | Ok(()) | 25 | 10 | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::aggregation::Aggregation> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> <alloc::vec::Vec<surrealdb_core::catalog::aggregation::AggregationStat> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Line | Count | Source | 19 | 311 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { | 20 | 311 | self.len().serialize_revisioned(writer)?; | 21 | 311 | for v in self { | 22 | 0 | v.serialize_revisioned(writer)?; | 23 | | } | 24 | 311 | Ok(()) | 25 | 311 | } |
Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::line_string::LineString> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::coord::Coord> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::point::Point> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::polygon::Polygon> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::iam::entities::roles::Role> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::idx::ft::offset::Offset> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::ApiActionDefinition> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::MiddlewareDefinition> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::ApiMethod> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::idx::trees::hnsw::layer::LayerState> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<(alloc::string::String, surrealdb_core::expr::kind::Kind)> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<(surrealdb_core::expr::idiom::Idiom, surrealdb_core::expr::expression::Expr)> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<u8> as revision::SerializeRevisioned>::serialize_revisioned::<alloc::vec::Vec<u8>> Unexecuted instantiation: <alloc::vec::Vec<_> as revision::SerializeRevisioned>::serialize_revisioned::<_> |
26 | | } |
27 | | |
28 | | impl<T> DeserializeRevisioned for Vec<T> |
29 | | where |
30 | | T: DeserializeRevisioned, |
31 | | { |
32 | | #[inline] |
33 | 26.5k | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { |
34 | 26.5k | let len = usize::deserialize_revisioned(reader)?; |
35 | 26.5k | let mut vec = Vec::with_capacity(len); |
36 | 26.5k | for _ in 0..len { |
37 | 421k | let v: T = T::deserialize_revisioned(reader)?; |
38 | | // Hint telling the compiler that the push is within capacity. |
39 | 421k | if vec.len() >= vec.capacity() { |
40 | 0 | unsafe { std::hint::unreachable_unchecked() } |
41 | 421k | } |
42 | 421k | vec.push(v); |
43 | | } |
44 | 26.5k | Ok(vec) |
45 | 26.5k | } <alloc::vec::Vec<alloc::string::String> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 453 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 453 | let len = usize::deserialize_revisioned(reader)?; | 35 | 453 | let mut vec = Vec::with_capacity(len); | 36 | 453 | for _ in 0..len { | 37 | 293 | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 293 | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 293 | } | 42 | 293 | vec.push(v); | 43 | | } | 44 | 453 | Ok(vec) | 45 | 453 | } |
<alloc::vec::Vec<surrealdb_core::val::Value> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 131 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 131 | let len = usize::deserialize_revisioned(reader)?; | 35 | 131 | let mut vec = Vec::with_capacity(len); | 36 | 131 | for _ in 0..len { | 37 | 393 | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 393 | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 393 | } | 42 | 393 | vec.push(v); | 43 | | } | 44 | 131 | Ok(vec) | 45 | 131 | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::cf::mutations::TableMutation> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::val::geometry::Geometry> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::expression::Expr> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::kind::GeometryKind> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> <alloc::vec::Vec<surrealdb_core::expr::kind::Kind> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 1.08k | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 1.08k | let len = usize::deserialize_revisioned(reader)?; | 35 | 1.08k | let mut vec = Vec::with_capacity(len); | 36 | 1.08k | for _ in 0..len { | 37 | 2.31k | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 2.31k | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 2.31k | } | 42 | 2.31k | vec.push(v); | 43 | | } | 44 | 1.08k | Ok(vec) | 45 | 1.08k | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::fetch::Fetch> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::field::Field> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::group::Group> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> <alloc::vec::Vec<surrealdb_core::expr::idiom::Idiom> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 6 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 6 | let len = usize::deserialize_revisioned(reader)?; | 35 | 6 | let mut vec = Vec::with_capacity(len); | 36 | 6 | for _ in 0..len { | 37 | 6 | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 6 | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 6 | } | 42 | 6 | vec.push(v); | 43 | | } | 44 | 6 | Ok(vec) | 45 | 6 | } |
<alloc::vec::Vec<surrealdb_core::expr::filter::Filter> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 1 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 1 | let len = usize::deserialize_revisioned(reader)?; | 35 | 1 | let mut vec = Vec::with_capacity(len); | 36 | 1 | for _ in 0..len { | 37 | 1 | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 1 | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 1 | } | 42 | 1 | vec.push(v); | 43 | | } | 44 | 1 | Ok(vec) | 45 | 1 | } |
Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::operation::Operation> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::expr::tokenizer::Tokenizer> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::aggregation::Aggregation> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> <alloc::vec::Vec<surrealdb_core::catalog::aggregation::AggregationStat> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 57 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 57 | let len = usize::deserialize_revisioned(reader)?; | 35 | 57 | let mut vec = Vec::with_capacity(len); | 36 | 57 | for _ in 0..len { | 37 | 0 | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 0 | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 0 | } | 42 | 0 | vec.push(v); | 43 | | } | 44 | 57 | Ok(vec) | 45 | 57 | } |
Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::line_string::LineString> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::coord::Coord> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::point::Point> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<geo_types::geometry::polygon::Polygon> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::iam::entities::roles::Role> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::idx::ft::offset::Offset> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::ApiActionDefinition> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::MiddlewareDefinition> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::catalog::schema::api::ApiMethod> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<surrealdb_core::idx::trees::hnsw::layer::LayerState> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<(alloc::string::String, surrealdb_core::expr::kind::Kind)> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Unexecuted instantiation: <alloc::vec::Vec<(surrealdb_core::expr::idiom::Idiom, surrealdb_core::expr::expression::Expr)> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> <alloc::vec::Vec<u8> as revision::DeserializeRevisioned>::deserialize_revisioned::<&[u8]> Line | Count | Source | 33 | 24.7k | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { | 34 | 24.7k | let len = usize::deserialize_revisioned(reader)?; | 35 | 24.7k | let mut vec = Vec::with_capacity(len); | 36 | 24.7k | for _ in 0..len { | 37 | 418k | let v: T = T::deserialize_revisioned(reader)?; | 38 | | // Hint telling the compiler that the push is within capacity. | 39 | 418k | if vec.len() >= vec.capacity() { | 40 | 0 | unsafe { std::hint::unreachable_unchecked() } | 41 | 418k | } | 42 | 418k | vec.push(v); | 43 | | } | 44 | 24.7k | Ok(vec) | 45 | 24.7k | } |
Unexecuted instantiation: <alloc::vec::Vec<_> as revision::DeserializeRevisioned>::deserialize_revisioned::<_> |
46 | | } |
47 | | |
48 | | impl<T> Revisioned for Vec<T> |
49 | | where |
50 | | T: Revisioned, |
51 | | { |
52 | | #[inline] |
53 | 0 | fn revision() -> u16 { |
54 | 0 | 1 |
55 | 0 | } |
56 | | } |
57 | | |
58 | | #[cfg(test)] |
59 | | mod tests { |
60 | | |
61 | | use super::*; |
62 | | |
63 | | #[test] |
64 | | fn test_vec() { |
65 | | let val: Vec<String> = |
66 | | vec![String::from("this"), String::from("is"), String::from("a"), String::from("test")]; |
67 | | let mut mem: Vec<u8> = vec![]; |
68 | | val.serialize_revisioned(&mut mem).unwrap(); |
69 | | assert_eq!(mem.len(), 16); |
70 | | let out = |
71 | | <Vec<String> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
72 | | .unwrap(); |
73 | | assert_eq!(val, out); |
74 | | } |
75 | | |
76 | | #[test] |
77 | | fn test_vec_bool() { |
78 | | let val = vec![true, false, true, true, false]; |
79 | | let mut mem: Vec<u8> = vec![]; |
80 | | val.serialize_revisioned(&mut mem).unwrap(); |
81 | | let out = <Vec<bool> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
82 | | .unwrap(); |
83 | | assert_eq!(val, out); |
84 | | } |
85 | | |
86 | | #[test] |
87 | | fn test_vec_i8() { |
88 | | let val = vec![i8::MIN, -1, 0, 1, i8::MAX]; |
89 | | let mut mem: Vec<u8> = vec![]; |
90 | | val.serialize_revisioned(&mut mem).unwrap(); |
91 | | let out = <Vec<i8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
92 | | .unwrap(); |
93 | | assert_eq!(val, out); |
94 | | } |
95 | | |
96 | | #[test] |
97 | | fn test_vec_u8() { |
98 | | let val = vec![0, 1, 127, 255]; |
99 | | let mut mem: Vec<u8> = vec![]; |
100 | | val.serialize_revisioned(&mut mem).unwrap(); |
101 | | let out = <Vec<u8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
102 | | .unwrap(); |
103 | | assert_eq!(val, out); |
104 | | } |
105 | | |
106 | | #[test] |
107 | | fn test_vec_i16() { |
108 | | let val = vec![i16::MIN, -1000, 0, 1000, i16::MAX]; |
109 | | let mut mem: Vec<u8> = vec![]; |
110 | | val.serialize_revisioned(&mut mem).unwrap(); |
111 | | let out = <Vec<i16> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
112 | | .unwrap(); |
113 | | assert_eq!(val, out); |
114 | | } |
115 | | |
116 | | #[test] |
117 | | fn test_vec_u16() { |
118 | | let val = vec![0, 1000, 32767, 65535]; |
119 | | let mut mem: Vec<u8> = vec![]; |
120 | | val.serialize_revisioned(&mut mem).unwrap(); |
121 | | let out = <Vec<u16> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
122 | | .unwrap(); |
123 | | assert_eq!(val, out); |
124 | | } |
125 | | |
126 | | #[test] |
127 | | fn test_vec_i32() { |
128 | | let val = vec![i32::MIN, -100000, 0, 100000, i32::MAX]; |
129 | | let mut mem: Vec<u8> = vec![]; |
130 | | val.serialize_revisioned(&mut mem).unwrap(); |
131 | | let out = <Vec<i32> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
132 | | .unwrap(); |
133 | | assert_eq!(val, out); |
134 | | } |
135 | | |
136 | | #[test] |
137 | | fn test_vec_u32() { |
138 | | let val = vec![0, 100000, 2147483647, 4294967295]; |
139 | | let mut mem: Vec<u8> = vec![]; |
140 | | val.serialize_revisioned(&mut mem).unwrap(); |
141 | | let out = <Vec<u32> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
142 | | .unwrap(); |
143 | | assert_eq!(val, out); |
144 | | } |
145 | | |
146 | | #[test] |
147 | | fn test_vec_i64() { |
148 | | let val = vec![i64::MIN, -1000000000, 0, 1000000000, i64::MAX]; |
149 | | let mut mem: Vec<u8> = vec![]; |
150 | | val.serialize_revisioned(&mut mem).unwrap(); |
151 | | let out = <Vec<i64> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
152 | | .unwrap(); |
153 | | assert_eq!(val, out); |
154 | | } |
155 | | |
156 | | #[test] |
157 | | fn test_vec_u64() { |
158 | | let val = vec![0, 1000000000, 9223372036854775807, 18446744073709551615]; |
159 | | let mut mem: Vec<u8> = vec![]; |
160 | | val.serialize_revisioned(&mut mem).unwrap(); |
161 | | let out = <Vec<u64> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
162 | | .unwrap(); |
163 | | assert_eq!(val, out); |
164 | | } |
165 | | |
166 | | #[test] |
167 | | fn test_vec_i128() { |
168 | | let val = vec![i128::MIN, -1000000000000000000, 0, 1000000000000000000, i128::MAX]; |
169 | | let mut mem: Vec<u8> = vec![]; |
170 | | val.serialize_revisioned(&mut mem).unwrap(); |
171 | | let out = <Vec<i128> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
172 | | .unwrap(); |
173 | | assert_eq!(val, out); |
174 | | } |
175 | | |
176 | | #[test] |
177 | | fn test_vec_u128() { |
178 | | let val = vec![0, 1000000000000000000, u128::MAX / 2, u128::MAX]; |
179 | | let mut mem: Vec<u8> = vec![]; |
180 | | val.serialize_revisioned(&mut mem).unwrap(); |
181 | | let out = <Vec<u128> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
182 | | .unwrap(); |
183 | | assert_eq!(val, out); |
184 | | } |
185 | | |
186 | | #[test] |
187 | | fn test_vec_f32() { |
188 | | let val = vec![f32::MIN, -std::f32::consts::PI, 0.0, std::f32::consts::PI, f32::MAX]; |
189 | | let mut mem: Vec<u8> = vec![]; |
190 | | val.serialize_revisioned(&mut mem).unwrap(); |
191 | | let out = <Vec<f32> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
192 | | .unwrap(); |
193 | | assert_eq!(val, out); |
194 | | } |
195 | | |
196 | | #[test] |
197 | | fn test_vec_f64() { |
198 | | let val = vec![f64::MIN, -std::f64::consts::PI, 0.0, std::f64::consts::PI, f64::MAX]; |
199 | | let mut mem: Vec<u8> = vec![]; |
200 | | val.serialize_revisioned(&mut mem).unwrap(); |
201 | | let out = <Vec<f64> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
202 | | .unwrap(); |
203 | | assert_eq!(val, out); |
204 | | } |
205 | | |
206 | | #[test] |
207 | | fn test_vec_string() { |
208 | | let val = vec![ |
209 | | String::from("hello"), |
210 | | String::from("world"), |
211 | | String::from(""), |
212 | | String::from("longer string with spaces and symbols!@#$%"), |
213 | | String::from("unicode: 🚀🔥✨"), |
214 | | ]; |
215 | | let mut mem: Vec<u8> = vec![]; |
216 | | val.serialize_revisioned(&mut mem).unwrap(); |
217 | | let out = |
218 | | <Vec<String> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
219 | | .unwrap(); |
220 | | assert_eq!(val, out); |
221 | | } |
222 | | |
223 | | #[test] |
224 | | fn test_vec_empty() { |
225 | | // Test empty vectors for all specialized types |
226 | | let empty_bool: Vec<bool> = vec![]; |
227 | | let empty_i8: Vec<i8> = vec![]; |
228 | | let empty_u8: Vec<u8> = vec![]; |
229 | | let empty_i32: Vec<i32> = vec![]; |
230 | | let empty_f64: Vec<f64> = vec![]; |
231 | | |
232 | | // Test bool |
233 | | let mut mem: Vec<u8> = vec![]; |
234 | | empty_bool.serialize_revisioned(&mut mem).unwrap(); |
235 | | let out_bool = |
236 | | <Vec<bool> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
237 | | .unwrap(); |
238 | | assert_eq!(empty_bool, out_bool); |
239 | | |
240 | | // Test i8 |
241 | | mem.clear(); |
242 | | empty_i8.serialize_revisioned(&mut mem).unwrap(); |
243 | | let out_i8 = |
244 | | <Vec<i8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
245 | | .unwrap(); |
246 | | assert_eq!(empty_i8, out_i8); |
247 | | |
248 | | // Test u8 |
249 | | mem.clear(); |
250 | | empty_u8.serialize_revisioned(&mut mem).unwrap(); |
251 | | let out_u8 = |
252 | | <Vec<u8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
253 | | .unwrap(); |
254 | | assert_eq!(empty_u8, out_u8); |
255 | | |
256 | | // Test i32 |
257 | | mem.clear(); |
258 | | empty_i32.serialize_revisioned(&mut mem).unwrap(); |
259 | | let out_i32 = |
260 | | <Vec<i32> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
261 | | .unwrap(); |
262 | | assert_eq!(empty_i32, out_i32); |
263 | | |
264 | | // Test f64 |
265 | | mem.clear(); |
266 | | empty_f64.serialize_revisioned(&mut mem).unwrap(); |
267 | | let out_f64 = |
268 | | <Vec<f64> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
269 | | .unwrap(); |
270 | | assert_eq!(empty_f64, out_f64); |
271 | | } |
272 | | |
273 | | #[test] |
274 | | fn test_vec_large() { |
275 | | // Test larger vectors to ensure bulk operations work correctly |
276 | | let large_u8: Vec<u8> = (0..=255).collect(); |
277 | | let mut mem: Vec<u8> = vec![]; |
278 | | large_u8.serialize_revisioned(&mut mem).unwrap(); |
279 | | let out = <Vec<u8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
280 | | .unwrap(); |
281 | | assert_eq!(large_u8, out); |
282 | | |
283 | | // Test large i32 vector |
284 | | let large_i32: Vec<i32> = (0..1000).map(|i| i * 2 - 500).collect(); |
285 | | mem.clear(); |
286 | | large_i32.serialize_revisioned(&mut mem).unwrap(); |
287 | | let out_i32 = |
288 | | <Vec<i32> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
289 | | .unwrap(); |
290 | | assert_eq!(large_i32, out_i32); |
291 | | |
292 | | // Test large bool vector |
293 | | let large_bool: Vec<bool> = (0..100).map(|i| i % 2 == 0).collect(); |
294 | | mem.clear(); |
295 | | large_bool.serialize_revisioned(&mut mem).unwrap(); |
296 | | let out_bool = |
297 | | <Vec<bool> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
298 | | .unwrap(); |
299 | | assert_eq!(large_bool, out_bool); |
300 | | } |
301 | | |
302 | | #[test] |
303 | | fn test_vec_edge_cases() { |
304 | | // Test single element vectors |
305 | | let single_u8 = vec![42u8]; |
306 | | let mut mem: Vec<u8> = vec![]; |
307 | | single_u8.serialize_revisioned(&mut mem).unwrap(); |
308 | | let out = <Vec<u8> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
309 | | .unwrap(); |
310 | | assert_eq!(single_u8, out); |
311 | | |
312 | | // Test bool edge cases (all true, all false) |
313 | | let all_true = vec![true; 50]; |
314 | | mem.clear(); |
315 | | all_true.serialize_revisioned(&mut mem).unwrap(); |
316 | | let out_true = |
317 | | <Vec<bool> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
318 | | .unwrap(); |
319 | | assert_eq!(all_true, out_true); |
320 | | |
321 | | let all_false = vec![false; 50]; |
322 | | mem.clear(); |
323 | | all_false.serialize_revisioned(&mut mem).unwrap(); |
324 | | let out_false = |
325 | | <Vec<bool> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
326 | | .unwrap(); |
327 | | assert_eq!(all_false, out_false); |
328 | | |
329 | | // Test floating point special values |
330 | | let float_specials = |
331 | | vec![f64::NEG_INFINITY, f64::MIN, -0.0, 0.0, f64::MAX, f64::INFINITY, f64::NAN]; |
332 | | mem.clear(); |
333 | | float_specials.serialize_revisioned(&mut mem).unwrap(); |
334 | | let out_floats = |
335 | | <Vec<f64> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice()) |
336 | | .unwrap(); |
337 | | // Note: NaN != NaN, so we check each element individually |
338 | | assert_eq!(out_floats.len(), float_specials.len()); |
339 | | for (i, (&expected, &actual)) in float_specials.iter().zip(out_floats.iter()).enumerate() { |
340 | | if expected.is_nan() { |
341 | | assert!(actual.is_nan(), "Element {} should be NaN", i); |
342 | | } else { |
343 | | assert_eq!(expected, actual, "Element {} mismatch", i); |
344 | | } |
345 | | } |
346 | | } |
347 | | } |