@@ -57,3 +57,63 @@ impl<B: ?Sized> From<Arc<B>> for Ref<'static, B> {
57
57
Self :: Arc ( b)
58
58
}
59
59
}
60
+
61
+ #[ cfg( test) ]
62
+ mod tests {
63
+ use std:: { fmt:: Display , sync:: Arc } ;
64
+
65
+ use super :: * ;
66
+
67
+ #[ derive( Debug , PartialEq , Eq , Copy , Clone ) ]
68
+ struct TestData ;
69
+
70
+ impl Display for TestData {
71
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
72
+ f. write_str ( "TestData" )
73
+ }
74
+ }
75
+
76
+ #[ test]
77
+ fn test_borrowed_ref ( ) {
78
+ let data = TestData ;
79
+ let borrowed_ref: Ref < ' _ , TestData > = ( & data) . into ( ) ;
80
+ assert_eq ! ( * borrowed_ref, data) ;
81
+ }
82
+
83
+ #[ test]
84
+ fn test_arc_ref ( ) {
85
+ let data = TestData ;
86
+ let arc_ref: Ref < ' static , TestData > = Arc :: new ( data) . into ( ) ;
87
+ assert_eq ! ( * arc_ref, data) ;
88
+ }
89
+
90
+ #[ test]
91
+ fn test_display_trait ( ) {
92
+ let data = TestData ;
93
+ let borrowed_ref: Ref < ' _ , TestData > = ( & data) . into ( ) ;
94
+ assert_eq ! ( format!( "{}" , borrowed_ref) , format!( "{}" , data) ) ;
95
+ }
96
+
97
+ #[ test]
98
+ fn test_clone_trait ( ) {
99
+ let data = TestData ;
100
+ let borrowed_ref: Ref < ' _ , TestData > = ( & data) . into ( ) ;
101
+ let cloned_ref = borrowed_ref. clone ( ) ;
102
+ assert_eq ! ( cloned_ref, borrowed_ref) ;
103
+ }
104
+
105
+ #[ test]
106
+ fn test_deref_trait ( ) {
107
+ let data = TestData ;
108
+ let borrowed_ref: Ref < ' _ , TestData > = ( & data) . into ( ) ;
109
+ assert_eq ! ( * borrowed_ref, data) ;
110
+ }
111
+
112
+ #[ test]
113
+ fn test_borrow_trait ( ) {
114
+ let data = TestData ;
115
+ let borrowed_ref: Ref < ' _ , TestData > = ( & data) . into ( ) ;
116
+ let borrowed: & TestData = borrowed_ref. borrow ( ) ;
117
+ assert_eq ! ( borrowed, & data) ;
118
+ }
119
+ }
0 commit comments