Add tests for new sled impls needed for debug format
This commit is contained in:
parent
c1de002f58
commit
c9bf7f4cf6
|
|
@ -330,7 +330,6 @@ impl SledDeserialize for sled::Tree {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use proptest::{arbitrary::any, prelude::*};
|
use proptest::{arbitrary::any, prelude::*};
|
||||||
use std::ops::Deref;
|
|
||||||
|
|
||||||
impl Arbitrary for TransactionLocation {
|
impl Arbitrary for TransactionLocation {
|
||||||
type Parameters = ();
|
type Parameters = ();
|
||||||
|
|
@ -352,9 +351,6 @@ mod tests {
|
||||||
T::from_ivec(bytes)
|
T::from_ivec(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The round trip test covers types that are used as value field in a sled
|
|
||||||
/// Tree. Only these types are ever deserialized, and so they're the only
|
|
||||||
/// ones that implement both `IntoSled` and `FromSled`.
|
|
||||||
fn assert_round_trip<T>(input: T)
|
fn assert_round_trip<T>(input: T)
|
||||||
where
|
where
|
||||||
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
|
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
|
||||||
|
|
@ -364,6 +360,52 @@ mod tests {
|
||||||
assert_eq!(before, after);
|
assert_eq!(before, after);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn round_trip_ref<T>(input: &T) -> T
|
||||||
|
where
|
||||||
|
T: IntoSled + FromSled,
|
||||||
|
{
|
||||||
|
let bytes = input.into_ivec();
|
||||||
|
T::from_ivec(bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn assert_round_trip_ref<T>(input: &T)
|
||||||
|
where
|
||||||
|
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
|
||||||
|
{
|
||||||
|
let before = input;
|
||||||
|
let after = round_trip_ref(input);
|
||||||
|
assert_eq!(before, &after);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn round_trip_arc<T>(input: Arc<T>) -> T
|
||||||
|
where
|
||||||
|
T: IntoSled + FromSled,
|
||||||
|
{
|
||||||
|
let bytes = input.into_ivec();
|
||||||
|
T::from_ivec(bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn assert_round_trip_arc<T>(input: Arc<T>)
|
||||||
|
where
|
||||||
|
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
|
||||||
|
{
|
||||||
|
let before = input.clone();
|
||||||
|
let after = round_trip_arc(input);
|
||||||
|
assert_eq!(*before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The round trip test covers types that are used as value field in a sled
|
||||||
|
/// Tree. Only these types are ever deserialized, and so they're the only
|
||||||
|
/// ones that implement both `IntoSled` and `FromSled`.
|
||||||
|
fn assert_value_properties<T>(input: T)
|
||||||
|
where
|
||||||
|
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
|
||||||
|
{
|
||||||
|
assert_round_trip_ref(&input);
|
||||||
|
assert_round_trip_arc(Arc::new(input.clone()));
|
||||||
|
assert_round_trip(input);
|
||||||
|
}
|
||||||
|
|
||||||
/// This test asserts that types that are used as sled keys behave correctly.
|
/// This test asserts that types that are used as sled keys behave correctly.
|
||||||
/// Any type that implements `IntoIVec` can be used as a sled key. The value
|
/// Any type that implements `IntoIVec` can be used as a sled key. The value
|
||||||
/// is serialized via `IntoSled::into_ivec` when the `key`, `value` pair is
|
/// is serialized via `IntoSled::into_ivec` when the `key`, `value` pair is
|
||||||
|
|
@ -382,41 +424,33 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn roundtrip_transaction_location() {
|
fn roundtrip_transaction_location() {
|
||||||
zebra_test::init();
|
zebra_test::init();
|
||||||
proptest!(|(val in any::<TransactionLocation>())| assert_round_trip(val));
|
proptest!(|(val in any::<TransactionLocation>())| assert_value_properties(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn roundtrip_block_hash() {
|
fn roundtrip_block_hash() {
|
||||||
zebra_test::init();
|
zebra_test::init();
|
||||||
proptest!(|(val in any::<block::Hash>())| assert_round_trip(val));
|
proptest!(|(val in any::<block::Hash>())| assert_value_properties(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn roundtrip_block_height() {
|
fn roundtrip_block_height() {
|
||||||
zebra_test::init();
|
zebra_test::init();
|
||||||
proptest!(|(val in any::<block::Height>())| assert_round_trip(val));
|
proptest!(|(val in any::<block::Height>())| assert_value_properties(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn roundtrip_block() {
|
fn roundtrip_block() {
|
||||||
zebra_test::init();
|
zebra_test::init();
|
||||||
|
|
||||||
proptest!(|(block in any::<Block>())| {
|
proptest!(|(val in any::<Block>())| assert_value_properties(val));
|
||||||
let bytes = block.into_ivec();
|
|
||||||
let deserialized: Arc<Block> = FromSled::from_ivec(bytes);
|
|
||||||
assert_eq!(&block, deserialized.deref());
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn roundtrip_transparent_output() {
|
fn roundtrip_transparent_output() {
|
||||||
zebra_test::init();
|
zebra_test::init();
|
||||||
|
|
||||||
proptest!(|(output in any::<transparent::Output>())| {
|
proptest!(|(val in any::<transparent::Output>())| assert_value_properties(val));
|
||||||
let bytes = output.into_ivec();
|
|
||||||
let deserialized: transparent::Output = FromSled::from_ivec(bytes);
|
|
||||||
assert_eq!(output, deserialized);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue