#![allow( // clippy is broken and shows wrong warnings // clippy on stable does not know yet about the lint name
unknown_lints, // https://github.com/rust-lang/rust-clippy/issues/8867
clippy::derive_partial_eq_without_eq,
)]
externcrate alloc;
mod utils;
usecrate::utils::{
check_deserialization, check_error_deserialization, check_serialization, is_equal,
}; use alloc::collections::BTreeMap; use chrono_0_4::{DateTime, Duration, Local, NaiveDateTime, Utc}; use core::{iter::FromIterator, str::FromStr}; use expect_test::expect; use serde::{Deserialize, Serialize}; use serde_with::{
formats::Flexible, serde_as, DurationMicroSeconds, DurationMicroSecondsWithFrac,
DurationMilliSeconds, DurationMilliSecondsWithFrac, DurationNanoSeconds,
DurationNanoSecondsWithFrac, DurationSeconds, DurationSecondsWithFrac, TimestampMicroSeconds,
TimestampMicroSecondsWithFrac, TimestampMilliSeconds, TimestampMilliSecondsWithFrac,
TimestampNanoSeconds, TimestampNanoSecondsWithFrac, TimestampSeconds, TimestampSecondsWithFrac,
};
#[test] fn test_chrono_duration_seconds() { let zero = Duration::zero(); let one_second = Duration::seconds(1); let half_second = Duration::nanoseconds(500_000_000); let minus_one_second = zero - one_second; let minus_half_second = zero - half_second;
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_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#"-1"#,
expect![[
r#"invalid type: integer `-1`, expected a string containing a number at line 1 column 2"#
]],
);
is_equal(StructStringFlexible(zero), expect![[r#""0""#]]);
is_equal(StructStringFlexible(one_second), expect![[r#""1""#]]);
is_equal(StructStringFlexible(minus_one_second), expect![[r#""-1""#]]);
check_serialization(StructStringFlexible(half_second), expect![[r#""1""#]]);
check_deserialization(StructStringFlexible(half_second), r#""0.5""#);
check_deserialization(StructStringFlexible(one_second), r#""1""#);
check_deserialization(StructStringFlexible(zero), r#""0""#);
check_error_deserialization::<StructStringFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
}
#[test] fn test_chrono_duration_seconds_with_frac() { let zero = Duration::zero(); let one_second = Duration::seconds(1); let half_second = Duration::nanoseconds(500_000_000); let minus_one_second = zero - one_second; let minus_half_second = zero - half_second;
is_equal(StructStringFlexible(zero), expect![[r#""0""#]]);
is_equal(StructStringFlexible(one_second), expect![[r#""1""#]]);
is_equal(StructStringFlexible(minus_one_second), expect![[r#""-1""#]]);
is_equal(StructStringFlexible(half_second), expect![[r#""0.5""#]]);
is_equal(
StructStringFlexible(minus_half_second),
expect![[r#""-0.5""#]],
);
check_deserialization(StructStringFlexible(one_second), r#""1""#);
check_deserialization(StructStringFlexible(zero), r#""0""#);
check_error_deserialization::<StructStringFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
}
#[test] fn test_chrono_timestamp_seconds() { let zero = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(0, 0).unwrap(), Utc); let one_second = zero + Duration::seconds(1); let half_second = zero + Duration::nanoseconds(500_000_000); let minus_one_second = zero - Duration::seconds(1); let minus_half_second = zero - Duration::nanoseconds(500_000_000);
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"#
]],
);
is_equal(StructStringFlexible(zero), expect![[r#""0""#]]);
is_equal(StructStringFlexible(one_second), expect![[r#""1""#]]);
is_equal(StructStringFlexible(minus_one_second), expect![[r#""-1""#]]);
check_serialization(StructStringFlexible(half_second), expect![[r#""1""#]]);
check_serialization(
StructStringFlexible(minus_half_second),
expect![[r#""-1""#]],
);
check_deserialization(StructStringFlexible(one_second), r#"1"#);
check_deserialization(StructStringFlexible(one_second), r#"1.0"#);
check_deserialization(StructStringFlexible(minus_half_second), r#""-0.5""#);
check_deserialization(StructStringFlexible(half_second), r#"0.5"#);
check_error_deserialization::<StructStringFlexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
}
#[test] fn test_chrono_timestamp_seconds_with_frac() { let zero = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(0, 0).unwrap(), Utc); let one_second = zero + Duration::seconds(1); let half_second = zero + Duration::nanoseconds(500_000_000); let minus_one_second = zero - Duration::seconds(1); let minus_half_second = zero - Duration::nanoseconds(500_000_000);
is_equal(Structf64Flexible(zero), expect![[r#"0.0"#]]);
is_equal(Structf64Flexible(one_second), expect![[r#"1.0"#]]);
is_equal(Structf64Flexible(minus_one_second), expect![[r#"-1.0"#]]);
is_equal(Structf64Flexible(half_second), expect![[r#"0.5"#]]);
is_equal(Structf64Flexible(minus_half_second), expect![[r#"-0.5"#]]);
check_deserialization(Structf64Flexible(one_second), r#""1""#);
check_deserialization(Structf64Flexible(minus_half_second), r#""-0.5""#);
check_error_deserialization::<Structf64Flexible>(
r#""a""#,
expect![[
r#"invalid value: string "a", expected an integer, a float, or a string containing a number at line 1 column 3"#
]],
);
smoketest! {
Duration, "DurationSecondsWithFrac", zero, {expect![[r#"0.0"#]]};
Duration, "DurationSecondsWithFrac", zero + Duration::nanoseconds(500_000_000), {expect![[r#"0.5"#]]};
Duration, "DurationSecondsWithFrac", zero + Duration::seconds(1), {expect![[r#"1.0"#]]};
Duration, "DurationSecondsWithFrac", zero - Duration::nanoseconds(500_000_000), {expect![[r#"-0.5"#]]};
Duration, "DurationSecondsWithFrac", zero - Duration::seconds(1), {expect![[r#"-1.0"#]]};
};
}
#[test] fn test_datetime_utc_smoketest() { let zero = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(0, 0).unwrap(), Utc); let one_second = zero + Duration::seconds(1);
smoketest! {
DateTime<Utc>, "TimestampSecondsWithFrac", zero, {expect![[r#"0.0"#]]};
DateTime<Utc>, "TimestampSecondsWithFrac", zero + Duration::nanoseconds(500_000_000), {expect![[r#"0.5"#]]};
DateTime<Utc>, "TimestampSecondsWithFrac", zero + Duration::seconds(1), {expect![[r#"1.0"#]]};
DateTime<Utc>, "TimestampSecondsWithFrac", zero - Duration::nanoseconds(500_000_000), {expect![[r#"-0.5"#]]};
DateTime<Utc>, "TimestampSecondsWithFrac", zero - Duration::seconds(1), {expect![[r#"-1.0"#]]};
};
}
#[test] fn test_datetime_local_smoketest() { let zero = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(0, 0).unwrap(), Utc)
.with_timezone(&Local); let one_second = zero + Duration::seconds(1);
smoketest! {
DateTime<Local>, "TimestampSecondsWithFrac", zero, {expect![[r#"0.0"#]]};
DateTime<Local>, "TimestampSecondsWithFrac", zero + Duration::nanoseconds(500_000_000), {expect![[r#"0.5"#]]};
DateTime<Local>, "TimestampSecondsWithFrac", zero + Duration::seconds(1), {expect![[r#"1.0"#]]};
DateTime<Local>, "TimestampSecondsWithFrac", zero - Duration::nanoseconds(500_000_000), {expect![[r#"-0.5"#]]};
DateTime<Local>, "TimestampSecondsWithFrac", zero - Duration::seconds(1), {expect![[r#"-1.0"#]]};
};
}
#[test] fn test_naive_datetime_smoketest() { let zero = NaiveDateTime::from_timestamp_opt(0, 0).unwrap(); let one_second = zero + Duration::seconds(1);
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.