Skip to content

Commit f7d3811

Browse files
committed
Minor refactor of extensions, some useful random extension methods for internal use
1 parent 572e1a2 commit f7d3811

17 files changed

Lines changed: 60 additions & 24 deletions
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Forged.Core.Core;
2+
3+
internal static class RandomExtensions
4+
{
5+
extension(Random rng)
6+
{
7+
internal bool Chance(float chance)
8+
{
9+
return rng.NextSingle() < chance;
10+
}
11+
12+
internal T GetItem<T>(params T[] items)
13+
{
14+
return items[rng.Next(items.Length)];
15+
}
16+
}
17+
}

Forged.Core/Generators/Extensions/CollectionGeneratorExtensions.cs renamed to Forged.Core/Extensions/CollectionGeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
using Forged.Core.Generators;
12
using Forged.Core.Generators.Utility;
23

3-
namespace Forged.Core.Generators.Extensions;
4+
namespace Forged.Core.Extensions;
45

56
/// <summary>
67
/// Extension methods for ICollection generators.

Forged.Core/Generators/Extensions/DateTimeGeneratorExtensions.cs renamed to Forged.Core/Extensions/DateTimeGeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
using Forged.Core.Generators;
12
using Forged.Core.Generators.Utility.Temporal;
23

3-
namespace Forged.Core.Generators.Extensions;
4+
namespace Forged.Core.Extensions;
45

56
/// <summary>
67
/// Extension methods for DateTime generators.

Forged.Core/Generators/Extensions/EnumerableGeneratorExtensions.cs renamed to Forged.Core/Extensions/EnumerableGeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
using Forged.Core.Generators;
12
using Forged.Core.Generators.Utility;
23
using Forged.Core.Generators.Utility.Collections;
34

4-
namespace Forged.Core.Generators.Extensions;
5+
namespace Forged.Core.Extensions;
56

67
/// <summary>
78
/// Extension methods for IEnumerable generators.

Forged.Core/Generators/Extensions/GeneratorExtensions.cs renamed to Forged.Core/Extensions/GeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using System.Globalization;
2+
using Forged.Core.Generators;
23
using Forged.Core.Generators.Utility.Text;
34

4-
namespace Forged.Core.Generators.Extensions;
5+
namespace Forged.Core.Extensions;
56

67
/// <summary>
78
/// Provides general extension methods for the <see cref="Generator{T}"/> class.

Forged.Core/Generators/Extensions/StringGeneratorExtensions.cs renamed to Forged.Core/Extensions/StringGeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System.Globalization;
22
using System.Text.RegularExpressions;
3+
using Forged.Core.Generators;
34
using Forged.Core.Generators.Utility.Text;
45

5-
namespace Forged.Core.Generators.Extensions;
6+
namespace Forged.Core.Extensions;
67

78
/// <summary>
89
/// Extension methods for string generators.

Forged.Core/Generators/Extensions/StructGeneratorExtensions.cs renamed to Forged.Core/Extensions/StructGeneratorExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
using Forged.Core.Generators;
12
using Forged.Core.Generators.Utility;
23

3-
namespace Forged.Core.Generators.Extensions;
4+
namespace Forged.Core.Extensions;
45

56
/// <summary>
67
/// Extension methods for struct generators.

Forged.Core/Generators/Internet/DomainGenerator.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Text.Json;
22
using System.Text.Json.Serialization;
3+
using Forged.Core.Core;
34
using JetBrains.Annotations;
45

56
namespace Forged.Core.Generators.Internet;
@@ -31,14 +32,14 @@ public override string Generate()
3132
{
3233
var data = _cache.Value;
3334

34-
var domain = Rng.GetItems(data.Tld, 1)[0];
35-
if (_ccSldChance <= float.Epsilon || Rng.NextDouble() <= _ccSldChance)
35+
var domain = Rng.GetItem(data.Tld);
36+
if (_ccSldChance <= 0 || Rng.Chance(_ccSldChance))
3637
{
3738
return domain;
3839
}
3940

4041
var slds = data.CcSld.Except([domain]).ToArray();
41-
var sld = Rng.GetItems(slds, 1)[0];
42+
var sld = Rng.GetItem(slds);
4243

4344
return $"{sld}.{domain}";
4445
}

Forged.Core/Generators/Internet/EmailGenerator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Concurrent;
22
using System.Text.Json;
33
using System.Text.Json.Serialization;
4+
using Forged.Core.Core;
45
using JetBrains.Annotations;
56
using NetEscapades.EnumGenerators;
67

@@ -25,8 +26,8 @@ public override string Generate()
2526

2627
var domain = kind switch
2728
{
28-
EmailKind.Known => Rng.GetItems(_providers.ToArray(), 1)[0],
29-
EmailKind.Example => Rng.GetItems(["example.com", "example.org", "example.net"], 1)[0],
29+
EmailKind.Known => Rng.GetItem(_providers.ToArray()),
30+
EmailKind.Example => Rng.GetItem(["example.com", "example.org", "example.net"]),
3031
EmailKind.Random => $"{Forge.Text.Pronounceable(1, 3)}.{Forge.Internet.Domain()}",
3132
_ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null)
3233
};

Forged.Core/Generators/Internet/UsernameGenerator.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Frozen;
22
using System.Text.Json;
33
using System.Text.Json.Serialization;
4+
using Forged.Core.Core;
45
using JetBrains.Annotations;
56

67
namespace Forged.Core.Generators.Internet;
@@ -52,8 +53,8 @@ public override string Generate()
5253
{
5354
var data = FileLoader.LoadData(Locale.Name, "internet/username", UserDataContext.Default.UserData);
5455

55-
var usePrefix = Rng.NextSingle() < prefixChance;
56-
var useSuffix = Rng.NextSingle() < suffixChance;
56+
var usePrefix = Rng.Chance(prefixChance);
57+
var useSuffix = Rng.Chance(suffixChance);
5758

5859
var prefix = usePrefix ? data.Prefixes[Rng.Next(data.Prefixes.Length)] : string.Empty;
5960
var suffix = useSuffix ? data.Suffixes[Rng.Next(data.Suffixes.Length)] : string.Empty;
@@ -67,11 +68,11 @@ public override string Generate()
6768
var newCore = new List<char>(core.Length);
6869
foreach (var ch in core)
6970
{
70-
if (Rng.NextSingle() < leetChance)
71+
if (Rng.Chance(leetChance))
7172
{
7273
if (_leetReplacements.TryGetValue(ch, out var replacement))
7374
{
74-
newCore.AddRange(Rng.GetItems(replacement, 1)[0]);
75+
newCore.AddRange(Rng.GetItem(replacement));
7576
}
7677

7778
newCore.Add(ch);

0 commit comments

Comments
 (0)