public void TestUnwrapAll()
        {
            var wrappedValue = new TrackValue <int>(10).ToMaybe().ToM();
            var result       = wrappedValue.UnwrapAll <int>();

            Assert.AreEqual(10, result);
        }
        public void TrackValue_InitDispatcher_InitiateDispatcher()
        {
            var dispatcher = new TrackDispatcher(new OffsetTokenDispatcher());
            var value      = new TrackValue <int>(dispatcher);

            Assert.AreEqual(value.TrackDispatcher, dispatcher);
        }
        public void TrackValue_InitValueAndDispatcher_InitiateDispatcher(int value)
        {
            var dispatcher = new TrackDispatcher(new OffsetTokenDispatcher());
            var trackTalue = new TrackValue <int>(value, dispatcher);

            Assert.AreEqual(trackTalue.TrackDispatcher, dispatcher);
        }
        public void Add(string key, TValue value)
        {
            Adjust(key);
            var result = new TrackValue(this, value);

            cache.AddOrUpdate(key, result, (k, o) => result);
        }
        public void PropertyValue_SetValue_InitiateValue(int value)
        {
            var trackValue = new TrackValue <int>();

            trackValue.Value = value;
            Assert.AreEqual(trackValue.Value, value);
        }
        public void TestApplyChanges()
        {
            var value = new TrackValue <int>(10);

            value = value.With(v => v * 2);

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(20, value.Value);
        }
        public void TestApplyChanges_UseEquitable()
        {
            var dt    = DateTime.Now;
            var value = new TrackValue <DateTime>(dt, ValueTrackerTypes.Equality);

            value = value.With(v => v.AddDays(1));

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(dt.AddDays(1), value.Value);
        }
        public void TestWithoutChanges_UseEquitable()
        {
            var dt    = DateTime.Now;
            var value = new TrackValue <DateTime>(dt, ValueTrackerTypes.Equality);

            value = value.With(v => v);

            Assert.False(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(dt, value.Value);
        }
        public void TestWithoutChanges_UseDefault()
        {
            var dt    = DateTime.Now;
            var value = new TrackValue <DateTime>(dt);

            value = value.With(v => v);

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(dt, value.Value);
        }
Beispiel #10
0
        public override void Set(CacheKey key, object value, CachePolicy cachePolicy)
        {
            var strKey = key.Key;

            Adjust(strKey);
            var expireTime = ComputeExpireTime(cachePolicy);
            var result     = new TrackValue(this, value, expireTime);

            cache.AddOrUpdate(strKey, result, (k, o) => result);

            ManageCacheDependencies(key);
        }
        public void TestApplyChanges_CustomRefType_UseEquitable()
        {
            var customValue = new SampleClass {
                IntValue = 10
            };
            var value = new TrackValue <SampleClass>(customValue, ValueTrackerTypes.Equality);

            value = value.With(v => v.UpdateIntValue(v.IntValue * 2));

            Assert.False(value.HasChanges, "value.HasChanges");
            Assert.AreSame(customValue, value.Value);
            Assert.AreEqual(20, value.Value.IntValue);
        }
        public void TestWithoutChanges_CustomValueType_UseDefault()
        {
            var customValue = new SampleStructure()
            {
                IntValue = 10
            };
            var value = new TrackValue <SampleStructure>(customValue);

            value = value.With(v => v);

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(customValue.IntValue, value.Value.IntValue);
        }
        public void TestApplyChanges_CustomValueType_UseEquitable()
        {
            var customValue = new SampleStructure {
                IntValue = 10
            };
            var value = new TrackValue <SampleStructure>(customValue, ValueTrackerTypes.Equality);

            value = value.With(v => new SampleStructure {
                IntValue = v.IntValue * 2
            });

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(20, value.Value.IntValue);
        }
        public void TestWithoutChanges_CustomRefType_UseEquitable()
        {
            var customValue = new SampleClass {
                IntValue = 10
            };
            var value = new TrackValue <SampleClass>(customValue, ValueTrackerTypes.Equality);

            value = value.With(v => new SampleClass {
                IntValue = v.IntValue
            });

            Assert.True(value.HasChanges, "value.HasChanges");
            Assert.AreNotSame(customValue, value.Value);
            Assert.AreEqual(customValue.IntValue, value.Value.IntValue);
        }
Beispiel #15
0
 public TValue Get(string key)
 {
     try
     {
         TrackValue value = null;
         if (cache.TryGetValue(key, out value))
         {
             value.Age = Interlocked.Increment(ref currentAge);
         }
         return(value.Value);
     }
     catch (Exception ex)
     {
         return(default(TValue));
     }
 }
Beispiel #16
0
        public void Offset_RollBackStart_BaseValue()
        {
            const int BASE_VALUE   = 0;
            const int CHANGE_VALUE = 1;

            var offsetTokenDispatcher = new OffsetTokenDispatcher();
            var offsetToken           = offsetTokenDispatcher.CurrentToken;
            var dispatcher            = new TrackDispatcher(offsetTokenDispatcher);

            var trackValue = new TrackValue <int>(BASE_VALUE, dispatcher);

            trackValue.Value = CHANGE_VALUE;

            dispatcher.Offset(offsetToken);

            Assert.AreEqual(trackValue.Value, BASE_VALUE);
        }
        public void TestApplyChanges_Inline_CustomRefType_UseEquitable()
        {
            var customValue = new SampleClass()
            {
                IntValue = 10
            };
            var value = new TrackValue <SampleClass>(customValue, ValueTrackerTypes.Equality);

            value = value.With(v =>
            {
                v.IntValue *= 2;
                return(v);
            });

            Assert.False(value.HasChanges, "value.HasChanges");
            Assert.AreEqual(20, value.Value.IntValue);
        }
Beispiel #18
0
        /// <summary>
        /// 檢查緩存項吃否已到過期時間,如果到了過期時間則移除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        private Tuple <TrackValue, bool> CheckExpire(string key)
        {
            TrackValue result     = default(TrackValue);
            var        expireVlue = Tuple.Create(result, false);
            var        tupleValue = expireVlue;

            if (cache.TryGetValue(key, out result))
            {
                var age = DateTimeOffset.Now.Subtract(result.CreateTime);
                if (age >= maxExpireTime || age >= result.ExpireTime)
                {
                    TrackValue old;
                    cache.TryRemove(key, out old);
                }
                else
                {
                    tupleValue = Tuple.Create(result, true);
                }
            }

            return(tupleValue);
        }
        public void TestWithoutChanges()
        {
            var value = new TrackValue <int>(10);

            Assert.False(value.HasChanges, "value.HasChanges");
        }
        public void TrackValue_InitValue_DefaultDispatcher(int value)
        {
            var trackTalue = new TrackValue <int>(value);

            Assert.AreEqual(trackTalue.TrackDispatcher, TrackDispatcher.Default);
        }
        public void TrackValue_InitValue_InitiateValue(int value)
        {
            var trackTalue = new TrackValue <int>(value);

            Assert.AreEqual(trackTalue.Value, value);
        }
        public void TrackValue_Default_DefaultDispatcher()
        {
            var value = new TrackValue <int>();

            Assert.AreEqual(value.TrackDispatcher, TrackDispatcher.Default);
        }
 public static TrackValue <T> With <T>(this TrackValue <T> value, Func <T, T> func) => value == null
     ? null
     : new TrackValue <T>(value.Value, func(value), value.ValueTracker, true);