Skip to content

Commit

Permalink
New: Random generate unique number
Browse files Browse the repository at this point in the history
  • Loading branch information
VikashChauhan51 committed Jul 11, 2023
1 parent c02169d commit a644c57
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 1 deletion.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# RandomGenerator
A library which generates random passwords, numbers, sentences, paragraphs and texts.

![RandomGenerator Logo](https://github.com/VikashChauhan51/random-generator/blob/main/src/RandomGenerator/RandomGenerator/icon.png "RandomGenerator Logo")
![RandomGenerator Logo](https://github.com/VikashChauhan51/random-generator/blob/main/icon.png "RandomGenerator Logo")
## NuGet

Install via NuGet: ``` Install-Package RandomGenerator ```
Expand Down Expand Up @@ -72,6 +72,12 @@ RandomNumberGenerator.AbsoluteNumber(10);
// this function can generate a random number of length between 1 to 19.
RandomNumberGenerator.AbsoluteLong(10);
```

```C#
// generate random unique number.
RandomNumberGenerator.Number();
```

```C#
// generate random password of specific length with configuration.
var password = new RandomPasswordGenerator()
Expand Down
118 changes: 118 additions & 0 deletions src/RandomGenerator.Test/RandomNumberGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -243,4 +243,122 @@ public void StrongAbsoluteDouble_ReturnsDifferentNumbers()

Assert.NotEqual(firstResult, secondResult);
}

[Fact]
public void Number_ReturnsPositiveLong()
{
// Arrange
// Act
long result = RandomNumberGenerator.Number();

// Assert
Assert.True(result >= 0);
}

[Fact]
public void Number_ReturnsDifferentValuesOnSubsequentCalls()
{
// Arrange

// Act
long result1 = RandomNumberGenerator.Number();
long result2 = RandomNumberGenerator.Number();

// Assert
Assert.NotEqual(result1, result2);
}

[Fact]
public void Number_ReturnsValueLessThanLongMaxValue()
{
// Arrange

// Act
long result = RandomNumberGenerator.Number();

// Assert
Assert.True(result < long.MaxValue);
}

[Fact]
public void Number_ReturnsValueGreaterThanZero()
{
// Arrange

// Act
long result = RandomNumberGenerator.Number();

// Assert
Assert.True(result > 0);
}

[Fact]
public void Number_ReturnsValueWithinExpectedRange()
{
// Arrange
long minValue = 0;
long maxValue = long.MaxValue;

// Act
long result = RandomNumberGenerator.Number();

// Assert
Assert.InRange(result, minValue, maxValue);
}

[Fact]
public void Number_DoesNotThrowException()
{
// Arrange

// Act & Assert
var exception = Record.Exception(() => RandomNumberGenerator.Number());
Assert.Null(exception);
}

[Fact]
public void Number_ReturnsValueOfCorrectType()
{
// Arrange
// Act
var result = RandomNumberGenerator.Number();

// Assert
Assert.IsType<long>(result);
}

[Fact]
public void Number_ReturnsValueWithinOneSecondOfCurrentTime()
{
// Arrange
long currentTimeTicks = DateTime.Now.Ticks;

// Act
long result = RandomNumberGenerator.Number();
long currentResultTimeTicks = DateTime.Now.Ticks;
double resultTime = (double)(currentResultTimeTicks - currentTimeTicks) / TimeSpan.TicksPerSecond;
// Assert
Assert.InRange(resultTime, 0, 1);
}

[Fact]
public void Number_ReturnsDifferentValuesWhenCalledFromDifferentThreads()
{
// Arrange
long result1 = 0;
long result2 = 0;

// Act
var thread1 = new Thread(() => { result1 = RandomNumberGenerator.Number(); });
var thread2 = new Thread(() => { result2 = RandomNumberGenerator.Number(); });

thread1.Start();
thread2.Start();

thread1.Join();
thread2.Join();

// Assert
Assert.NotEqual(result1, result2);
}
}
7 changes: 7 additions & 0 deletions src/RandomGenerator/RandomNumberGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,11 @@ public static double StrongAbsoluteDouble()
return Math.Abs(BitConverter.ToDouble(buffer, 0));
}

public static long Number()
{
long num = (Long(1, long.MaxValue) + DateTime.Now.Ticks);
long number = num % long.MaxValue;
return Math.Abs(number);
}

}

0 comments on commit a644c57

Please sign in to comment.