Skip to content

Commit

Permalink
tests/newtype: expand to dyn, Rc, Arc
Browse files Browse the repository at this point in the history
  • Loading branch information
dhardy committed Nov 16, 2022
1 parent 59d2f6a commit 2951dc3
Showing 1 changed file with 56 additions and 14 deletions.
70 changes: 56 additions & 14 deletions tests/newtype.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
//! Test implementing traits over newtype wrappers

use impl_tools::autoimpl;
use std::rc::Rc;
use std::sync::Arc;

#[autoimpl(for<T: trait> &T, &mut T, Box<T>)]
trait Foo {
Expand All @@ -14,23 +16,63 @@ impl Foo for S {
}
}

#[autoimpl(Deref, DerefMut using self.0)]
struct NewFoo<T: Foo>(T);
#[test]
fn direct() {
assert!(S.success());
}

#[autoimpl(Deref, DerefMut using self.0)]
struct FooRef<'a>(&'a dyn Foo);
#[test]
fn new_foo() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType<T: Foo>(T);

#[autoimpl(Deref, DerefMut using self.0)]
struct FooRefMut<'a>(&'a mut dyn Foo);
assert!(NewType(S).success());
}

#[autoimpl(Deref, DerefMut using self.0)]
struct BoxFoo<T: Foo>(Box<T>);
#[test]
fn new_foo_ref() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType<'a>(&'a dyn Foo);

assert!(NewType(&S).success());
}

#[test]
fn foo() {
assert!(S.success());
assert!(NewFoo(S).success());
assert!(FooRef(&S).success());
assert!(FooRefMut(&mut S).success());
assert!(BoxFoo(Box::new(S)).success());
fn new_foo_ref_mut() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType<'a>(&'a mut dyn Foo);

assert!(NewType(&mut S).success());
}

#[test]
fn new_foo_box() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType<T: Foo>(Box<T>);

assert!(NewType(Box::new(S)).success());
}

#[test]
fn new_foo_box_dyn() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType(Box<dyn Foo>);

assert!(NewType(Box::new(S)).success());
}

#[test]
fn new_foo_rc_dyn() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType(Rc<dyn Foo>);

assert!(NewType(Rc::new(S)).success());
}

#[test]
fn new_foo_arc_dyn() {
#[autoimpl(Deref, DerefMut using self.0)]
struct NewType(Arc<dyn Foo + Send + Sync>);

assert!(NewType(Arc::new(S)).success());
}

0 comments on commit 2951dc3

Please sign in to comment.