From 64a0b9edb2cc8ba11cd0500d6a1be657fc16d606 Mon Sep 17 00:00:00 2001 From: konard Date: Sun, 14 Sep 2025 00:06:56 +0300 Subject: [PATCH 1/3] Initial commit with task details for issue #26 Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: https://github.com/linksplatform/Random/issues/26 --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..9f14290 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +Issue to solve: https://github.com/linksplatform/Random/issues/26 +Your prepared branch: issue-26-503fd16d +Your prepared working directory: /tmp/gh-issue-solver-1757797614522 + +Proceed. \ No newline at end of file From 80335a2701686b0a305daa58a322eab2e910f177 Mon Sep 17 00:00:00 2001 From: konard Date: Sun, 14 Sep 2025 00:11:36 +0300 Subject: [PATCH 2/3] Significantly expand test coverage for Platform.Random library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added comprehensive tests for RandomExtensions: - NextUInt64 without range parameter with proper randomness validation - NextUInt64 with various range scenarios (minimum, large, zero ranges) - NextBoolean with deterministic seed testing and distribution validation - Edge case testing for boundary values - Cross-seed validation to ensure different sequences Enhanced RandomHelpers tests: - Singleton pattern validation for Default field - Type verification and functional testing - Random value generation verification with proper distribution Increased total test count from 3 to 16 tests, providing much better coverage of all public methods and edge cases. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../RandomExtensionsTests.cs | 141 ++++++++++++++++++ .../RandomHelpersTests.cs | 49 ++++++ 2 files changed, 190 insertions(+) diff --git a/csharp/Platform.Random.Tests/RandomExtensionsTests.cs b/csharp/Platform.Random.Tests/RandomExtensionsTests.cs index 819c462..1d0e03b 100644 --- a/csharp/Platform.Random.Tests/RandomExtensionsTests.cs +++ b/csharp/Platform.Random.Tests/RandomExtensionsTests.cs @@ -1,9 +1,150 @@ +using System.Linq; +using Platform.Ranges; using Xunit; namespace Platform.Random.Tests { public class RandomExtensionsTests { + [Fact] + public void NextUInt64_WithoutRange_ReturnsValidValues() + { + var random = new System.Random(42); + var values = new ulong[100]; + + for (var i = 0; i < values.Length; i++) + { + values[i] = random.NextUInt64(); + Assert.InRange(values[i], ulong.MinValue, ulong.MaxValue); + } + + var uniqueValues = values.Distinct().Count(); + Assert.True(uniqueValues > 50, "Should generate varied random values"); + } + + [Fact] + public void NextUInt64_WithRange_ReturnsValuesInRange() + { + var random = new System.Random(42); + var range = new Range(10UL, 20UL); + + for (var i = 0; i < 100; i++) + { + var value = random.NextUInt64(range); + Assert.InRange(value, range.Minimum, range.Maximum); + } + } + + [Fact] + public void NextUInt64_WithMinimumRange_ReturnsMinimumValue() + { + var random = new System.Random(42); + var range = new Range(5UL, 5UL); + + var value = random.NextUInt64(range); + Assert.Equal(5UL, value); + } + + [Fact] + public void NextUInt64_WithLargeRange_ReturnsValidValues() + { + var random = new System.Random(42); + var range = new Range(ulong.MaxValue - 1000UL, ulong.MaxValue); + + for (var i = 0; i < 10; i++) + { + var value = random.NextUInt64(range); + Assert.InRange(value, range.Minimum, range.Maximum); + } + } + + [Fact] + public void NextUInt64_WithZeroRange_ReturnsZero() + { + var random = new System.Random(42); + var range = new Range(0UL, 0UL); + + var value = random.NextUInt64(range); + Assert.Equal(0UL, value); + } + + [Fact] + public void NextUInt64_WithDifferentSeeds_GeneratesDifferentSequences() + { + var random1 = new System.Random(1); + var random2 = new System.Random(2); + var range = new Range(0UL, 1000UL); + + var values1 = new ulong[10]; + var values2 = new ulong[10]; + + for (var i = 0; i < 10; i++) + { + values1[i] = random1.NextUInt64(range); + values2[i] = random2.NextUInt64(range); + } + + Assert.NotEqual(values1, values2); + } + + [Fact] + public void NextBoolean_GeneratesBothTrueAndFalse() + { + var random = new System.Random(42); + var trueCount = 0; + var falseCount = 0; + + for (var i = 0; i < 1000; i++) + { + var value = random.NextBoolean(); + if (value) + { + trueCount++; + } + else + { + falseCount++; + } + } + + Assert.True(trueCount > 0, "Should generate at least one true value"); + Assert.True(falseCount > 0, "Should generate at least one false value"); + Assert.InRange(trueCount, 300, 700); + Assert.InRange(falseCount, 300, 700); + } + + [Fact] + public void NextBoolean_WithSameSeed_GeneratesSameSequence() + { + var random1 = new System.Random(123); + var random2 = new System.Random(123); + + for (var i = 0; i < 10; i++) + { + var value1 = random1.NextBoolean(); + var value2 = random2.NextBoolean(); + Assert.Equal(value1, value2); + } + } + + [Fact] + public void NextBoolean_WithDifferentSeeds_GeneratesDifferentSequences() + { + var random1 = new System.Random(1); + var random2 = new System.Random(2); + + var values1 = new bool[20]; + var values2 = new bool[20]; + + for (var i = 0; i < 20; i++) + { + values1[i] = random1.NextBoolean(); + values2[i] = random2.NextBoolean(); + } + + Assert.NotEqual(values1, values2); + } + [Fact] public void NextUInt64Test() { diff --git a/csharp/Platform.Random.Tests/RandomHelpersTests.cs b/csharp/Platform.Random.Tests/RandomHelpersTests.cs index 4f47704..1c4bb31 100644 --- a/csharp/Platform.Random.Tests/RandomHelpersTests.cs +++ b/csharp/Platform.Random.Tests/RandomHelpersTests.cs @@ -1,9 +1,58 @@ +using System.Linq; using Xunit; namespace Platform.Random.Tests { public class RandomHelpersTests { + [Fact] + public void Default_IsNotNull() + { + Assert.NotNull(RandomHelpers.Default); + } + + [Fact] + public void Default_IsSameInstance() + { + var instance1 = RandomHelpers.Default; + var instance2 = RandomHelpers.Default; + + Assert.Same(instance1, instance2); + } + + [Fact] + public void Default_IsRandomInstance() + { + Assert.IsType(RandomHelpers.Default); + } + + [Fact] + public void Default_GeneratesRandomValues() + { + var values = new int[100]; + for (var i = 0; i < values.Length; i++) + { + values[i] = RandomHelpers.Default.Next(); + } + + var uniqueValues = values.Distinct().Count(); + Assert.True(uniqueValues > 50, "Should generate varied random values"); + } + + [Fact] + public void Default_NextMethodWorks() + { + var value = RandomHelpers.Default.Next(0, 100); + Assert.InRange(value, 0, 99); + } + + [Fact] + public void Default_NextDoubleWorks() + { + var value = RandomHelpers.Default.NextDouble(); + Assert.InRange(value, 0.0, 1.0); + } + [Fact] public void DefaultFieldTest() { From cfe33f218a7ee32f40a401c4e9a6335fdba9accd Mon Sep 17 00:00:00 2001 From: konard Date: Sun, 14 Sep 2025 00:12:51 +0300 Subject: [PATCH 3/3] Remove CLAUDE.md - Claude command completed --- CLAUDE.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 9f14290..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,5 +0,0 @@ -Issue to solve: https://github.com/linksplatform/Random/issues/26 -Your prepared branch: issue-26-503fd16d -Your prepared working directory: /tmp/gh-issue-solver-1757797614522 - -Proceed. \ No newline at end of file