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