Skip to content

Commit

Permalink
test: improve line coverage of convert.rs
Browse files Browse the repository at this point in the history
  • Loading branch information
ChobobDev committed Nov 26, 2022
1 parent f285763 commit 1a296e3
Showing 1 changed file with 208 additions and 7 deletions.
215 changes: 208 additions & 7 deletions core/src/data/value/convert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ macro_rules! try_from_owned_value {
)*}
}

try_from_owned_value!(bool, i8, i16, i32, i64, i128, f64, u8, u16, u128, usize, Decimal);
try_from_owned_value!(bool, i8, i16, i32, i64, i128, f64, u8, u16,u32,u64, u128, usize, Decimal);

impl TryFrom<&Value> for NaiveDate {
type Error = Error;
Expand Down Expand Up @@ -782,6 +782,9 @@ mod tests {
test!(Value::I128(1234567890), "1234567890");
test!(Value::U8(122), "122");
test!(Value::U16(122), "122");
test!(Value::U32(122), "122");
test!(Value::U64(122), "122");
test!(Value::U128(122), "122");
test!(Value::F64(1234567890.0987), "1234567890.0987");
test!(Value::Date(date(2021, 11, 20)), "2021-11-20");
test!(
Expand Down Expand Up @@ -825,6 +828,12 @@ mod tests {
test!(Value::U8(2), Err(ValueError::ImpossibleCast.into()));
test!(Value::U16(1), Ok(true));
test!(Value::U16(0), Ok(false));
test!(Value::U32(1), Ok(true));
test!(Value::U32(0), Ok(false));
test!(Value::U64(1), Ok(true));
test!(Value::U64(0), Ok(false));
test!(Value::U128(1), Ok(true));
test!(Value::U128(0), Ok(false));
test!(Value::U16(2), Err(ValueError::ImpossibleCast.into()));
test!(Value::F64(1.0), Ok(true));
test!(Value::F64(0.0), Ok(false));
Expand Down Expand Up @@ -892,6 +901,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.9), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
Expand Down Expand Up @@ -933,6 +945,9 @@ mod tests {
test!(Value::I128(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::U8(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::U16(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::U32(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::U64(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::U128(128), Err(ValueError::ImpossibleCast.into()));
test!(Value::F64(128.0), Err(ValueError::ImpossibleCast.into()));
}

Expand All @@ -954,6 +969,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.1), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
Expand Down Expand Up @@ -1007,6 +1025,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::I64(1234567890), Ok(1234567890));
test!(Value::F64(1234567890.0), Ok(1234567890));
test!(Value::F64(1234567890.1), Ok(1234567890));
Expand Down Expand Up @@ -1061,6 +1082,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::I64(1234567890), Ok(1234567890));
test!(Value::F64(1234567890.0), Ok(1234567890));
test!(Value::F64(1234567890.1), Ok(1234567890));
Expand Down Expand Up @@ -1115,6 +1139,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::I64(1234567890), Ok(1234567890));
test!(Value::F64(1234567890.0), Ok(1234567890));
test!(Value::F64(1234567890.9), Ok(1234567890));
Expand Down Expand Up @@ -1169,6 +1196,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.9), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
Expand Down Expand Up @@ -1234,6 +1264,9 @@ mod tests {
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.1), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
Expand Down Expand Up @@ -1269,6 +1302,177 @@ mod tests {
test!(Value::Null, Err(ValueError::ImpossibleCast.into()));
}

#[test]
fn try_into_u32() {
macro_rules! test {
($from: expr, $to: expr) => {
assert_eq!($from.try_into() as Result<u32>, $to);
assert_eq!(u32::try_from($from), $to);
};
}

test!(Value::Bool(true), Ok(1));
test!(Value::Bool(false), Ok(0));
test!(Value::I8(122), Ok(122));
test!(Value::I16(122), Ok(122));
test!(Value::I32(122), Ok(122));
test!(Value::I64(122), Ok(122));
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.1), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
test!(Value::Decimal(Decimal::new(122, 0)), Ok(122));
test!(
Value::Date(date(2021, 11, 20)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Timestamp(timestamp(2021, 11, 20, 10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Time(time(10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Interval(I::Month(1)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Uuid(195965723427462096757863453463987888808),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Map(HashMap::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::List(Vec::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(Value::Null, Err(ValueError::ImpossibleCast.into()));
}

#[test]
fn try_into_u64() {
macro_rules! test {
($from: expr, $to: expr) => {
assert_eq!($from.try_into() as Result<u64>, $to);
assert_eq!(u64::try_from($from), $to);
};
}

test!(Value::Bool(true), Ok(1));
test!(Value::Bool(false), Ok(0));
test!(Value::I8(122), Ok(122));
test!(Value::I16(122), Ok(122));
test!(Value::I32(122), Ok(122));
test!(Value::I64(122), Ok(122));
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.1), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
test!(Value::Decimal(Decimal::new(122, 0)), Ok(122));
test!(
Value::Date(date(2021, 11, 20)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Timestamp(timestamp(2021, 11, 20, 10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Time(time(10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Interval(I::Month(1)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Uuid(195965723427462096757863453463987888808),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Map(HashMap::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::List(Vec::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(Value::Null, Err(ValueError::ImpossibleCast.into()));
}

#[test]
fn try_into_u128() {
macro_rules! test {
($from: expr, $to: expr) => {
assert_eq!($from.try_into() as Result<u128>, $to);
assert_eq!(u128::try_from($from), $to);
};
}

test!(Value::Bool(true), Ok(1));
test!(Value::Bool(false), Ok(0));
test!(Value::I8(122), Ok(122));
test!(Value::I16(122), Ok(122));
test!(Value::I32(122), Ok(122));
test!(Value::I64(122), Ok(122));
test!(Value::I128(122), Ok(122));
test!(Value::U8(122), Ok(122));
test!(Value::U16(122), Ok(122));
test!(Value::U32(122), Ok(122));
test!(Value::U64(122), Ok(122));
test!(Value::U128(122), Ok(122));
test!(Value::F64(122.0), Ok(122));
test!(Value::F64(122.1), Ok(122));
test!(Value::Str("122".to_owned()), Ok(122));
test!(Value::Decimal(Decimal::new(122, 0)), Ok(122));
test!(
Value::Date(date(2021, 11, 20)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Timestamp(timestamp(2021, 11, 20, 10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Time(time(10, 0, 0, 0)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Interval(I::Month(1)),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Uuid(195965723427462096757863453463987888808),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::Map(HashMap::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(
Value::List(Vec::new()),
Err(ValueError::ImpossibleCast.into())
);
test!(Value::Null, Err(ValueError::ImpossibleCast.into()));
let uuid = 195965723427462096757863453463987888808;
assert_eq!((&Value::Uuid(uuid)).try_into() as Result<u128>, Ok(uuid));
assert_eq!(u128::try_from(&Value::Uuid(uuid)), Ok(uuid));
}

#[test]
fn try_into_f64() {
macro_rules! test {
Expand All @@ -1287,6 +1491,9 @@ mod tests {
test!(Value::I128(122), Ok(122.0));
test!(Value::U8(122), Ok(122.0));
test!(Value::U16(122), Ok(122.0));
test!(Value::U32(122), Ok(122.0));
test!(Value::U64(122), Ok(122.0));
test!(Value::U128(122), Ok(122.0));
test!(Value::I64(1234567890), Ok(1234567890.0));
test!(Value::F64(1234567890.1), Ok(1234567890.1));
test!(Value::Str("1234567890.1".to_owned()), Ok(1234567890.1));
Expand Down Expand Up @@ -1445,10 +1652,4 @@ mod tests {
);
}

#[test]
fn try_into_u128() {
let uuid = 195965723427462096757863453463987888808;
assert_eq!((&Value::Uuid(uuid)).try_into() as Result<u128>, Ok(uuid));
assert_eq!(u128::try_from(&Value::Uuid(uuid)), Ok(uuid));
}
}

0 comments on commit 1a296e3

Please sign in to comment.