public void TestMethodAdd() { Random rnd = new Random(); for (int i = 0; i < 1000; i++) { var datetime = new DateTime(rnd.Next(1970, 2035), rnd.Next(1, 13), rnd.Next(1, 29), rnd.Next(0, 24), rnd.Next(0, 60), rnd.Next(0, 60), (DateTimeKind)rnd.Next(0, 3)); UnixTime32 u32 = datetime; for (int n = 0; n < 100; n++) { int seconds = (int)(rnd.NextDouble() * uint.MaxValue + int.MinValue); while (true) { long test = seconds; test += u32.TimeStamp; if (test > uint.MaxValue || test < 0) { //would overflow or underflow seconds /= 3; continue; } break; } switch (n % 2) { case 0: u32 += seconds; datetime = datetime.AddTicks(seconds * TimeSpan.TicksPerSecond); break; case 1: var ts = TimeSpan.FromSeconds(seconds); u32 += ts; datetime = datetime + ts; break; } Assert.AreEqual(datetime, (DateTime)u32); Assert.AreEqual(true, u32 == datetime); Assert.AreEqual(true, u32 == u32.TimeStamp); Assert.AreEqual(false, u32 != datetime); Assert.AreEqual(false, u32 != u32.TimeStamp); } } }
public void TestMethodParse() { Random rnd = new Random(); for (int i = 0; i < 1000; i++) { var datetime = new DateTime(rnd.Next(1970, 2035), rnd.Next(1, 13), rnd.Next(1, 29), rnd.Next(0, 24), rnd.Next(0, 60), rnd.Next(0, 60), (DateTimeKind)rnd.Next(0, 3)); var dts = datetime.ToString(Cave.UnixTime.UnixTime.InterOpDateTimeFormat); var u32 = (UnixTime32)datetime; var u32s = u32.ToString(); var u32b = UnixTime32.Parse(u32s); Assert.AreEqual(datetime, (DateTime)u32); Assert.AreEqual(datetime, (DateTime)u32b); Assert.AreEqual(dts, u32s); } }
public void TestMethodOverflow() { var datetime = DateTime.Now; UnixTime32 u32 = datetime; TimeSpan outOfRange = new TimeSpan(TimeSpan.TicksPerDay * 365 * 200); try { u32 += outOfRange; } catch (Exception ex) { Assert.AreEqual(typeof(OverflowException), ex.GetType()); } try { u32 -= outOfRange; } catch (Exception ex) { Assert.AreEqual(typeof(OverflowException), ex.GetType()); } for (int i = -9; i < 10; i++) { DateTime check = new DateTime(1970, 1, 1) + TimeSpan.FromSeconds((uint.MaxValue + 1L) * i); Assert.AreEqual(check, UnixTime32.Convert(0, DateTimeKind.Local, i)); Assert.AreEqual(check, UnixTime32.Convert(0, DateTimeKind.Utc, i)); Assert.AreEqual(check, UnixTime32.Convert(0, DateTimeKind.Unspecified, i)); } for (int i = -9; i < 10; i++) { TimeSpan zone = new TimeSpan(2, 0, 0); DateTime check = new DateTime(1970, 1, 1) + TimeSpan.FromSeconds((uint.MaxValue + 1L) * i) - zone; Assert.AreEqual(check, UnixTime32.ConvertToUTC(0, zone, i)); Assert.AreEqual(check, UnixTime32.ConvertToUTC(0, zone, i)); Assert.AreEqual(check, UnixTime32.ConvertToUTC(0, zone, i)); } }
public void TestMethodStruct() { Assert.AreEqual(false, new UnixTime32().Equals(null)); Assert.AreEqual(new UnixTime32(), new UnixTime32()); Assert.AreEqual(0, new UnixTime32().TimeStamp); Assert.AreEqual((UnixTime32)0, new UnixTime32()); Assert.AreEqual(true, 0 == new UnixTime32().TimeStamp); Assert.AreEqual(new DateTime(1970, 1, 1), new UnixTime32().DateTime); unsafe { Assert.AreEqual(structSize, Marshal.SizeOf <UnixTime32>()); Assert.AreEqual(structSize, sizeof(UnixTime32)); } var ptr = Marshal.AllocHGlobal(100); Marshal.Copy(new byte[100], 0, ptr, 100); try { UnixTime32 now = UnixTime32.Now; Marshal.StructureToPtr(now, ptr, true); long value = (long)Marshal.ReadInt64(ptr); Assert.AreEqual(true, now.TimeStamp == value); var copy = Marshal.PtrToStructure <UnixTime32>(ptr); Assert.AreEqual(now.TimeStamp, copy.TimeStamp); Assert.AreEqual(now, copy); Assert.AreEqual((DateTime)now, (DateTime)copy); Assert.AreEqual(now.DateTime, copy.DateTime); Assert.AreEqual(now.GetHashCode(), copy.TimeStamp.GetHashCode()); Assert.AreEqual(now.GetHashCode(), copy.GetHashCode()); } finally { Marshal.FreeHGlobal(ptr); } }