2 Commits

Author SHA256 Message Date
Minimons
959bd7dd66 NoIssue: Added some tests for random ints 2025-11-28 17:17:22 +01:00
Minimons
0938645cd0 NoIssue: Clean-up 2025-11-26 15:31:53 +01:00
5 changed files with 117 additions and 110 deletions

View File

@@ -29,8 +29,8 @@ repositories {
dependencies {
// The test classes are compiled with these:
implementation("com.r35157.libs:random-api:0.0.0")
implementation("com.r35157.libs:random-impl-ref:0.0.0")
implementation("com.r35157.libs:random-api:0.1-dev")
implementation("com.r35157.libs:random-impl-ref:0.1-dev")
implementation("org.jetbrains:annotations:26.0.1")
// The JUnit platform will not be included in the JAR file but are needed for running the tests:

View File

@@ -1,52 +0,0 @@
package com.r35157.libs.random.tests;
import com.r35157.libs.random.SomeInterface;
import com.r35157.libs.random.impl.ref.SomeImpl;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
@DisplayName("Happy Initialization Tests")
public class HappyInitializationTests {
@BeforeAll
public static void beforeAll() {
System.out.println("==== Before All");
}
@BeforeEach
public void beforeEach() {
System.out.println("---- Before Each");
}
@DisplayName("Just a basic test")
@Test
void someBasicTest() {
// Arrange
String a = "abc";
String b = "def";
String expected = "abcdef";
SomeInterface sut = new SomeImpl();
// Act
String actual = sut.concat(a, b);
// Assert
assertTrue(actual.equals(expected));
}
@Disabled("Test disabled")
@Test
void dummyTest2() {
assertTrue(false);
}
@AfterEach
public void afterEach() {
System.out.println("**** After Each");
}
@AfterAll
public static void afterAll() {
System.out.println("==== After All");
}
}

View File

@@ -1,56 +0,0 @@
package com.r35157.libs.random.tests;
import com.r35157.libs.random.SomeInterface;
import com.r35157.libs.random.impl.ref.SomeImpl;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("Sad Initialization Tests")
public class SadInitializationTests {
@BeforeAll
public static void beforeAll() {
System.out.println("==== Before All");
}
@BeforeEach
public void beforeEach() {
System.out.println("---- Before Each");
}
@DisplayName("Just another basic test")
@Test
void anotherBasicTest() {
// Arrange + act
SomeInterface sut = new SomeImpl();
String expectedErrorMsg = "/ by zero";
ArithmeticException thrown = assertThrows(
ArithmeticException.class,
sut::divideByZero,
"Expected an exception to be thrown while dividing by zero, but it didn't"
);
String actualErrorMsg = thrown.getMessage();
// Assert
assertEquals(expectedErrorMsg, actualErrorMsg);
}
@Disabled("Test disabled")
@Test
void dummyTest2() {
assertTrue(false);
}
@AfterEach
public void afterEach() {
System.out.println("**** After Each");
}
@AfterAll
public static void afterAll() {
System.out.println("==== After All");
}
}

View File

@@ -0,0 +1,81 @@
package com.r35157.libs.random.tests.happy;
import com.r35157.libs.random.RandomValueGeneratorInt;
import com.r35157.libs.random.impl.ref.RandomValueGeneratorIntImpl;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("Happy Random Ints Tests")
public class CorrectRandomIntsTests {
@DisplayName("Extreme narrow band works - always only one value possible")
@Test
void testThatEqualMinMaxBoundsWorks() {
// Arrange
int minBound = 7;
int maxBound = 7;
int expected = 7;
RandomValueGeneratorInt sut = new RandomValueGeneratorIntImpl();
// Act
int actual = sut.getSomeInt(minBound, maxBound);
// Assert
assertEquals(expected, actual);
}
@DisplayName("Produces different values over multiple calls")
@Test
void producesDifferentValuesOverMultipleCalls() {
// Arrange
int iterations = 5;
RandomValueGeneratorInt sut = new RandomValueGeneratorIntImpl();
Set<Integer> seen = new HashSet<>();
// Act
for (int i = 0; i < iterations; i++) {
seen.add(sut.getSomeInt());
}
// Arrange
assertTrue(seen.size() > 1, "Int generator returned the same value every time");
}
@DisplayName("Will never throw")
@Test
void noArgsMethodNeverThrows() {
// Arrange
int iterations = 10_000;
RandomValueGeneratorIntImpl sut = new RandomValueGeneratorIntImpl();
// Act + Assert
for (int i = 0; i < iterations; i++) {
assertDoesNotThrow(() -> sut.getSomeInt());
}
}
@Test
void returnsBothPositiveAndNegative() {
// Arrange
int iterations = 1_000_000;
boolean seenPos = false, seenNeg = false;
RandomValueGeneratorIntImpl sut = new RandomValueGeneratorIntImpl();
// Act
for (int i = 0; i < iterations; i++) {
int v = sut.getSomeInt();
if (v > 0) seenPos = true;
if (v < 0) seenNeg = true;
if (seenPos && seenNeg) break;
}
// Assert
assertTrue(seenPos, "Never saw positive number");
assertTrue(seenNeg, "Never saw negative number");
}
}

View File

@@ -0,0 +1,34 @@
package com.r35157.libs.random.tests.sad;
import com.r35157.libs.random.RandomValueGeneratorInt;
import com.r35157.libs.random.impl.ref.RandomValueGeneratorIntImpl;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@DisplayName("Sad Random Ints Tests")
public class IncorrectRandomIntsTests {
@DisplayName("RandomInts.getSomeInts()")
@Test
void testThatMinBoundIsGreaterThanMaxBoundThrows() {
// Arrange
int minBound = 10;
int maxBound = 5;
String expectedErrorMsg = String.format("'minInclusive' (%d) must be less than or equal to 'maxInclusive' (%d)",
minBound, maxBound);
RandomValueGeneratorInt sut = new RandomValueGeneratorIntImpl();
// Act
IllegalArgumentException thrown = assertThrows(
IllegalArgumentException.class,
() -> sut.getSomeInt(minBound, maxBound)
);
// Assert
String actualErrorMsg = thrown.getMessage();
assertEquals(expectedErrorMsg, actualErrorMsg);
}
}