public static int Main(string[] args)
return new AutoRun(Assembly.GetExecutingAssembly())
.Execute(new[] {"--nocolor"});
public interface ITimeStampProvider
public class TimeStampProvider : ITimeStampProvider
public DateTime TimeStamp()
computed = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
while (Interlocked.CompareExchange(ref last, computed, initial) != initial);
return new DateTime(computed * TimeSpan.TicksPerMillisecond);
public class TimeStampProviderTest
private ITimeStampProvider _timeStampProvider;
_timeStampProvider = new TimeStampProvider();
public void TimeStampProviderShouldReturnUniqueValuesTest()
var timeStamps = Enumerable
.Select(_ => _timeStampProvider.TimeStamp()).ToArray();
timeStamps.Should().OnlyHaveUniqueItems();
public void ConcurrentTimeStampProviderShouldReturnUniqueValuesTest()
var timeStamps = Enumerable
.Select(_ => _timeStampProvider.TimeStamp()).ToArray();
timeStamps.Should().OnlyHaveUniqueItems();
public void TimeStampProviderShouldReturnRoundedValuesTest()
var timeStamps = Enumerable
.Select(_ => _timeStampProvider.TimeStamp()).ToArray();
foreach (var timeStamp in timeStamps)
(timeStamp.Ticks % TimeSpan.TicksPerMillisecond).Should().Be(0);
public void TimeStampIntervalTest()
var ts1 = _timeStampProvider.TimeStamp();
var ts2 = _timeStampProvider.TimeStamp();
(ts2 - ts1).TotalMilliseconds.Should().BeGreaterThan(90);