Coverage Report

Created: 2025-11-28 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}