From 70058e9140808ab4ee0ea7f6b40038873ad94542 Mon Sep 17 00:00:00 2001 From: Andreas Vilinski Date: Wed, 27 May 2020 17:31:14 +0200 Subject: [PATCH 1/2] add property based tests with FsCheck --- tests/Utf8Json.Tests/JsonReaderWriterTest.cs | 156 ++++--------------- tests/Utf8Json.Tests/Utf8Json.Tests.csproj | 1 + 2 files changed, 35 insertions(+), 122 deletions(-) diff --git a/tests/Utf8Json.Tests/JsonReaderWriterTest.cs b/tests/Utf8Json.Tests/JsonReaderWriterTest.cs index b19b094d..de9c22a6 100644 --- a/tests/Utf8Json.Tests/JsonReaderWriterTest.cs +++ b/tests/Utf8Json.Tests/JsonReaderWriterTest.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using System.Text; +using FsCheck.Xunit; using Xunit; namespace Utf8Json.Tests @@ -15,7 +16,7 @@ JsonReader SameAsReference(T target, ArraySegment result) return new JsonReader(result.Array, result.Offset); } - /* + [Fact] public void NullTest() { @@ -23,175 +24,87 @@ public void NullTest() writer.WriteNull(); var reader = SameAsReference((object)null, writer.GetBuffer()); - reader.ReadIsNull().IsTrue(); } - - [Theory] - [InlineData(true)] - [InlineData(false)] + + [Property] public void BoolTest(bool target) { var writer = new JsonWriter(); writer.WriteBoolean(target); var reader = SameAsReference(target, writer.GetBuffer()); - reader.ReadBoolean().Is(target); } - - [Theory] - [InlineData(byte.MinValue)] - [InlineData(9)] - [InlineData(10)] - [InlineData(99)] - [InlineData(100)] - [InlineData(101)] - [InlineData(byte.MaxValue)] + + [Property] public void ByteTest(byte target) { var writer = new JsonWriter(); writer.WriteByte(target); var reader = SameAsReference(target, writer.GetBuffer()); - reader.ReadByte().Is(target); } - - [Theory] - [InlineData(0)] - [InlineData(1)] - [InlineData(12)] - [InlineData(123)] - [InlineData(12345)] - [InlineData(123456)] - [InlineData(1234567)] - [InlineData(12345678)] - [InlineData(123456789)] - [InlineData(1234567890)] - [InlineData(12345678901)] - [InlineData(123456789012)] - [InlineData(1234567890123)] - [InlineData(12345678901234)] - [InlineData(123456789012345)] - [InlineData(1234567890123456)] - [InlineData(12345678901234567)] - [InlineData(123456789012345678)] - [InlineData(1234567890123456789)] - [InlineData(12345678901234567890)] - [InlineData(ulong.MaxValue)] + + [Property] public void UInt64Test(ulong target) { var writer = new JsonWriter(); writer.WriteUInt64(target); var reader = SameAsReference(target, writer.GetBuffer()); - reader.ReadUInt64().Is(target); } - - [Theory] - [InlineData(long.MinValue)] - [InlineData(-1234567890123456789)] - [InlineData(-123456789012345678)] - [InlineData(-12345678901234567)] - [InlineData(-1234567890123456)] - [InlineData(-123456789012345)] - [InlineData(-12345678901234)] - [InlineData(-1234567890123)] - [InlineData(-123456789012)] - [InlineData(-12345678901)] - [InlineData(-1234567890)] - [InlineData(-123456789)] - [InlineData(-12345678)] - [InlineData(-1234567)] - [InlineData(-123456)] - [InlineData(-12345)] - [InlineData(-1234)] - [InlineData(-123)] - [InlineData(-12)] - [InlineData(-1)] - [InlineData(0)] - [InlineData(1)] - [InlineData(12)] - [InlineData(123)] - [InlineData(12345)] - [InlineData(123456)] - [InlineData(1234567)] - [InlineData(12345678)] - [InlineData(123456789)] - [InlineData(1234567890)] - [InlineData(12345678901)] - [InlineData(123456789012)] - [InlineData(1234567890123)] - [InlineData(12345678901234)] - [InlineData(123456789012345)] - [InlineData(1234567890123456)] - [InlineData(12345678901234567)] - [InlineData(123456789012345678)] - [InlineData(1234567890123456789L)] - [InlineData(long.MaxValue)] + + [Property] public void Int64Test(long target) { var writer = new JsonWriter(); writer.WriteInt64(target); var reader = SameAsReference(target, writer.GetBuffer()); - reader.ReadInt64().Is(target); } - - [Theory] - [InlineData(-10)] - [InlineData(-120)] - [InlineData(10)] - [InlineData(byte.MaxValue)] - [InlineData(sbyte.MaxValue)] - [InlineData(short.MaxValue)] - [InlineData(int.MaxValue)] - [InlineData(long.MaxValue)] - [InlineData(ushort.MaxValue)] - [InlineData(uint.MaxValue)] - [InlineData(ulong.MaxValue)] + + [Property] public void FloatTest(T value) { var bin = JsonSerializer.Serialize(value); JsonSerializer.Deserialize(bin).Is(Convert.ToSingle(value)); } - - [Theory] - [InlineData(-10)] - [InlineData(-120)] - [InlineData(10)] - [InlineData(byte.MaxValue)] - [InlineData(sbyte.MaxValue)] - [InlineData(short.MaxValue)] - [InlineData(int.MaxValue)] - [InlineData(long.MaxValue)] - [InlineData(ushort.MaxValue)] - [InlineData(uint.MaxValue)] - [InlineData(ulong.MaxValue)] + + [Property] public void DoubleTest(T value) { var bin = JsonSerializer.Serialize(value); JsonSerializer.Deserialize(bin).Is(Convert.ToDouble(value)); } - - [InlineData("\"xyzzy\"")] - [InlineData("/xyzzy/")] - [InlineData("'xyzzy'")] - [InlineData("\r\nxyzzy\r\n")] - [InlineData("xyz\r\nzy")] - [InlineData("xy\"zzy")] - [InlineData("xy\"zz\"y")] - [Theory] - public void StringEscaping(string v) + + [Property] + public void StringTest(string v) { var js = JsonSerializer.Serialize(v); var ok = JsonSerializer.Deserialize(js); ok.Is(v); } - */ + + [Property] + public void IntArrayTest(int[] origin) + { + var serialized = JsonSerializer.Serialize(origin); + var deserialized = JsonSerializer.Deserialize(serialized); + Assert.Equal(origin, deserialized); + } + + [Property] + public void StringArrayTest(string[] origin) + { + var serialized = JsonSerializer.Serialize(origin); + var deserialized = JsonSerializer.Deserialize(serialized); + Assert.Equal(origin, deserialized); + } + [Fact] public void LargeString() { @@ -205,7 +118,6 @@ public void LargeString() aaa.Is("\u0313" + origstr); } - [Fact] public void LargeString2() { diff --git a/tests/Utf8Json.Tests/Utf8Json.Tests.csproj b/tests/Utf8Json.Tests/Utf8Json.Tests.csproj index feeade2e..97745217 100644 --- a/tests/Utf8Json.Tests/Utf8Json.Tests.csproj +++ b/tests/Utf8Json.Tests/Utf8Json.Tests.csproj @@ -23,6 +23,7 @@ + From a652f91b70adb464a5b63401178fa02c421aedf2 Mon Sep 17 00:00:00 2001 From: Andreas Vilinski Date: Wed, 27 May 2020 17:49:57 +0200 Subject: [PATCH 2/2] fix copy-paste --- tests/Utf8Json.Tests/JsonReaderWriterTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Utf8Json.Tests/JsonReaderWriterTest.cs b/tests/Utf8Json.Tests/JsonReaderWriterTest.cs index de9c22a6..e33729ce 100644 --- a/tests/Utf8Json.Tests/JsonReaderWriterTest.cs +++ b/tests/Utf8Json.Tests/JsonReaderWriterTest.cs @@ -68,14 +68,14 @@ public void Int64Test(long target) } [Property] - public void FloatTest(T value) + public void FloatTest(float value) { var bin = JsonSerializer.Serialize(value); JsonSerializer.Deserialize(bin).Is(Convert.ToSingle(value)); } [Property] - public void DoubleTest(T value) + public void DoubleTest(double value) { var bin = JsonSerializer.Serialize(value); JsonSerializer.Deserialize(bin).Is(Convert.ToDouble(value));