[Add] new strategy

This commit is contained in:
2023-10-23 13:50:38 +07:00
parent 68750acedb
commit 98c8ad5a6b
2 changed files with 90 additions and 0 deletions
@@ -0,0 +1,48 @@
package com.github.tiennm99.lotterygenerator;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class BaseOnDateLotteryGenerator implements LotteryGenerator {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
/** yyyyMMdd */
private String date;
private String getDate() {
if (date == null) {
var currentDate = LocalDate.now();
return currentDate.format(formatter);
}
return date;
}
public void setDate(String date) {
try {
LocalDate.parse(date, formatter);
} catch (DateTimeParseException e) {
System.out.println("Input date is not valid.");
return;
}
this.date = date;
}
@Override
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
var date = getDate();
var dateNumber = Integer.parseInt(date);
var random = new Random(dateNumber);
var result = new HashSet<Integer>();
while (result.size() < numNumber) {
var number = random.nextInt(totalNumber);
result.add(number);
}
return result;
}
}
@@ -0,0 +1,42 @@
package com.github.tiennm99.lotterygenerator;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class BaseOnDateLotteryGeneratorTest {
@Test
void testMega645() {
var generator = new BaseOnDateLotteryGenerator();
var numbers = generator.generateNumbers(45, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());
for (int number : numbers) {
assertTrue(number >= 1 && number <= 45);
}
}
@Test
void testMega655() {
var generator = new BaseOnDateLotteryGenerator();
generator.setDate("20231024");
var numbers = generator.generateNumbers(55, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());
for (int number : numbers) {
assertTrue(number >= 1 && number <= 55);
}
}
@Test
void testSetInvalidDate() {
var generator = new BaseOnDateLotteryGenerator();
generator.setDate("20231313");
var numbers = generator.generateNumbers(55, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());
for (int number : numbers) {
assertTrue(number >= 1 && number <= 55);
}
}
}