1+ namespace DotNext . Runtime ;
2+
3+ public sealed class BoxedValueTests : Assert
4+ {
5+ [ Fact ]
6+ public static void BoxUnbox ( )
7+ {
8+ var obj = ( BoxedValue < int > ) 42 ;
9+ Equal ( 42 . GetHashCode ( ) , obj . GetHashCode ( ) ) ;
10+ Equal ( 42 , obj . Value ) ;
11+ Equal ( 42 , obj ) ;
12+ Equal ( typeof ( int ) , obj . GetType ( ) ) ;
13+ }
14+
15+ [ Fact ]
16+ public static void Unwrap ( )
17+ {
18+ object obj = null ;
19+ Null ( BoxedValue < int > . GetTypedReference ( obj ) ) ;
20+
21+ obj = 42 ;
22+ Equal ( 42 , BoxedValue < int > . GetTypedReference ( obj ) ) ;
23+
24+ obj = string . Empty ;
25+ Throws < ArgumentException > ( ( ) => BoxedValue < int > . GetTypedReference ( obj ) ) ;
26+ }
27+
28+ [ Fact ]
29+ public static void ToUntypedReference ( )
30+ {
31+ ValueType obj = BoxedValue < int > . Box ( 42 ) ;
32+ Equal ( 42 , obj ) ;
33+ }
34+
35+ private struct MutableStruct
36+ {
37+ public int Value ;
38+ }
39+
40+ [ Fact ]
41+ public static void BitwiseCopyImmutable ( )
42+ {
43+ var boxed1 = ( BoxedValue < int > ) 42 ;
44+ var boxed2 = boxed1 . Copy ( ) ;
45+ NotSame ( boxed1 , boxed2 ) ;
46+ Equal ( 42 , boxed1 ) ;
47+ Equal ( 42 , boxed2 ) ;
48+ }
49+
50+ [ Fact ]
51+ public static void BitwiseCopyMutable ( )
52+ {
53+ var boxed1 = ( BoxedValue < MutableStruct > ) new MutableStruct ( ) ;
54+ var boxed2 = boxed1 . Copy ( ) ;
55+ NotSame ( boxed1 , boxed2 ) ;
56+
57+ boxed1 . Value . Value = 42 ;
58+ boxed2 . Value . Value = 43 ;
59+
60+ NotEqual ( boxed1 . Value . Value , boxed2 . Value . Value ) ;
61+ }
62+ }
0 commit comments