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); }
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); }
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)); } }
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); }
/// <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);