Skip to content

Commit 63529c4

Browse files
authored
Add Min/Max to IPv4, IPv6 and MAC addresses generation (StefH#6)
* RandomizerIPv4Address * ipv6 * MAC * fix RandomizerIPv4Address * refactor
1 parent c33764d commit 63529c4

32 files changed

+241
-60
lines changed

src/ConsoleAppClassic/MainTest.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,27 @@ public static void Run()
1414
var randomizerCity = RandomizerFactory.GetRandomizer(new FieldOptionsCity());
1515
string city = randomizerCity.Generate();
1616
Write(randomizerCity, city);
17+
string cityUpper = randomizerCity.Generate(true);
18+
Write(randomizerCity, cityUpper);
1719

1820
var randomizerCountry = RandomizerFactory.GetRandomizer(new FieldOptionsCountry());
1921
string country = randomizerCountry.Generate();
2022
Write(randomizerCountry, country);
2123

24+
var randomizerMAC = RandomizerFactory.GetRandomizer(new FieldOptionsMACAddress { Min = "00-11-22-33-44-55", Max = "aa-bb-cc-dd-ee-ff", Separator = "-" });
25+
string mac = randomizerMAC.Generate();
26+
Write(randomizerMAC, mac);
27+
28+
var randomizerIPv4 = RandomizerFactory.GetRandomizer(new FieldOptionsIPv4Address { Min = "127.0.2.233", Max = "128.190.255.244" });
29+
string ipv4 = randomizerIPv4.Generate();
30+
Write(randomizerIPv4, ipv4);
31+
32+
var randomizerIPv6 = RandomizerFactory.GetRandomizer(new FieldOptionsIPv6Address { Min = "0000:0001:0000:0000:0020:ff00:0042:8000", Max = "2001:0db8:0120:0000:0030:ff00:aa42:8329" });
33+
string ipv6 = randomizerIPv6.Generate();
34+
Write(randomizerIPv6, ipv6);
35+
string ipv6Lower = randomizerIPv6.Generate(false);
36+
Write(randomizerIPv6, ipv6Lower);
37+
2238
var randomizerTimeSpan = RandomizerFactory.GetRandomizer(new FieldOptionsTimeSpan { From = TimeSpan.FromDays(1), To = TimeSpan.FromDays(7) });
2339
TimeSpan? ts = randomizerTimeSpan.Generate();
2440
Write(randomizerTimeSpan, ts);
@@ -27,7 +43,7 @@ public static void Run()
2743
string tsC = randomizerTimeSpanC.GenerateAsString();
2844
Write(randomizerTimeSpanC, tsC);
2945

30-
var randomizerDateTime = RandomizerFactory.GetRandomizer(new FieldOptionsDateTime { From = DateTime.Today.AddDays(-1888) });
46+
var randomizerDateTime = RandomizerFactory.GetRandomizer(new FieldOptionsDateTime { From = DateTime.Today.AddYears(-1) });
3147
DateTime? date = randomizerDateTime.Generate();
3248
Write(randomizerDateTime, date);
3349
string dateAsString = randomizerDateTime.GenerateAsString();
@@ -45,10 +61,18 @@ public static void Run()
4561
string firstname = randomizerFirstName.Generate();
4662
Write(randomizerFirstName, firstname);
4763

64+
var randomizerLastName = RandomizerFactory.GetRandomizer(new FieldOptionsLastName());
65+
string lastname = randomizerLastName.Generate();
66+
Write(randomizerLastName, lastname);
67+
4868
var randomizerBoolean = RandomizerFactory.GetRandomizer(new FieldOptionsBoolean());
4969
bool? b = randomizerBoolean.Generate();
5070
Write(randomizerBoolean, b);
5171

72+
var randomizerByte = RandomizerFactory.GetRandomizer(new FieldOptionsByte());
73+
byte? bt = randomizerByte.Generate();
74+
Write(randomizerByte, bt);
75+
5276
var randomizerShort = RandomizerFactory.GetRandomizer(new FieldOptionsShort());
5377
short? sh = randomizerShort.Generate();
5478
Write(randomizerShort, sh);
@@ -75,7 +99,7 @@ public static void Run()
7599
string guidAsString = randomizerGuid.GenerateAsString();
76100
Write(randomizerGuid, guidAsString);
77101

78-
var randomizerStringList = RandomizerFactory.GetRandomizer(new FieldOptionsStringList { Values = new[] { "1", "b" }.ToList() });
102+
var randomizerStringList = RandomizerFactory.GetRandomizer(new FieldOptionsStringList { Values = new[] { "1", "b", "c" }.ToList() });
79103
string stringListValue = randomizerStringList.Generate();
80104
Write(randomizerStringList, stringListValue);
81105

@@ -114,7 +138,7 @@ public static void Run()
114138
private static void Write<T>(object randomizer, T value)
115139
{
116140
Type genericType = randomizer.GetType().GetTypeInfo().GenericTypeArguments.FirstOrDefault();
117-
Console.WriteLine("{0}{1} --> '{2}'", randomizer.GetType().Name, genericType != null ? $"[{genericType}]" : string.Empty, value);
141+
Console.WriteLine("{0}{1} --> '{2}'", randomizer.GetType().Name, genericType != null ? $"[{genericType.Name}]" : string.Empty, value);
118142
}
119143
}
120144
}

src/RandomDataGenerator.Gui/UserControlsFields/UserControlMACAddress.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ public override void SetOptionsAndUpdateControls(FieldOptionsMACAddress options)
1616
{
1717
base.SetOptionsAndUpdateControls(options);
1818

19-
chkAddColons.Checked = FieldOptions.AddColons;
19+
chkAddColons.Checked = FieldOptions.Separator == ":";
2020
chkUppercase.Checked = FieldOptions.Uppercase;
2121
}
2222

2323
public override FieldOptionsMACAddress GetFieldOptionsT()
2424
{
2525
FieldOptions = base.GetFieldOptionsT();
2626

27-
FieldOptions.AddColons = chkAddColons.Checked;
27+
FieldOptions.Separator = chkAddColons.Checked ? ":" : string.Empty;
2828
FieldOptions.Uppercase = chkUppercase.Checked;
2929

3030
return FieldOptions;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace RandomDataGenerator.Extensions
2+
{
3+
internal static class StringExtensions
4+
{
5+
public static string ToCasedInvariant(this string str, bool toUpper)
6+
{
7+
if (str == null)
8+
{
9+
return null;
10+
}
11+
12+
return toUpper ? str.ToUpperInvariant() : str.ToLowerInvariant();
13+
}
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+

2+
namespace RandomDataGenerator.FieldOptions
3+
{
4+
public class FieldOptionsByte : FieldOptionsNumber<byte>
5+
{
6+
public override byte Min { get; set; }
7+
8+
public override byte Max { get; set; } = byte.MaxValue;
9+
}
10+
}

src/RandomDataGenerator/FieldOptions/FieldOptionsDateTime.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ public class FieldOptionsDateTime : FieldOptionsAbstract, IFieldOptionsDateTime
88

99
public string Format { get; set; } = DefaultFormat;
1010

11-
public DateTime From { get; set; } = DateTime.Now.Date;
11+
public DateTime From { get; set; } = DateTime.UtcNow.Date;
1212

13-
public DateTime To { get; set; } = DateTime.Now.AddYears(1).Date;
13+
public DateTime To { get; set; } = DateTime.UtcNow.Date.AddYears(1);
1414

1515
public bool IncludeTime { get; set; } = true;
1616
}

src/RandomDataGenerator/FieldOptions/FieldOptionsDouble.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ public class FieldOptionsDouble : FieldOptionsNumber<double>
55
{
66
public override double Min { get; set; }
77

8-
public override double Max { get; set; } = 99999999.0;
8+
public override double Max { get; set; } = double.MaxValue;
99
}
1010
}

src/RandomDataGenerator/FieldOptions/FieldOptionsFloat.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ public class FieldOptionsFloat : FieldOptionsNumber<float>
55
{
66
public override float Min { get; set; }
77

8-
public override float Max { get; set; } = 99999999.0F;
8+
public override float Max { get; set; } = float.MaxValue;
99
}
1010
}

src/RandomDataGenerator/FieldOptions/FieldOptionsIPv4Address.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ namespace RandomDataGenerator.FieldOptions
33
{
44
public class FieldOptionsIPv4Address : FieldOptionsAbstract, IFieldOptionsString
55
{
6+
public string Min { get; set; }
7+
8+
public string Max { get; set; }
69
}
710
}

src/RandomDataGenerator/FieldOptions/FieldOptionsIPv6Address.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,10 @@ namespace RandomDataGenerator.FieldOptions
33
{
44
public class FieldOptionsIPv6Address : FieldOptionsAbstract, IFieldOptionsString
55
{
6+
public bool Uppercase { get; set; }
7+
8+
public string Min { get; set; }
9+
10+
public string Max { get; set; }
611
}
712
}

src/RandomDataGenerator/FieldOptions/FieldOptionsInteger.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ public class FieldOptionsInteger : FieldOptionsNumber<int>
55
{
66
public override int Min { get; set; }
77

8-
public override int Max { get; set; } = 99999999;
8+
public override int Max { get; set; } = int.MaxValue;
99
}
1010
}

src/RandomDataGenerator/FieldOptions/FieldOptionsLong.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ public class FieldOptionsLong : FieldOptionsNumber<long>
55
{
66
public override long Min { get; set; }
77

8-
public override long Max { get; set; } = 999999999999;
8+
public override long Max { get; set; } = long.MaxValue;
99
}
1010
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-

2-
namespace RandomDataGenerator.FieldOptions
1+
namespace RandomDataGenerator.FieldOptions
32
{
43
public class FieldOptionsMACAddress : FieldOptionsAbstract, IFieldOptionsString
54
{
6-
public bool AddColons { get; set; } = true;
5+
public string Separator { get; set; } = ":";
76

87
public bool Uppercase { get; set; } = true;
8+
9+
public string Min { get; set; }
10+
11+
public string Max { get; set; }
912
}
1013
}

src/RandomDataGenerator/FieldOptions/FieldOptionsTextPattern.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,5 @@ public class FieldOptionsTextPattern : FieldOptionsAbstract, IFieldOptionsString
1212
/// \ - for character as-is
1313
/// </summary>
1414
public string Pattern { get; set; }
15-
16-
//public bool UseUppercase { get; set; } = true;
17-
18-
//public bool UseLowercase { get; set; } = true;
19-
20-
//public bool UseLetter { get; set; } = true;
21-
22-
//public bool UseNumber { get; set; } = true;
23-
24-
//public bool UseSpace { get; set; } = true;
25-
26-
//public bool UseSpecial { get; set; }
2715
}
2816
}

src/RandomDataGenerator/FieldOptions/FieldOptionsTimeSpan.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public class FieldOptionsTimeSpan : FieldOptionsAbstract, IFieldOptionsTimeSpan
1212

1313
public TimeSpan From { get; set; }
1414

15-
public TimeSpan To { get; set; } = TimeSpan.FromDays(1);
15+
public TimeSpan To { get; set; } = TimeSpan.MaxValue;
1616
}
1717
}

src/RandomDataGenerator/Generators/RandomValueGenerator.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal static class RandomValueGenerator
1717
private static double _storedUniformDeviate;
1818
private static bool _storedUniformDeviateIsGood;
1919

20-
public static Type[] SupportedTypes { get; } = { typeof(bool), typeof(short), typeof(int), typeof(long), typeof(float), typeof(double), typeof(long), typeof(DateTime), typeof(TimeSpan) };
20+
public static Type[] SupportedTypes { get; } = { typeof(bool), typeof(byte), typeof(short), typeof(int), typeof(long), typeof(float), typeof(double), typeof(long), typeof(DateTime), typeof(TimeSpan) };
2121

2222
#region -- Construction/Initialization --
2323

@@ -73,6 +73,11 @@ public static T Next<T>(T min, T max)
7373
return (T)(object)NextBoolean();
7474
}
7575

76+
if (typeof(T) == typeof(byte))
77+
{
78+
return (T)(object)Next((byte)(object)min, (byte)(object)max);
79+
}
80+
7681
if (typeof(T) == typeof(short))
7782
{
7883
return (T)(object)Next((short)(object)min, (short)(object)max);
@@ -111,6 +116,20 @@ public static T Next<T>(T min, T max)
111116
throw new NotSupportedException($"The type '{typeof(T)}' cannot be used.");
112117
}
113118

119+
/// <summary>
120+
/// Returns byte in the range [min, max)
121+
/// </summary>
122+
public static byte Next(byte min, byte max)
123+
{
124+
if (max <= min)
125+
{
126+
throw new ArgumentException("Max must be greater than min.");
127+
}
128+
129+
double rn = (max * 1.0 - min * 1.0) * _rnf.NextDouble() + min * 1.0;
130+
return Convert.ToByte(rn);
131+
}
132+
114133
/// <summary>
115134
/// Returns Int16 in the range [min, max)
116135
/// </summary>

src/RandomDataGenerator/RandomDataGenerator.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<Version>1.0.3.0</Version>
4+
<Version>1.0.4.0</Version>
55
<AssemblyTitle>Random Data Generator</AssemblyTitle>
66
<Title>Random Data Generator</Title>
77
<PackageDescription>This is a configurable generator to create random data like Lorum Ipsum Text, Words, Text Patterns, First/Last Names, IP-Addresses, Guids, DateTime and more.</PackageDescription>

src/RandomDataGenerator/Randomizers/IRandomizerString.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
public interface IRandomizerString
44
{
55
string Generate();
6+
7+
string Generate(bool upperCase);
68
}
79
}

src/RandomDataGenerator/Randomizers/RandomizerCity.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using RandomDataGenerator.FieldOptions;
1+
using RandomDataGenerator.Extensions;
2+
using RandomDataGenerator.FieldOptions;
23
using RandomDataGenerator.Generators;
34
using RandomDataGenerator.TextData;
45

@@ -17,5 +18,10 @@ public string Generate()
1718
{
1819
return IsNull() ? null : _generator.Generate();
1920
}
21+
22+
public string Generate(bool upperCase)
23+
{
24+
return Generate().ToCasedInvariant(upperCase);
25+
}
2026
}
2127
}

src/RandomDataGenerator/Randomizers/RandomizerCountry.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using RandomDataGenerator.FieldOptions;
1+
using RandomDataGenerator.Extensions;
2+
using RandomDataGenerator.FieldOptions;
23
using RandomDataGenerator.Generators;
34
using RandomDataGenerator.TextData;
45

@@ -17,5 +18,10 @@ public string Generate()
1718
{
1819
return IsNull() ? null : _generator.Generate();
1920
}
21+
22+
public string Generate(bool upperCase)
23+
{
24+
return Generate().ToCasedInvariant(upperCase);
25+
}
2026
}
2127
}

src/RandomDataGenerator/Randomizers/RandomizerEmailAddress.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,10 @@ public string Generate()
5252

5353
return $"{firstName}.{lastname}@{company}.{domain}";
5454
}
55+
56+
public string Generate(bool upperCase)
57+
{
58+
return Generate().ToCasedInvariant(upperCase);
59+
}
5560
}
5661
}

src/RandomDataGenerator/Randomizers/RandomizerFirstName.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using RandomDataGenerator.Extensions;
23
using RandomDataGenerator.FieldOptions;
34
using RandomDataGenerator.Generators;
45
using RandomDataGenerator.TextData;
@@ -37,5 +38,10 @@ public string Generate()
3738

3839
return _genderSetGenerators[maleOrFemale].Generate();
3940
}
41+
42+
public string Generate(bool upperCase)
43+
{
44+
return Generate().ToCasedInvariant(upperCase);
45+
}
4046
}
4147
}

src/RandomDataGenerator/Randomizers/RandomizerFullName.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using RandomDataGenerator.Extensions;
23
using RandomDataGenerator.FieldOptions;
34
using RandomDataGenerator.Generators;
45
using RandomDataGenerator.TextData;
@@ -44,5 +45,10 @@ public string Generate()
4445

4546
return $"{firstName} {lastname}";
4647
}
48+
49+
public string Generate(bool upperCase)
50+
{
51+
return Generate().ToCasedInvariant(upperCase);
52+
}
4753
}
4854
}

src/RandomDataGenerator/Randomizers/RandomizerGuid.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using RandomDataGenerator.Extensions;
23
using RandomDataGenerator.FieldOptions;
34

45
namespace RandomDataGenerator.Randomizers
@@ -26,8 +27,7 @@ public string GenerateAsString()
2627
return null;
2728
}
2829

29-
string guid = Guid.NewGuid().ToString();
30-
return Options.Uppercase ? guid.ToUpperInvariant() : guid.ToLowerInvariant();
30+
return Guid.NewGuid().ToString().ToCasedInvariant(Options.Uppercase);
3131
}
3232
}
3333
}

0 commit comments

Comments
 (0)