summaryrefslogtreecommitdiffstats
path: root/vendor/derivative/tests/derive-default-bounds.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/derivative/tests/derive-default-bounds.rs')
-rwxr-xr-xvendor/derivative/tests/derive-default-bounds.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/derivative/tests/derive-default-bounds.rs b/vendor/derivative/tests/derive-default-bounds.rs
new file mode 100755
index 000000000..fda2efc98
--- /dev/null
+++ b/vendor/derivative/tests/derive-default-bounds.rs
@@ -0,0 +1,42 @@
+#[cfg(feature = "use_core")]
+extern crate core;
+
+#[macro_use]
+extern crate derivative;
+
+#[derive(Debug, Derivative, PartialEq)]
+#[derivative(Default="new")]
+struct Foo<T, U> {
+ foo: T,
+ #[derivative(Default(value="min()", bound="U: std::ops::Not<Output=U>, U: Default"))]
+ bar: U,
+}
+
+#[derive(Debug, Derivative, PartialEq)]
+#[derivative(Default(bound="T: Default, U: std::ops::Not<Output=U>, U: Default", new="true"))]
+struct Bar<T, U> {
+ foo: T,
+ #[derivative(Default(value="min()"))]
+ bar: U,
+}
+
+fn min<T: Default + std::ops::Not<Output=T>>() -> T {
+ !T::default()
+}
+
+#[derive(Debug, Derivative, PartialEq)]
+#[derivative(Default(bound=""))]
+struct WithOption<T> {
+ foo: Option<T>,
+}
+
+struct NonDefault;
+
+#[test]
+fn main() {
+ assert_eq!(Foo::default(), Foo { foo: 0u8, bar: 0xffu8 });
+ assert_eq!(Bar::default(), Bar { foo: 0u8, bar: 0xffu8 });
+ assert_eq!(Foo::new(), Foo { foo: 0u8, bar: 0xffu8 });
+ assert_eq!(Bar::new(), Bar { foo: 0u8, bar: 0xffu8 });
+ WithOption::<NonDefault>::default();
+}