public void CanReadWriteWithMaxDecimalCount() { var length = DbaseNullableSingle.MaximumLength; var decimalCount = DbaseDecimalCount.Min(DbaseNullableSingle.MaximumDecimalCount, new DbaseDecimalCount(length.ToInt32() - 2)); var sut = new DbaseNullableSingle( new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.Float, _fixture.Create <ByteOffset>(), length, decimalCount ) ); using (var random = new PooledRandom()) { sut.Value = new DbaseFieldNumberGenerator(random) .GenerateAcceptableValue(sut); using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream, Encoding.ASCII, true)) { sut.Write(writer); writer.Flush(); } stream.Position = 0; using (var reader = new BinaryReader(stream, Encoding.ASCII, true)) { var result = new DbaseNullableSingle(sut.Field); result.Read(reader); Assert.Equal(sut, result, new DbaseFieldValueEqualityComparer()); } } } }
public void WritesExcessDecimalsAsZero() { var length = _fixture.GenerateDbaseSingleLength(); var decimalCount = _fixture.GenerateDbaseSingleDecimalCount(length); var sut = new DbaseNullableSingle( new DbaseField( _fixture.Create <DbaseFieldName>(), DbaseFieldType.Float, _fixture.Create <ByteOffset>(), length, decimalCount ), 0.0f); using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream, Encoding.ASCII, true)) { sut.Write(writer); writer.Flush(); } stream.Position = 0; if (decimalCount.ToInt32() == 0) { Assert.Equal( "0".PadLeft(length.ToInt32()), Encoding.ASCII.GetString(stream.ToArray())); } else { Assert.Equal( new string(' ', length.ToInt32() - decimalCount.ToInt32() - 2) + "0." + new string('0', decimalCount.ToInt32()), Encoding.ASCII.GetString(stream.ToArray()) ); } } }