Skip to content

Commit

Permalink
Fixes some Sonar complaints
Browse files Browse the repository at this point in the history
  • Loading branch information
fathzer committed Nov 28, 2024
1 parent 6844302 commit 45e51bf
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@
public class ChessLibEngine extends AbstractEngine<Move, ChessLibMoveGenerator> implements TestableMoveGeneratorBuilder<Move, ChessLibMoveGenerator>, Displayable {
private static final List<EvaluatorConfiguration<Move, ChessLibMoveGenerator>> EVALUATORS = Arrays.asList(new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new));

private final DeferredReadBook ownBook;
private final DeferredReadBook<Move, ChessLibMoveGenerator> ownBook;

public ChessLibEngine() {
this (null);
}

public ChessLibEngine(DeferredReadBook ownBook) {
public ChessLibEngine(DeferredReadBook<Move, ChessLibMoveGenerator> ownBook) {
super (buildEngine(EVALUATORS.get(0).getBuilder(), 20), new BasicTimeManager<>(RemainingMoveOracle.INSTANCE));
setEvaluators(EVALUATORS);
this.ownBook = ownBook;
Expand All @@ -63,7 +63,7 @@ public String getAuthor() {
return "Jean-Marc Astesana (Fathzer), Move generator is from Ben-Hur Carlos Vieira Langoni Junior";
}

DeferredReadBook getOwnBook() {
DeferredReadBook<Move, ChessLibMoveGenerator> getOwnBook() {
return ownBook;
}

Expand Down
29 changes: 13 additions & 16 deletions src/main/java/com/fathzer/jchess/chesslib/uci/DeferredReadBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,31 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Optional;

import com.fathzer.games.MoveGenerator;
import com.fathzer.games.ai.evaluation.EvaluatedMove;
import com.fathzer.games.movelibrary.MoveLibrary;
import com.fathzer.jchess.chesslib.ChessLibMoveGenerator;
import com.fathzer.jchess.lichess.DefaultOpenings;
import com.github.bhlangonijr.chesslib.move.Move;

class DeferredReadBook implements MoveLibrary<Move, ChessLibMoveGenerator> {
class DeferredReadBook<M, B extends MoveGenerator<M>> implements MoveLibrary<M, B> {
@FunctionalInterface
static interface IOReader<T> {
T read(URL url) throws IOException;
}

private final String url;
private MoveLibrary<Move, ChessLibMoveGenerator> internal;
private IOReader<MoveLibrary<M, B>> reader;
private MoveLibrary<M, B> internal;

DeferredReadBook(String url) {
DeferredReadBook(String url, IOReader<MoveLibrary<M,B>> reader) {
this.url = url;
this.reader = reader;
}

@Override
public Optional<EvaluatedMove<Move>> apply(ChessLibMoveGenerator board) {
public Optional<EvaluatedMove<M>> apply(B board) {
if (internal==null) {
return Optional.empty();
}
Expand All @@ -36,7 +40,7 @@ boolean isInitRequired() {

void init() throws IOException {
if (isInitRequired()) {
internal = readOpenings(toURL(this.url));
internal = reader.read(toURL(this.url));
}
}

Expand All @@ -53,13 +57,6 @@ static URL toURL(String path) throws IOException {
}
return url;
}

protected static MoveLibrary<Move, ChessLibMoveGenerator> readOpenings(final URL location) throws IOException {
final boolean compressed = location.getFile().endsWith(".gz");
try (InputStream stream = location.openStream()) {
return new DefaultOpenings(()->stream, compressed);
}
}

String getUrl() {
return url;
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/com/fathzer/jchess/chesslib/uci/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,31 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Deque;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fathzer.games.movelibrary.MoveLibrary;
import com.fathzer.games.perft.PerfTParser;
import com.fathzer.games.perft.PerfTTestData;
import com.fathzer.jchess.chesslib.ChessLibMoveGenerator;
import com.fathzer.jchess.lichess.DefaultOpenings;
import com.fathzer.jchess.uci.Engine;
import com.fathzer.jchess.uci.UCI;
import com.fathzer.jchess.uci.extended.ExtendedUCI;
import com.fathzer.jchess.uci.extended.SpeedTest;
import com.github.bhlangonijr.chesslib.move.Move;

public class Main extends ExtendedUCI {
private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);

public static void main(String[] args) {
final String pathProperty = System.getProperty("openingsUrl");
//FIXME According to the UCI protocol, process startup should be as quick as possible
//So, reading the openings table should be done on "isready" command
final DeferredReadBook openings = pathProperty==null ? null : new DeferredReadBook(pathProperty);
final DeferredReadBook<Move, ChessLibMoveGenerator> openings = pathProperty==null ? null : new DeferredReadBook<>(pathProperty, Main::readOpenings);
try (UCI uci = new Main(new ChessLibEngine(openings))) {
uci.run();
}
Expand All @@ -38,7 +41,7 @@ public Main(Engine defaultEngine) {
@Override
protected void doIsReady(Deque<String> tokens) {
if (engine instanceof ChessLibEngine cle) {
final DeferredReadBook book = cle.getOwnBook();
final DeferredReadBook<Move, ChessLibMoveGenerator> book = cle.getOwnBook();
if (book!=null && book.isInitRequired()) {
LOGGER.debug("Start reading opening library from {}", book.getUrl());
try {
Expand All @@ -52,6 +55,13 @@ protected void doIsReady(Deque<String> tokens) {
}
super.doIsReady(tokens);
}

static MoveLibrary<Move, ChessLibMoveGenerator> readOpenings(final URL location) throws IOException {
final boolean compressed = location.getFile().endsWith(".gz");
try (InputStream stream = location.openStream()) {
return new DefaultOpenings(()->stream, compressed);
}
}

@Override
protected Collection<PerfTTestData> readTestData() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.junit.jupiter.api.Test;

import com.fathzer.chess.test.utils.FENUtils;
import com.fathzer.jchess.chesslib.ChessLibMoveGenerator;
import com.github.bhlangonijr.chesslib.move.Move;

class DeferredReadBookTest {

Expand All @@ -21,12 +23,14 @@ void test() throws Exception {
assertThrows(IOException.class, () -> DeferredReadBook.toURL("src/test/resources/unknownFile.json"));

final String path = "src/test/resources/openings.json";
final DeferredReadBook rb = new DeferredReadBook(path);
final DeferredReadBook<Move, ChessLibMoveGenerator> rb = new DeferredReadBook<>(path, Main::readOpenings);
assertTrue(rb.isInitRequired());
final String fen = "rn1qkb1r/pp3ppp/2p1pnb1/3p4/2PP3N/2N2PP1/PP2P2P/R1BQKB1R w KQkq -";
assertTrue(rb.apply(FENUtils.from(fen)).isEmpty());
rb.init();
assertFalse(rb.isInitRequired());
assertFalse(rb.apply(FENUtils.from(fen)).isEmpty());
// A second init call should no throw any exception
rb.init();
}
}

0 comments on commit 45e51bf

Please sign in to comment.