From 5733a2f5a34e9e8d458c93ba81415eb35eb809d5 Mon Sep 17 00:00:00 2001 From: Piotr Dulikowski Date: Fri, 8 Dec 2023 04:02:20 +0100 Subject: [PATCH] serialize: tests for dyn SerializeCql/dyn SerializeRow As a final confirmation of the work in the PR and to prevent regressions, add tests which explicitly use `dyn SerializeCql` and `dyn SerializeRow`. --- scylla-cql/src/types/serialize/row.rs | 33 +++++++++++++++++++++++++ scylla-cql/src/types/serialize/value.rs | 15 +++++++++++ 2 files changed, 48 insertions(+) diff --git a/scylla-cql/src/types/serialize/row.rs b/scylla-cql/src/types/serialize/row.rs index c5256a2eb8..d8702100b6 100644 --- a/scylla-cql/src/types/serialize/row.rs +++ b/scylla-cql/src/types/serialize/row.rs @@ -639,4 +639,37 @@ mod tests { // Skip the value count assert_eq!(&sorted_row_data[2..], unsorted_row_data); } + + #[test] + fn test_dyn_serialize_row() { + let row = ( + 1i32, + "Ala ma kota", + None::, + MaybeUnset::Unset::, + ); + let ctx = RowSerializationContext { + columns: &[ + col_spec("a", ColumnType::Int), + col_spec("b", ColumnType::Text), + col_spec("c", ColumnType::BigInt), + col_spec("d", ColumnType::Ascii), + ], + }; + + let mut typed_data = Vec::new(); + let mut typed_data_writer = RowWriter::new(&mut typed_data); + <_ as SerializeRow>::serialize(&row, &ctx, &mut typed_data_writer).unwrap(); + + let row = &row as &dyn SerializeRow; + let mut erased_data = Vec::new(); + let mut erased_data_writer = RowWriter::new(&mut erased_data); + <_ as SerializeRow>::serialize(&row, &ctx, &mut erased_data_writer).unwrap(); + + assert_eq!( + typed_data_writer.value_count(), + erased_data_writer.value_count(), + ); + assert_eq!(typed_data, erased_data); + } } diff --git a/scylla-cql/src/types/serialize/value.rs b/scylla-cql/src/types/serialize/value.rs index 4359eee497..37244f7073 100644 --- a/scylla-cql/src/types/serialize/value.rs +++ b/scylla-cql/src/types/serialize/value.rs @@ -1392,4 +1392,19 @@ mod tests { check_compat(None::); check_compat(MaybeUnset::Unset::); } + + #[test] + fn test_dyn_serialize_cql() { + let v: i32 = 123; + let mut typed_data = Vec::new(); + let typed_data_writer = CellWriter::new(&mut typed_data); + <_ as SerializeCql>::serialize(&v, &ColumnType::Int, typed_data_writer).unwrap(); + + let v = &v as &dyn SerializeCql; + let mut erased_data = Vec::new(); + let erased_data_writer = CellWriter::new(&mut erased_data); + <_ as SerializeCql>::serialize(&v, &ColumnType::Int, erased_data_writer).unwrap(); + + assert_eq!(typed_data, erased_data); + } }