public void ParameterizedScopeAssignment() { var count = 0; var one = new object().Sourced(); var scope = new ParameterizedScope<int, int>( i => i * ++count ).ScopedWith( one ); Assert.Equal( 0, count ); Assert.Equal( 2, scope.Get( 2 ) ); Assert.Equal( 1, count ); Assert.Equal( 4, scope.Get( 2 ) ); Assert.Equal( 2, count ); Assert.Equal( 6, scope.Get( 2 ) ); Assert.Equal( 3, count ); var two = new object().Sourced(); scope.Assign( two ); scope.Assign( i => i * ++count * -1 ); count = 0; Assert.Equal( 0, count ); Assert.Equal( -2, scope.Get( 2 ) ); Assert.Equal( 1, count ); Assert.Equal( -4, scope.Get( 2 ) ); Assert.Equal( 2, count ); Assert.Equal( -6, scope.Get( 2 ) ); Assert.Equal( 3, count ); scope.Assign( one ); count = 0; Assert.Equal( 0, count ); Assert.Equal( 2, scope.Get( 2 ) ); Assert.Equal( 1, count ); Assert.Equal( 4, scope.Get( 2 ) ); Assert.Equal( 2, count ); Assert.Equal( 6, scope.Get( 2 ) ); Assert.Equal( 3, count ); }
public void ParameterizedScopeCache() { var count = 0; var one = new object().Sourced(); var scope = new ParameterizedScope<Type, int>( type => type.Name.Length * ++count ).ScopedWith( one ); var cache = scope.ToCache(); var first = typeof(int).Name.Length; Assert.Equal( first, cache.Get( typeof(int) ) ); Assert.Equal( 1, count ); Assert.Equal( first, cache.Get( typeof(int) ) ); Assert.Equal( 1, count ); var two = new object().Sourced(); scope.Assign( two ); scope.Assign( type => type.Name.Length + 5000 * ++count ); count = 0; var t = typeof(DateTimeOffset); var second = t.Name.Length + 5000; Assert.Equal( second, cache.Get( t ) ); Assert.Equal( 1, count ); Assert.Equal( second, cache.Get( t ) ); Assert.Equal( 1, count ); scope.Assign( one ); count = 10; Assert.Equal( first, cache.Get( typeof(int) ) ); Assert.Equal( 10, count ); Assert.Equal( first, cache.Get( typeof(int) ) ); Assert.Equal( 10, count ); var thirdType = typeof(StringAnimationUsingKeyFrames); var secondOne = thirdType.Name.Length * ( count + 1 ); Assert.Equal( secondOne, cache.Get( thirdType ) ); Assert.Equal( 11, count ); Assert.Equal( secondOne, cache.Get( thirdType ) ); Assert.Equal( 11, count ); Assert.Equal( second, cache.Get( t ) ); Assert.Equal( 11, count ); Assert.Equal( second, cache.Get( t ) ); Assert.Equal( 11, count ); }