public void UnsafeObjectStream_RawSeekBackward_SeeksToPreviousObject_WhenNotAtBeginningOfStream() { var stream = new UnsafeObjectStream(); stream.AcquirePointers(); try { unsafe { stream.ReserveMultiple(2, 2 * sizeof(UnsafeObjectTypeOne)); *(UnsafeObjectTypeOne *)stream.Data = new UnsafeObjectTypeOne() { ObjectType = UnsafeObjectType.TypeOne, Value1 = 123 }; stream.FinalizeObject(sizeof(UnsafeObjectTypeOne)); *(UnsafeObjectTypeOne *)stream.Data = new UnsafeObjectTypeOne() { ObjectType = UnsafeObjectType.TypeOne, Value1 = 234 }; stream.FinalizeObject(sizeof(UnsafeObjectTypeOne)); stream.RawSeekObject(stream.LengthInObjects); TheResultingValue(stream.PositionInBytes).ShouldBe(stream.LengthInBytes); TheResultingValue(stream.PositionInObjects).ShouldBe(stream.LengthInObjects); stream.SeekBackward(); TheResultingValue(stream.PositionInBytes).ShouldBe(stream.LengthInBytes - (sizeof(UnsafeObjectTypeOne))); TheResultingValue(stream.PositionInObjects).ShouldBe(stream.LengthInObjects - 1); stream.SeekBackward(); TheResultingValue(stream.PositionInBytes).ShouldBe(stream.LengthInBytes - (sizeof(UnsafeObjectTypeOne) + sizeof(UnsafeObjectTypeOne))); TheResultingValue(stream.PositionInObjects).ShouldBe(stream.LengthInObjects - 2); } } finally { stream.ReleasePointers(); } }