From ce9b20918617b7bca0562f5290bf595942e78711 Mon Sep 17 00:00:00 2001 From: nth-commit Date: Wed, 10 Aug 2022 22:05:41 +1200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=8D=20Fix=20synchronous=20properties?= =?UTF-8?q?=20printing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RunnerTests/PrintTests/Snapshots.cs | 71 +++- ...AsyncProperty.PrintBinaryListProperty.snap | 401 ++++++++++++++++++ ...rintAsyncProperty.PrintBinaryProperty.snap | 401 ++++++++++++++++++ ...intAsyncProperty.PrintNullaryProperty.snap | 102 +++++ ...tAsyncProperty.PrintUnaryListProperty.snap | 102 +++++ ...PrintAsyncProperty.PrintUnaryProperty.snap | 102 +++++ .../Check/Automata/PresentationInferrer.cs | 66 --- .../PresentationInferrer.cs | 4 +- 8 files changed, 1180 insertions(+), 69 deletions(-) create mode 100644 src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryListProperty.snap create mode 100644 src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryProperty.snap create mode 100644 src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintNullaryProperty.snap create mode 100644 src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryListProperty.snap create mode 100644 src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryProperty.snap delete mode 100644 src/GalaxyCheck/Runners/Check/Automata/PresentationInferrer.cs rename src/GalaxyCheck/Runners/Check/{AsyncAutomata => }/PresentationInferrer.cs (92%) diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/Snapshots.cs b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/Snapshots.cs index 2389fdb2..c63186ab 100644 --- a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/Snapshots.cs +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/Snapshots.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Xunit; namespace Tests.V2.RunnerTests.PrintTests @@ -117,6 +118,74 @@ private static string PrintAndCollect(Property property) return string.Join(Environment.NewLine, log); } - } + } + + public class PrintAsyncProperty + { + [Fact] + public async Task PrintNullaryProperty() + { + var property = Property.NullaryAsync(() => Task.FromResult(false)); + + var print = await PrintAndCollect(property); + + Snapshot.Match(print); + } + + [Fact] + public async Task PrintUnaryProperty() + { + var property = Gen.Int32().ForAllAsync((_) => Task.FromResult(false)); + + var print = await PrintAndCollect(property); + + Snapshot.Match(print); + } + + [Fact] + public async Task PrintBinaryProperty() + { + var property = new AsyncProperty( + from x in Gen.Int32().LessThan(int.MaxValue) + from y in Gen.Int32().GreaterThan(x) + select Property.ForTheseAsync(() => Task.FromResult(false))); + + var print = await PrintAndCollect(property); + + Snapshot.Match(print); + } + + [Fact] + public async Task PrintUnaryListProperty() + { + var property = Gen.Int32().ListOf().ForAllAsync((_) => Task.FromResult(false)); + + var print = await PrintAndCollect(property); + + Snapshot.Match(print); + } + + [Fact] + public async Task PrintBinaryListProperty() + { + var property = new AsyncProperty( + from xs in Gen.Int32().ListOf() + from ys in Gen.Int32().ListOf().WithCountGreaterThan(xs.Count) + select Property.ForTheseAsync(() => Task.FromResult(false))); + + var print = await PrintAndCollect(property); + + Snapshot.Match(print); + } + + private static async Task PrintAndCollect(AsyncProperty property) + { + var log = new List(); + + await property.PrintAsync(seed: 0, stdout: log.Add); + + return string.Join(Environment.NewLine, log); + } + } } } diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryListProperty.snap b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryListProperty.snap new file mode 100644 index 00000000..0b11e739 --- /dev/null +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryListProperty.snap @@ -0,0 +1,401 @@ +Sampled 100 values (0 discarded): + +Sample[0]: + [0] = [] + [1] = [0] + +Sample[1]: + [0] = [] + [1] = [0] + +Sample[2]: + [0] = [] + [1] = [0, 1] + +Sample[3]: + [0] = [] + [1] = [1] + +Sample[4]: + [0] = [1] + [1] = [-1, 1] + +Sample[5]: + [0] = [] + [1] = [0] + +Sample[6]: + [0] = [-1] + [1] = [0, 0] + +Sample[7]: + [0] = [] + [1] = [1] + +Sample[8]: + [0] = [0] + [1] = [0, 0] + +Sample[9]: + [0] = [] + [1] = [1, 1] + +Sample[10]: + [0] = [] + [1] = [1] + +Sample[11]: + [0] = [] + [1] = [0] + +Sample[12]: + [0] = [-1] + [1] = [0, -1] + +Sample[13]: + [0] = [-1] + [1] = [0, 1] + +Sample[14]: + [0] = [-1] + [1] = [0, 1] + +Sample[15]: + [0] = [5] + [1] = [-4, -4, 0] + +Sample[16]: + [0] = [] + [1] = [5] + +Sample[17]: + [0] = [4] + [1] = [3, 4, 5] + +Sample[18]: + [0] = [] + [1] = [-5] + +Sample[19]: + [0] = [] + [1] = [5] + +Sample[20]: + [0] = [-4, -5] + [1] = [0, -1, 3, -3, -4, -4, 3] + +Sample[21]: + [0] = [1] + [1] = [-1, -3, -2] + +Sample[22]: + [0] = [-1, -1, -5] + [1] = [-5, -5, -2, -5, -4, -2] + +Sample[23]: + [0] = [0, 5, 2, 0, 4] + [1] = [-5, 3, 5, -1, -5, 1, 3, -3, -1] + +Sample[24]: + [0] = [5, 4, -4] + [1] = [5, 4, -3, 3, 3, -5, -3, 1] + +Sample[25]: + [0] = [0, -2, 0] + [1] = [3, 1, -2, -1, 0, 4, 1] + +Sample[26]: + [0] = [-5, 3, -5, 3] + [1] = [-3, 1, 4, 5, 3, -1, -1] + +Sample[27]: + [0] = [3, -4, 2] + [1] = [1, -2, 4, -3, 0, -5] + +Sample[28]: + [0] = [0, -1] + [1] = [2, 4, 1, -5, 1, -1] + +Sample[29]: + [0] = [-8, -1, 6, 0] + [1] = [3, -7, 5, 3, -6, 3] + +Sample[30]: + [0] = [5, 8, -8, -4, 2] + [1] = [8, 8, -10, 5, -7, -3, -9, -8, 2] + +Sample[31]: + [0] = [-2, 5, 4, -5, 3] + [1] = [3, 2, -2, 7, 3, 6, 5, 9, -1] + +Sample[32]: + [0] = [3, -10, -6, 7] + [1] = [5, 4, 5, -8, -7, -8] + +Sample[33]: + [0] = [-4] + [1] = [10, 6, 1, 5, -1, -1] + +Sample[34]: + [0] = [3, 7, 2, -4, -8] + [1] = [-8, -5, 10, 7, 9, -9] + +Sample[35]: + [0] = [1, -5, -3, 0] + [1] = [-7, 0, -6, 9, -10, 0, -6, 1, 10, -3] + +Sample[36]: + [0] = [3, -2, 8] + [1] = [-2, -4, 7, -3, 1] + +Sample[37]: + [0] = [-9, -4, 10, 2] + [1] = [1, -4, 2, -9, 2, 1, -10, 5, 5] + +Sample[38]: + [0] = [-1, 6, 6, 10] + [1] = [-9, 7, 2, -6, 4, -5, 8, 4, 4, -4] + +Sample[39]: + [0] = [-4, -5, 4, -8] + [1] = [8, -9, 2, 2, 9, 1] + +Sample[40]: + [0] = [5, -7, -10] + [1] = [-1, 0, -7, -8, 9, 4, -2, -7, -6, 1, ...] + +Sample[41]: + [0] = [9] + [1] = [-1, -10, 8, 8, 8, 8, 8] + +Sample[42]: + [0] = [] + [1] = [3, -10, 9] + +Sample[43]: + [0] = [50, 20, -53, -24, 73, -57, 34, 63] + [1] = [-72, 54, -75, 77, -17, 45, 52, 53, 94, 39, ...] + +Sample[44]: + [0] = [-3, -18] + [1] = [55, -79, -35, 29, 36, -65, 85, 86, -83, -75, ...] + +Sample[45]: + [0] = [-76, 18, 96, -50, -59, -64, -97, -97, -80, -99] + [1] = [-48, -81, -60, -81, 84, -14, 71, -15, -74, -95, ...] + +Sample[46]: + [0] = [28, 64, 81, 96, -61, -87, 99] + [1] = [-96, -20, 12, -34, -91, 83, 78, 75, 65, 76, ...] + +Sample[47]: + [0] = [72, -95, 76, 36, 39, 69, 61, 54, 39] + [1] = [47, -69, 81, 80, -78, 49, 76, -68, 72, 53, ...] + +Sample[48]: + [0] = [] + [1] = [25, -85, 56, -66, 3, -91, -70, -9] + +Sample[49]: + [0] = [75, 87, -20, -87, 82, 75] + [1] = [100, 73, 25, -37, 53, 49, -92, -45, 66, 81, ...] + +Sample[50]: + [0] = [-55, 70, -85] + [1] = [94, 39, -16, 88, -98, 69, 57, -48] + +Sample[51]: + [0] = [] + [1] = [-65, -72, 97, 2147483647, 80] + +Sample[52]: + [0] = [] + [1] = [-94, -88, 2147483647, -86, -70, 7, -88, 66, 24, -49] + +Sample[53]: + [0] = [46, -11, 61, -7, -72, 28, 97] + [1] = [4, 19, -94, -28, -9, 5, 12, -60, 2, -39, ...] + +Sample[54]: + [0] = [-49] + [1] = [-27, 45, 88, 17, 79, -75, -4, 50] + +Sample[55]: + [0] = [12, 86, -35, 75, -87] + [1] = [-2147483648, -22, 44, -72, 17, -73, -88, -24, -57, -2147483648, ...] + +Sample[56]: + [0] = [95, -10] + [1] = [-6, -7, 79, 64, 97, -91, -71, -6, -89] + +Sample[57]: + [0] = [93, -80, -76, 86, -41, 62, -57, -75, -69, 97] + [1] = [-25, -93, 21, -74, -53, -36, -2147483648, 28, 57, 66, ...] + +Sample[58]: + [0] = [-2326, -2373, -5020, 3243] + [1] = [-3680, -4827, 2800, 2147483647, -8881, -7268, -4244, -2418, 7505, -993, ...] + +Sample[59]: + [0] = [8072, -1805, 552] + [1] = [8646, -3104, 3044, 8453, -4005, -1855, -6957, 9582, -360, -360, ...] + +Sample[60]: + [0] = [-9016, 7396, 2825, -8928, -2749, 7546, 4263, -3483, 6399, -2147483648, ...] + [1] = [4600, -3660, -3814, -3039, -2477, 4637, -4943, 7372, -387, -2173, ...] + +Sample[61]: + [0] = [2438, -5498, 9424, 1625, -382, -6567, 5229, 9892, 4839, 8169, ...] + [1] = [-2029, 2147483647, 5832, -4787, -8510, -9469, -8592, -5542, -3325, -5143, ...] + +Sample[62]: + [0] = [6111, -7207, -2644, -5994, -2147483648, 1481, -833, -334, 409, -5273, ...] + [1] = [-7882, -2351, -4295, -6050, 9171, -9433, 5751, 8809, 6339, 9855, ...] + +Sample[63]: + [0] = [1777, 601, -848, 4697, 2147483647, 7012, -8373, 4771, -9761, 3073] + [1] = [-4813, 1497, 1775, -4677, 4604, 9638, 3882, -2147483648, 5791, 6861, ...] + +Sample[64]: + [0] = [2979, 8845, 8913, 8603, 2147483647, -9411, -2147483648, -9475, 1515, -9078, ...] + [1] = [3436, 6075, 640, 8535, 761, -3828, 8878, -1543, 3864, 4941, ...] + +Sample[65]: + [0] = [7275, 5005, -2147483648, 4177] + [1] = [-4118, -7682, 4317, -4941, 2147483647, -6808, 2246, 2300, 9112, 6084, ...] + +Sample[66]: + [0] = [] + [1] = [2038, -2270, 9383, 2147483647, 1047, -7888, 9297, 9876, -6701, 1463, ...] + +Sample[67]: + [0] = [-7655, -414] + [1] = [1125, -5155, -7152, 3367, 4241, 399, -3265, -2147483648] + +Sample[68]: + [0] = [653, 4765, 3772, -3734, 8230, 7134, -2147483648, 9003, 1360, -4267, ...] + [1] = [-1437, -6875, 6326, -5733, 900, 2147483647, 2996, 1497, -6253, -2147483648, ...] + +Sample[69]: + [0] = [-4314, 2951, -1616, -1427, -2147483648] + [1] = [-2793, 2173, -1511, -8323, -3906, 6463, 2147483647, 7423, 2147483647, 6283, ...] + +Sample[70]: + [0] = [-7267, -9670, 7978, 7114, 576, -8850] + [1] = [-5393, 9658, -2147483648, -4153, -7058, 2147483647, 5559, 3732, 2147483647, 8263, ...] + +Sample[71]: + [0] = [6495, -2147483648, -1946, 4812, -4546, 1347, 854, -1185] + [1] = [-1814, 6321, -4896, -2147483648, 2147483647, -4363, 5799, -6227, 2147483647, 9253, ...] + +Sample[72]: + [0] = [-63212901, -80154297, 23336448, -76450845, 72095021, 45575081, 22137441, -716328, 2147483647, 39243029, ...] + [1] = [38158710, 9705758, 2147483647, -2147483648, -51178174, -22333901, -45946503, -38032280, 2147483647, 2147483647, ...] + +Sample[73]: + [0] = [73822395, -32853076, 2147483647, -69995409, 99134361, 3587670, -2147483648, 8122825, -87289951, -76201808, ...] + [1] = [-2147483648, 68990564, 3023559, -2147483648, -20256451, 2147483647, 38590633, -98781308, 2333736, -2147483648, ...] + +Sample[74]: + [0] = [54483660, -64774872, -2147483648, -18183100, 2147483647, 67528448, 95506034] + [1] = [-28385058, -82715500, -59988174, -90538224, -58946900, 2147483647, -57745518, 22783541] + +Sample[75]: + [0] = [-86217852, -32669313, -14534964, 15191454, -2147483648, -97132645, 14373169, 2147483647, -6573964] + [1] = [-94964446, -2147483648, 53684801, 2147483647, -31097065, -97954188, 3837167, -6465171, -2147483648, -62156941, ...] + +Sample[76]: + [0] = [-50857444, 2147483647, 2147483647, -30423000, -68294984, 33232960, -18378134, -33384731] + [1] = [30904029, 5135440, 93064475, -18471578, 37518762, 21570933, 2147483647, 76927641, -60048285, -15380587, ...] + +Sample[77]: + [0] = [1403784] + [1] = [-9168507, -11961587, -26147957, -2147483648, 87440215, -28238287, 97906921, 33060666, 26260187, 92459573, ...] + +Sample[78]: + [0] = [98580864, 97260194, 51868068, 6189108, 88698468, -45563078, -29084791, 10630453, 56077003, 80274328, ...] + [1] = [6615724, 336533, -58871955, 2147483647, -2147483648, -79166023, 52467533, 14469245, -34673884, -39981294, ...] + +Sample[79]: + [0] = [66685606, 6302402, 31316887, -18255864, 7566156, -2147483648, 79972747, -45943284, -2147483648, -2147483648, ...] + [1] = [2147483647, -62524751, 62559734, 8136290, 21726699, -91696809, -22303446, 9444504, -65779784, 2147483647, ...] + +Sample[80]: + [0] = [33708509, 75633155, -61421231, 70099329, -4185465, 80926109, 50899720, 4869401, 2147483647, 14598876, ...] + [1] = [42225745, 2147483647, -20948541, -31239077, 23465379, 2147483647, -75665010, -60269128, -56417652, -4652623, ...] + +Sample[81]: + [0] = [95698119, 54303773, 90659413, 2147483647, -2147483648, -2147483648, -18757641, 68714273, 2147483647, 8205633, ...] + [1] = [87247633, -2147483648, 95429991, -77040408, 94336551, -85984919, -41449405, 80181087, 92463290, 19698034, ...] + +Sample[82]: + [0] = [2147483647, 98077120, -2147483648, 85184264, 80820503, 4192864, 33587825, 2147483647, -12031253, -54773377, ...] + [1] = [2147483647, -3751801, 62094918, -42133069, 2147483647, 36128743, 81912047, 42234034, -94389188, 2147483647, ...] + +Sample[83]: + [0] = [-2147483648, 22296578, -2147483648, -68372625, 8517061] + [1] = [-50776380, -2147483648, 2147483647, -70596798, -2147483648, -52604374, 45133175, -42060361, 30442954, 2147483647, ...] + +Sample[84]: + [0] = [-90973557, -73134989, -62716661, 32716768, 23745833, 2147483647, -23606462, 49518823, 2147483647] + [1] = [25184383, 2147483647, -2147483648, -51867101, -6904340, -48366334, 69776980, 2147483647, 54654610, -9727586, ...] + +Sample[85]: + [0] = [2147483647, -18892391, -66855579, 20520566, 52010762, 34902656, -2147483648, 2147483647, 80874792, 96274616, ...] + [1] = [-62800508, 2147483647, -75355645, 56896082, 2147483647, -2147483648, 2147483647, -59690107, 2147483647, 3762022, ...] + +Sample[86]: + [0] = [1545126727, 130689773, 1451424180, 153544399, -2147483648, -2147483648, -482311945, 2147483647, 612901856] + [1] = [-2147483648, -2020240758, 1880798593, 781656634, -81329892, -1497831512, 2080983672, -382505876, 863044474, -279033692, ...] + +Sample[87]: + [0] = [210072927, 1928657352, 670031231, -1737967285, 2147483647, 2147483647, -379123545, 2147483647, -2147483648, -920506340, ...] + [1] = [-1038857707, 762655748, -2147483648, -2147483648, -739191984, 2147483647, 1092171145, -2147483648, -1699380187, -1265779486, ...] + +Sample[88]: + [0] = [2147483647, -1099646195, 305647254, 2147483647, 2147483647] + [1] = [416221053, -784520934, -1117436362, -1265647346, -2059239241, -1603640636, -2147483648, -1103429058, -2147483648, 2147483647, ...] + +Sample[89]: + [0] = [889241419, -291255010, -642459824, 2147483647, -452390935] + [1] = [-3898051, 1197804648, -2147483648, -2147483648, -1839327356, -1831501125, -104518200, -568719586, -2147483648, 350300494, ...] + +Sample[90]: + [0] = [-977760084, 678958123, 221830781, -865499102, 2147483647, -1885346584, -1106286170, 2147483647, -820278991, 2147483647, ...] + [1] = [-674040565, -1974705267, -281035776, 1510448347, 757044079, -1220782833, 2147483647, 1977742303, -1751004992, -2147483648, ...] + +Sample[91]: + [0] = [-2147483648, -2147483648, 279938071, 2147483647, -321397779, 2147483647, -1979898216, -208224828, 389055770, -1206199889, ...] + [1] = [-2147483648, -2147483648, -2147483648, 219497994, 624696108, 1898869041, 1636546393, 2147483647, -1852427284, 2147483647, ...] + +Sample[92]: + [0] = [-2147483648, -2147483648, -241020558, -2147483648, 2147483647, 1808382160, -298976542, -2147483648, 2001433629, 1103197209, ...] + [1] = [-2147483648, 2147483647, -234717182, -2147483648, 1992514159, 2147483647, -1138867387, -2147483648, 628640177, -1895622081, ...] + +Sample[93]: + [0] = [-2147483648, 2147483647, 1786869054, 2147483647, 2147483647, 2147483647, -2147483648, 1058135220, 2147483647, -2147483648, ...] + [1] = [-829386119, 2147483647, 1317229247, -1881669917, 2147483647, 2147483647, 2147483647, -2147483648, -515292225, 2147483647, ...] + +Sample[94]: + [0] = [-2147483648, 2147483647, -2147483648, 620733958, -18710998, -2147483648, 2147483647, -2147483648, 2147483647, -2147483648, ...] + [1] = [2147483647, -484682945, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, 2147483647, -919756616, 833875035, ...] + +Sample[95]: + [0] = [-918848978, 2147483647, -2064877603, -1260448240, 129197406, 1459589867, 745711662, 2147483647, -363682042, 2147483647, ...] + [1] = [2147483647, 2147483647, -2147483648, -1862723973, -2147483648, -2147483648, 1577045816, -1233808954, -2147483648, 472412817, ...] + +Sample[96]: + [0] = [-1958553268, -1685308941, -2147483648, 1959205636, 169987575, 1496271753, -1264359056, 2147483647] + [1] = [-285631356, 2147483647, 2147483647, 1706323313, -199019612, -2147483648, -2147483648, 651894971, 2147483647, 2147483647, ...] + +Sample[97]: + [0] = [-2147483648, -2147483648, 2147483647, -2147483648, 2147483647, 2147483647, -2147483648, -209553905, -1083792033, 2147483647, ...] + [1] = [953740829, -2090116691, 2147483647, -2147483648, -479991904, -1959864770, 2147483647, 675387746, 2147483647, 1450301548, ...] + +Sample[98]: + [0] = [-2147483648, 2147483647, -2147483648, -2147483648, -2147483648, -2147483648, 2147483647, 118514362, 2071312779, 2147483647, ...] + [1] = [-2147483648, 71648565, -2147483648, -2147483648, 2147483647, -1420967941, 2147483647, -890324075, 2147483647, -2147483648, ...] + +Sample[99]: + [0] = [2147483647, 2147483647] + [1] = [-2147483648, 2147483647, 1059072057, 1290045461, 2147483647, 819632774, 921578918, 2147483647, -1430186697, 465761782, ...] diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryProperty.snap b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryProperty.snap new file mode 100644 index 00000000..629be392 --- /dev/null +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintBinaryProperty.snap @@ -0,0 +1,401 @@ +Sampled 100 values (0 discarded): + +Sample[0]: + [0] = 0 + [1] = 1 + +Sample[1]: + [0] = 0 + [1] = 1 + +Sample[2]: + [0] = -1 + [1] = 0 + +Sample[3]: + [0] = 0 + [1] = 2 + +Sample[4]: + [0] = 0 + [1] = 2 + +Sample[5]: + [0] = 0 + [1] = 1 + +Sample[6]: + [0] = 1 + [1] = 3 + +Sample[7]: + [0] = 1 + [1] = 2 + +Sample[8]: + [0] = -1 + [1] = 1 + +Sample[9]: + [0] = 1 + [1] = 2 + +Sample[10]: + [0] = 0 + [1] = 2 + +Sample[11]: + [0] = -1 + [1] = 0 + +Sample[12]: + [0] = 0 + [1] = 2 + +Sample[13]: + [0] = 1 + [1] = 2 + +Sample[14]: + [0] = 1 + [1] = 3 + +Sample[15]: + [0] = 2 + [1] = 5 + +Sample[16]: + [0] = 4 + [1] = 6 + +Sample[17]: + [0] = 0 + [1] = 6 + +Sample[18]: + [0] = 1 + [1] = 7 + +Sample[19]: + [0] = -1 + [1] = 4 + +Sample[20]: + [0] = -3 + [1] = 4 + +Sample[21]: + [0] = -1 + [1] = 4 + +Sample[22]: + [0] = -2 + [1] = 3 + +Sample[23]: + [0] = 2 + [1] = 4 + +Sample[24]: + [0] = -4 + [1] = 2 + +Sample[25]: + [0] = 0 + [1] = 1 + +Sample[26]: + [0] = -5 + [1] = 1 + +Sample[27]: + [0] = 2 + [1] = 6 + +Sample[28]: + [0] = 4 + [1] = 9 + +Sample[29]: + [0] = 10 + [1] = 14 + +Sample[30]: + [0] = 0 + [1] = 8 + +Sample[31]: + [0] = -10 + [1] = -1 + +Sample[32]: + [0] = 0 + [1] = 3 + +Sample[33]: + [0] = -8 + [1] = 5 + +Sample[34]: + [0] = -10 + [1] = 1 + +Sample[35]: + [0] = -5 + [1] = -3 + +Sample[36]: + [0] = 4 + [1] = 15 + +Sample[37]: + [0] = -10 + [1] = 5 + +Sample[38]: + [0] = 6 + [1] = 14 + +Sample[39]: + [0] = 9 + [1] = 20 + +Sample[40]: + [0] = -2 + [1] = 7 + +Sample[41]: + [0] = -9 + [1] = 8 + +Sample[42]: + [0] = 0 + [1] = 5 + +Sample[43]: + [0] = 83 + [1] = 100 + +Sample[44]: + [0] = -42 + [1] = 82 + +Sample[45]: + [0] = -52 + [1] = 39 + +Sample[46]: + [0] = 85 + [1] = 103 + +Sample[47]: + [0] = -9 + [1] = 24 + +Sample[48]: + [0] = -87 + [1] = 83 + +Sample[49]: + [0] = 63 + [1] = 136 + +Sample[50]: + [0] = -56 + [1] = 82 + +Sample[51]: + [0] = 2147483646 + [1] = 2147483647 + +Sample[52]: + [0] = 94 + [1] = 114 + +Sample[53]: + [0] = -35 + [1] = 67 + +Sample[54]: + [0] = 41 + [1] = 43 + +Sample[55]: + [0] = -40 + [1] = 44 + +Sample[56]: + [0] = 11 + [1] = 30 + +Sample[57]: + [0] = 77 + [1] = 92 + +Sample[58]: + [0] = -3618 + [1] = 5568 + +Sample[59]: + [0] = -1521 + [1] = 2451 + +Sample[60]: + [0] = 1999 + [1] = 9021 + +Sample[61]: + [0] = 1452 + [1] = 4032 + +Sample[62]: + [0] = -2147483648 + [1] = -4151 + +Sample[63]: + [0] = -2479 + [1] = 2511 + +Sample[64]: + [0] = 8139 + [1] = 2147483647 + +Sample[65]: + [0] = 1021 + [1] = 2598 + +Sample[66]: + [0] = 3404 + [1] = 10850 + +Sample[67]: + [0] = -4885 + [1] = 2282 + +Sample[68]: + [0] = 4291 + [1] = 12273 + +Sample[69]: + [0] = -9414 + [1] = 585 + +Sample[70]: + [0] = -1666 + [1] = 4403 + +Sample[71]: + [0] = 2481 + [1] = 10271 + +Sample[72]: + [0] = -2147483648 + [1] = -2147483647 + +Sample[73]: + [0] = -46898720 + [1] = 30212628 + +Sample[74]: + [0] = -70598424 + [1] = 13576163 + +Sample[75]: + [0] = 47024697 + [1] = 87218701 + +Sample[76]: + [0] = 33987257 + [1] = 2147483647 + +Sample[77]: + [0] = -64094029 + [1] = 2147483647 + +Sample[78]: + [0] = -21692638 + [1] = 39681134 + +Sample[79]: + [0] = 2147483646 + [1] = 2147483647 + +Sample[80]: + [0] = -96384903 + [1] = 2147483647 + +Sample[81]: + [0] = 63301355 + [1] = 2147483647 + +Sample[82]: + [0] = 2147483646 + [1] = 2147483647 + +Sample[83]: + [0] = 87895228 + [1] = 174808829 + +Sample[84]: + [0] = 11872935 + [1] = 60173639 + +Sample[85]: + [0] = -23067927 + [1] = 15506325 + +Sample[86]: + [0] = -2147483648 + [1] = 907166145 + +Sample[87]: + [0] = 286215751 + [1] = 445092214 + +Sample[88]: + [0] = -524784206 + [1] = 2147483647 + +Sample[89]: + [0] = -263646957 + [1] = 97794208 + +Sample[90]: + [0] = 1324874107 + [1] = 2147483647 + +Sample[91]: + [0] = -204695422 + [1] = 1648009715 + +Sample[92]: + [0] = 1567894657 + [1] = 2147483647 + +Sample[93]: + [0] = 2147483646 + [1] = 2147483647 + +Sample[94]: + [0] = 1048522294 + [1] = 1050466414 + +Sample[95]: + [0] = 1630589370 + [1] = 2147483647 + +Sample[96]: + [0] = -1993360236 + [1] = -1993360235 + +Sample[97]: + [0] = 196770326 + [1] = 2147483647 + +Sample[98]: + [0] = 907530530 + [1] = 1307468024 + +Sample[99]: + [0] = -2147483648 + [1] = 725512479 diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintNullaryProperty.snap b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintNullaryProperty.snap new file mode 100644 index 00000000..22f3d998 --- /dev/null +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintNullaryProperty.snap @@ -0,0 +1,102 @@ +Sampled 100 values (0 discarded): + +Sample[0]: (no value) +Sample[1]: (no value) +Sample[2]: (no value) +Sample[3]: (no value) +Sample[4]: (no value) +Sample[5]: (no value) +Sample[6]: (no value) +Sample[7]: (no value) +Sample[8]: (no value) +Sample[9]: (no value) +Sample[10]: (no value) +Sample[11]: (no value) +Sample[12]: (no value) +Sample[13]: (no value) +Sample[14]: (no value) +Sample[15]: (no value) +Sample[16]: (no value) +Sample[17]: (no value) +Sample[18]: (no value) +Sample[19]: (no value) +Sample[20]: (no value) +Sample[21]: (no value) +Sample[22]: (no value) +Sample[23]: (no value) +Sample[24]: (no value) +Sample[25]: (no value) +Sample[26]: (no value) +Sample[27]: (no value) +Sample[28]: (no value) +Sample[29]: (no value) +Sample[30]: (no value) +Sample[31]: (no value) +Sample[32]: (no value) +Sample[33]: (no value) +Sample[34]: (no value) +Sample[35]: (no value) +Sample[36]: (no value) +Sample[37]: (no value) +Sample[38]: (no value) +Sample[39]: (no value) +Sample[40]: (no value) +Sample[41]: (no value) +Sample[42]: (no value) +Sample[43]: (no value) +Sample[44]: (no value) +Sample[45]: (no value) +Sample[46]: (no value) +Sample[47]: (no value) +Sample[48]: (no value) +Sample[49]: (no value) +Sample[50]: (no value) +Sample[51]: (no value) +Sample[52]: (no value) +Sample[53]: (no value) +Sample[54]: (no value) +Sample[55]: (no value) +Sample[56]: (no value) +Sample[57]: (no value) +Sample[58]: (no value) +Sample[59]: (no value) +Sample[60]: (no value) +Sample[61]: (no value) +Sample[62]: (no value) +Sample[63]: (no value) +Sample[64]: (no value) +Sample[65]: (no value) +Sample[66]: (no value) +Sample[67]: (no value) +Sample[68]: (no value) +Sample[69]: (no value) +Sample[70]: (no value) +Sample[71]: (no value) +Sample[72]: (no value) +Sample[73]: (no value) +Sample[74]: (no value) +Sample[75]: (no value) +Sample[76]: (no value) +Sample[77]: (no value) +Sample[78]: (no value) +Sample[79]: (no value) +Sample[80]: (no value) +Sample[81]: (no value) +Sample[82]: (no value) +Sample[83]: (no value) +Sample[84]: (no value) +Sample[85]: (no value) +Sample[86]: (no value) +Sample[87]: (no value) +Sample[88]: (no value) +Sample[89]: (no value) +Sample[90]: (no value) +Sample[91]: (no value) +Sample[92]: (no value) +Sample[93]: (no value) +Sample[94]: (no value) +Sample[95]: (no value) +Sample[96]: (no value) +Sample[97]: (no value) +Sample[98]: (no value) +Sample[99]: (no value) diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryListProperty.snap b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryListProperty.snap new file mode 100644 index 00000000..301114a8 --- /dev/null +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryListProperty.snap @@ -0,0 +1,102 @@ +Sampled 100 values (0 discarded): + +Sample[0]: [] +Sample[1]: [0] +Sample[2]: [] +Sample[3]: [] +Sample[4]: [] +Sample[5]: [] +Sample[6]: [0] +Sample[7]: [0] +Sample[8]: [] +Sample[9]: [] +Sample[10]: [1] +Sample[11]: [] +Sample[12]: [] +Sample[13]: [1] +Sample[14]: [] +Sample[15]: [-3] +Sample[16]: [] +Sample[17]: [] +Sample[18]: [-3] +Sample[19]: [] +Sample[20]: [4, 3] +Sample[21]: [4, 4, 0, 0] +Sample[22]: [1, 3, -1, 1, -3] +Sample[23]: [-1, 3, -2, 3] +Sample[24]: [1, -4] +Sample[25]: [0, 2, -5, 2, 2] +Sample[26]: [4, -4, 1] +Sample[27]: [5] +Sample[28]: [-4, -4, 0, -3, -4] +Sample[29]: [-10, 8, -5, 3] +Sample[30]: [5, -10, -1, 6, -9] +Sample[31]: [-5, -2, 7, -9] +Sample[32]: [0, -6, 5, -7] +Sample[33]: [-2, -4, 6, -5] +Sample[34]: [0] +Sample[35]: [3, -4, 3, -9, 7] +Sample[36]: [-8, -10] +Sample[37]: [9, -2, 7, 7, -1] +Sample[38]: [9, -4, 0, 8, 6] +Sample[39]: [] +Sample[40]: [8, -3, 5, -10, -6, -4, -7, 5, 2, 3] +Sample[41]: [7, -9, 10, 0] +Sample[42]: [0, -9, 1, 5, 0, 6, 9, 8] +Sample[43]: [-51, 100, -77, -90, -31, -89, -75, -95] +Sample[44]: [-83, -57, -50, -67, -13, 10, -16, -49] +Sample[45]: [69, 20, -82, 23] +Sample[46]: [55, -72, 20, -10, 42, 1, 69] +Sample[47]: [-94, -14, 59] +Sample[48]: [-60, -33, -40, 5, -64, 78, -17] +Sample[49]: [78] +Sample[50]: [60, 96, -79, 17, 3, -24] +Sample[51]: [59, 35, -1, -82] +Sample[52]: [81, 25, -77, -4, -98, 23, -91, 25, 90] +Sample[53]: [-51, -100, -35, -79, 77, 77, 27] +Sample[54]: [90, -64, -1, 33] +Sample[55]: [-29, -26, -8, -21, 90, -5, -81, 95, 18, -7] +Sample[56]: [-17, -1, -44, 51, 83] +Sample[57]: [-93, -91] +Sample[58]: [-2147483648, -2147483648, 3263, -2147483648, -9869, 2147483647] +Sample[59]: [] +Sample[60]: [3948, 8839, -1163, 7923, 5731, -9782, 7355, 1028, 6988] +Sample[61]: [-3819, 65, -1862, 4427, 9725, 950, 4433, -3636, 976, -8013, ...] +Sample[62]: [3439, 250, -6644, 1160, -8583, -6967, 2147483647, -2147483648, 8216] +Sample[63]: [2147483647, -470, 6966, 2147483647, -709, 9691, -8880, 2147483647, -7138, -1099, ...] +Sample[64]: [-4051, -1540] +Sample[65]: [-4992, 3741, -4296, 7670, -2147483648, -2759, 2147483647, -9956, -6307, -1724, ...] +Sample[66]: [6158] +Sample[67]: [-7461, -1101, -2147483648] +Sample[68]: [6912, -2147483648, -9596, 4692, 8654, 4515, -7944, 7459, -6087, -5334, ...] +Sample[69]: [2539, -2147483648, 5679, 4213, -611, -7936, -8966, 6576, -2147483648, 338, ...] +Sample[70]: [-5567, 7460, -3668, 8434] +Sample[71]: [8211, 4688, -2582, 2147483647, -5916, -7152, -7054] +Sample[72]: [-3220695, 11321483, 40040139, 2147483647, 47623526, 78588159, 2147483647, 73443275, 48848562, -7780697, ...] +Sample[73]: [-33605391, 19261590, -30273787, -42690592, -36476486, 62851827, -93428652, 25158691, -99251296, 37741483, ...] +Sample[74]: [66511170, -77857482, -42320483, 96005334, -2147483648, -2147483648, -92094319, 62238867, 83768845, 57848930] +Sample[75]: [-23688390, 92222059, 37702692, -35845185, 99534904, -29031671, -93437667, -2147483648, 98457746, 98400907, ...] +Sample[76]: [46942759, 45871385] +Sample[77]: [2147483647, -91499803, 24322162, 53837079, 45262114, 2147483647, -61414879, 26021969, -22477481, -2147483648, ...] +Sample[78]: [21402052, -15822978, 49225046, -20671821, -29624550, -22008800, -39350636, 32676897, -98661806, 61066065, ...] +Sample[79]: [96320076, -35499531, 2147483647, 41453427, 66114263, -6248955, -54256944, 2147483647, 52675064, 12458275, ...] +Sample[80]: [2147483647, -2147483648, -2147483648, 2147483647] +Sample[81]: [2147483647, 23908071, 9057835, -2147483648, 82733636, -2147483648, -93579340, 96989254, -2147483648, -2147483648, ...] +Sample[82]: [33613551, -2147483648, -2147483648, 2147483647, -65224321, 78008603, -90010901] +Sample[83]: [-49167119, -47066866, 10810912, 2147483647, -13773567, -2147483648, 72506603, 2147483647, 35077802, -2147483648, ...] +Sample[84]: [78333720, 51717891, 10108457, -2147483648, 91046060, -83162409, 54887254, 6234617, 74340421, 2147483647, ...] +Sample[85]: [78791485, -51880222, -2147483648, 2147483647, 16020439, -18669123, -59156195, -14379602] +Sample[86]: [433752101, -2147483648, -84740098, -2147483648, -1800963361, -1340051106, -2147483648, 940880881, 661596620, 2040928673, ...] +Sample[87]: [422056159, 1280676416, -308570454, 276762578, -1788725006, 293988391, 825540900, 2147483647, -2147483648, -137210153, ...] +Sample[88]: [-1136525815, -2147483648, 240798794, 449589810, -1129696587, 2147483647, -1484498030, -2147483648, 2147483647, -2147483648, ...] +Sample[89]: [1573533554, 2147483647, -1218051121, 1461989858, 659638322, 1948161982, 2147483647, 784447414, -2147483648, -2147483648, ...] +Sample[90]: [-1242503993, 866603715, -2147483648, -1837021130, -287358218, 1979717829, 2147483647, -894136549, -106896946, 2147483647, ...] +Sample[91]: [2147483647, 1413165768, -1248773309, -2147483648, 1437872148, -21647878, 2147483647, -601373106, 278195967, -943942442, ...] +Sample[92]: [669912481, -1213350497, -2147483648, -2147483648] +Sample[93]: [-1191779931, 646443820, -934271834, -2147483648, 2050524043, 2147483647, -1701326346] +Sample[94]: [1502109730, -1228976194, 2147483647, -2147483648, 1458554170, -2147483648, -2147483648, -892480660, -1912496536, 2147483647, ...] +Sample[95]: [154427055, 2147483647, 397240992, -2147483648, 2147483647, 2147483647, 2147483647, 572727187, -2116055364, -69832266, ...] +Sample[96]: [976344724, 1258930616, 96602273, 824973870, -2147483648, -2147483648, 910231540, 614295519, -1585711951, -2147483648, ...] +Sample[97]: [-2147483648, -2147483648, 535698620, 2147483647, -1667728904, -1172035985, -1746202478, -2147483648, -2147483648, 1044774515, ...] +Sample[98]: [2147483647, 1977877826, 1952502632, 2008332764, 131374306, 2147483647, 2147483647, 2147483647, 1694590418, 450006338, ...] +Sample[99]: [969328421, 2147483647, 1515633547, 1238457518, -2147483648, -2050907507, 254455468, 2147483647, 46981761, 2147483647, ...] diff --git a/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryProperty.snap b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryProperty.snap new file mode 100644 index 00000000..29888f53 --- /dev/null +++ b/src/GalaxyCheck.Tests/RunnerTests/PrintTests/__snapshots__/PrintAsyncProperty.PrintUnaryProperty.snap @@ -0,0 +1,102 @@ +Sampled 100 values (0 discarded): + +Sample[0]: 0 +Sample[1]: -1 +Sample[2]: 0 +Sample[3]: -1 +Sample[4]: -1 +Sample[5]: 0 +Sample[6]: 0 +Sample[7]: 1 +Sample[8]: 0 +Sample[9]: 1 +Sample[10]: 0 +Sample[11]: 0 +Sample[12]: 1 +Sample[13]: -1 +Sample[14]: 1 +Sample[15]: 1 +Sample[16]: 0 +Sample[17]: 4 +Sample[18]: -2 +Sample[19]: 1 +Sample[20]: 1 +Sample[21]: -3 +Sample[22]: -4 +Sample[23]: -5 +Sample[24]: 1 +Sample[25]: -3 +Sample[26]: -3 +Sample[27]: -4 +Sample[28]: 4 +Sample[29]: 3 +Sample[30]: -9 +Sample[31]: 10 +Sample[32]: 9 +Sample[33]: 6 +Sample[34]: -1 +Sample[35]: 7 +Sample[36]: -2 +Sample[37]: 1 +Sample[38]: -3 +Sample[39]: -9 +Sample[40]: 4 +Sample[41]: -6 +Sample[42]: 1 +Sample[43]: -9 +Sample[44]: 10 +Sample[45]: 71 +Sample[46]: 82 +Sample[47]: 84 +Sample[48]: -10 +Sample[49]: -29 +Sample[50]: 98 +Sample[51]: 15 +Sample[52]: 9 +Sample[53]: -7 +Sample[54]: -47 +Sample[55]: -72 +Sample[56]: 8 +Sample[57]: 3 +Sample[58]: -4937 +Sample[59]: 3641 +Sample[60]: 1513 +Sample[61]: -2147483648 +Sample[62]: -3331 +Sample[63]: -4390 +Sample[64]: 5076 +Sample[65]: -2147483648 +Sample[66]: 2017 +Sample[67]: -5373 +Sample[68]: 7419 +Sample[69]: 6653 +Sample[70]: 4449 +Sample[71]: 1580 +Sample[72]: 95874679 +Sample[73]: 2147483647 +Sample[74]: 2574400 +Sample[75]: -41507365 +Sample[76]: 33413568 +Sample[77]: 33176929 +Sample[78]: 2147483647 +Sample[79]: -95179058 +Sample[80]: -2147483648 +Sample[81]: 2147483647 +Sample[82]: 38997952 +Sample[83]: -49520813 +Sample[84]: 95029007 +Sample[85]: 55403711 +Sample[86]: 901849426 +Sample[87]: 2147483647 +Sample[88]: -1921146891 +Sample[89]: 2136472076 +Sample[90]: -1028003834 +Sample[91]: 2147483647 +Sample[92]: -1499252768 +Sample[93]: 2147483647 +Sample[94]: -2147483648 +Sample[95]: -2147483648 +Sample[96]: -2000205539 +Sample[97]: -1466231697 +Sample[98]: 1256886173 +Sample[99]: 2147483647 diff --git a/src/GalaxyCheck/Runners/Check/Automata/PresentationInferrer.cs b/src/GalaxyCheck/Runners/Check/Automata/PresentationInferrer.cs deleted file mode 100644 index 8933bb57..00000000 --- a/src/GalaxyCheck/Runners/Check/Automata/PresentationInferrer.cs +++ /dev/null @@ -1,66 +0,0 @@ -using GalaxyCheck; -using GalaxyCheck.ExampleSpaces; -using GalaxyCheck.Internal; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace GalaxyCheck.Runners.Check.Automata -{ - internal static class PresentationInferrer - { - public static IReadOnlyList InferValue(IEnumerable?>> exampleSpaceHistory) - { - return InferExampleSpace(exampleSpaceHistory)?.Current.Value ?? new object?[] { }; - } - - public static IExampleSpace? InferExampleSpace(IEnumerable?>> exampleSpaceHistory) - { - var (head, tail) = exampleSpaceHistory.Reverse(); - - if (head?.Value == null) - { - return null; - } - - var lastId = head.Value.Current.Id; - - var presentationalExampleSpaces = - from lazyExs in tail - let exs = lazyExs.Value - where exs != null - where exs.Current.Id == lastId - where exs.Current.Value == null || IsTest(exs.Current.Value) == false - select exs; - - return presentationalExampleSpaces.FirstOrDefault()?.Map(UnwrapBinding); - } - - private static bool IsTest(object obj) - { - return obj.GetType().GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Test<>)); - } - - private static object?[] UnwrapBinding(object? obj) - { - static object?[] UnwrapBindingRec(object? obj) - { - var type = obj?.GetType(); - - if (type != null && type.IsAnonymousType()) - { - return type.GetProperties().SelectMany(p => UnwrapBindingRec(p.GetValue(obj))).ToArray(); - } - - return new[] { obj }; - } - - if (obj?.GetType().IsAnonymousType() == true) - { - return UnwrapBindingRec(obj); - } - - return new object?[] { obj }; - } - } -} diff --git a/src/GalaxyCheck/Runners/Check/AsyncAutomata/PresentationInferrer.cs b/src/GalaxyCheck/Runners/Check/PresentationInferrer.cs similarity index 92% rename from src/GalaxyCheck/Runners/Check/AsyncAutomata/PresentationInferrer.cs rename to src/GalaxyCheck/Runners/Check/PresentationInferrer.cs index 4c92322c..fc472bd2 100644 --- a/src/GalaxyCheck/Runners/Check/AsyncAutomata/PresentationInferrer.cs +++ b/src/GalaxyCheck/Runners/Check/PresentationInferrer.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Linq; -namespace GalaxyCheck.Runners.Check.AsyncAutomata +namespace GalaxyCheck.Runners.Check { internal static class PresentationInferrer { @@ -38,7 +38,7 @@ from lazyExs in tail private static bool IsTest(object obj) { - return obj.GetType().GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(AsyncTest<>)); + return obj.GetType().GetInterfaces().Any(t => t.IsGenericType && (t.GetGenericTypeDefinition() == typeof(Test<>) || t.GetGenericTypeDefinition() == typeof(AsyncTest<>))); } private static object?[] UnwrapBinding(object? obj)