usesuper::*; use core::time::Duration; use serde_with::{
DurationMicroSeconds, DurationMicroSecondsWithFrac, DurationMilliSeconds,
DurationMilliSecondsWithFrac, DurationNanoSeconds, DurationNanoSecondsWithFrac,
DurationSeconds, DurationSecondsWithFrac, TimestampMicroSeconds, TimestampMicroSecondsWithFrac,
TimestampMilliSeconds, TimestampMilliSecondsWithFrac, TimestampNanoSeconds,
TimestampNanoSecondsWithFrac, TimestampSeconds, TimestampSecondsWithFrac,
}; use std::time::SystemTime;
#[test] fn test_duration_seconds() { let zero = Duration::new(0, 0); let one_second = Duration::new(1, 0); let half_second = Duration::new(0, 500_000_000);
is_equal(IntFlexible(zero), expect![[r#"0"#]]);
is_equal(IntFlexible(one_second), expect![[r#"1"#]]);
check_serialization(IntFlexible(half_second), expect![[r#"1"#]]);
check_deserialization(IntFlexible(half_second), r#""0.5""#);
check_deserialization(IntFlexible(one_second), r#""1""#);
check_deserialization(IntFlexible(zero), r#""0""#);
check_error_deserialization::<IntFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
check_error_deserialization::<IntFlexible>(
r#"-1"#,
expect![[r#"std::time::Duration cannot be negative"#]],
);
is_equal(F64Flexible(zero), expect![[r#"0.0"#]]);
is_equal(F64Flexible(one_second), expect![[r#"1.0"#]]);
check_serialization(F64Flexible(half_second), expect![[r#"1.0"#]]);
check_deserialization(F64Flexible(half_second), r#""0.5""#);
check_deserialization(F64Flexible(one_second), r#""1""#);
check_deserialization(F64Flexible(zero), r#""0""#);
check_error_deserialization::<F64Flexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
check_error_deserialization::<F64Flexible>(
r#"-1"#,
expect![[r#"std::time::Duration cannot be negative"#]],
);
is_equal(StringStrict(zero), expect![[r#""0""#]]);
is_equal(StringStrict(one_second), expect![[r#""1""#]]);
check_serialization(StringStrict(half_second), expect![[r#""1""#]]);
check_error_deserialization::<StringStrict>(
r#"1"#,
expect![[
r#"invalid type: integer `1`, expected a string containing a number at line 1 column 1"#
]],
);
check_error_deserialization::<StringStrict>(
r#"-1"#,
expect![[
r#"invalid type: integer `-1`, expected a string containing a number at line 1 column 2"#
]],
);
is_equal(StringFlexible(zero), expect![[r#""0""#]]);
is_equal(StringFlexible(one_second), expect![[r#""1""#]]);
check_serialization(StringFlexible(half_second), expect![[r#""1""#]]);
check_deserialization(StringFlexible(half_second), r#""0.5""#);
check_deserialization(StringFlexible(one_second), r#""1""#);
check_deserialization(StringFlexible(zero), r#""0""#);
check_error_deserialization::<StringFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
check_error_deserialization::<StringFlexible>(
r#"-1"#,
expect![[r#"std::time::Duration cannot be negative"#]],
);
}
#[test] fn test_duration_seconds_with_frac() { let zero = Duration::new(0, 0); let one_second = Duration::new(1, 0); let half_second = Duration::new(0, 500_000_000);
is_equal(F64Flexible(zero), expect![[r#"0.0"#]]);
is_equal(F64Flexible(one_second), expect![[r#"1.0"#]]);
is_equal(F64Flexible(half_second), expect![[r#"0.5"#]]);
check_deserialization(F64Flexible(one_second), r#""1""#);
check_deserialization(F64Flexible(zero), r#""0""#);
check_error_deserialization::<F64Flexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
check_error_deserialization::<F64Flexible>(
r#"-1"#,
expect![[r#"std::time::Duration cannot be negative"#]],
);
is_equal(StringFlexible(zero), expect![[r#""0""#]]);
is_equal(StringFlexible(one_second), expect![[r#""1""#]]);
is_equal(StringFlexible(half_second), expect![[r#""0.5""#]]);
check_deserialization(StringFlexible(zero), r#""0""#);
check_error_deserialization::<StringFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
check_error_deserialization::<StringFlexible>(
r#"-1"#,
expect![[r#"std::time::Duration cannot be negative"#]],
);
}
#[test] fn test_timestamp_seconds_systemtime() { let zero = SystemTime::UNIX_EPOCH; let one_second = SystemTime::UNIX_EPOCH
.checked_add(Duration::new(1, 0))
.unwrap(); let half_second = SystemTime::UNIX_EPOCH
.checked_add(Duration::new(0, 500_000_000))
.unwrap(); let minus_one_second = SystemTime::UNIX_EPOCH
.checked_sub(Duration::new(1, 0))
.unwrap(); let minus_half_second = SystemTime::UNIX_EPOCH
.checked_sub(Duration::new(0, 500_000_000))
.unwrap();
is_equal(StructStringStrict(zero), expect![[r#""0""#]]);
is_equal(StructStringStrict(one_second), expect![[r#""1""#]]);
is_equal(StructStringStrict(minus_one_second), expect![[r#""-1""#]]);
check_serialization(StructStringStrict(half_second), expect![[r#""1""#]]);
check_serialization(StructStringStrict(minus_half_second), expect![[r#""-1""#]]);
check_deserialization(StructStringStrict(one_second), r#""1""#);
check_error_deserialization::<StructStringStrict>(
r#""0.5""#,
expect![[r#"invalid digit found in string at line 1 column 5"#]],
);
check_error_deserialization::<StructStringStrict>(
r#""-0.5""#,
expect![[r#"invalid digit found in string at line 1 column 6"#]],
);
check_error_deserialization::<StructStringStrict>(
r#"1"#,
expect![[
r#"invalid type: integer `1`, expected a string containing a number at line 1 column 1"#
]],
);
check_error_deserialization::<StructStringStrict>(
r#"0.0"#,
expect![[
r#"invalid type: floating point `0`, expected a string containing a number at line 1 column 3"#
]],
);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.