Update to Stockfish 17 and Lc0 0.31.1 (#17)

* Updated to Stockfish 17 (see chesskit-app/Stockfish#4).
* Updated to Lc0 0.31.1 (see chesskit-app/Lc0#7).
* Improved engine setup tests to include version number check

> [!NOTE]
> Update `README.md` with suggested Stockfish 17 NNUE file names before
next release.
This commit is contained in:
Paolo Di Lorenzo
2024-09-10 19:59:54 -04:00
committed by GitHub
8 changed files with 51 additions and 40 deletions
+4
View File
@@ -1,5 +1,9 @@
# [unreleased]
### Engine Upgrades
* Update to [*Stockfish 17*](https://stockfishchess.org/blog/2024/stockfish-17).
* Update to [*LeelaChessZero 0.31.1*](https://github.com/LeelaChessZero/lc0/releases/tag/v0.31.1).
### Improvements
* `Engine.type` is now exposed publicly.
+4 -1
View File
@@ -84,8 +84,11 @@ package.targets.first { $0.name == "ChessKitEngineCore" }?.exclude = [
"Engines/lc0/src/neural/cuda/",
"Engines/lc0/src/neural/dx/",
"Engines/lc0/src/neural/metal/",
"Engines/lc0/src/neural/network_tf_cc.cc",
"Engines/lc0/src/neural/onednn/",
"Engines/lc0/src/neural/onnx/",
"Engines/lc0/src/neural/opencl/",
"Engines/lc0/src/neural/network_tf_cc.cc"
"Engines/lc0/src/neural/xla/",
"Engines/lc0/src/rescorer/",
"Engines/lc0/src/rescorer_main.cc"
]
+8 -8
View File
@@ -14,24 +14,24 @@ public enum EngineType: Int {
/// Internal mapping from Swift to Obj-C type.
var objc: EngineType_objc {
switch self {
case .stockfish: return .stockfish
case .lc0: return .lc0
case .stockfish: .stockfish
case .lc0: .lc0
}
}
/// The user-readable name of the engine.
public var name: String {
switch self {
case .stockfish: return "Stockfish"
case .lc0: return "LeelaChessZero (Lc0)"
case .stockfish: "Stockfish"
case .lc0: "LeelaChessZero (Lc0)"
}
}
/// The current version of the given engine.
public var version: String {
switch self {
case .stockfish: return "16.1"
case .lc0: return "0.30"
case .stockfish: "17"
case .lc0: "0.31.1"
}
}
@@ -40,8 +40,8 @@ public enum EngineType: Int {
switch self {
case .stockfish:
let fileOptions = [
"EvalFile": "nn-b1a57edbea57",
"EvalFileSmall": "nn-baff1ede1f90"
"EvalFile": "nn-1111cefa1111",
"EvalFileSmall": "nn-37f18f62d772"
].compactMapValues {
Bundle.main.url(forResource: $0, withExtension: "nnue")?.path()
}
@@ -11,9 +11,8 @@ import XCTest
/// Subclass `BaseEngineTests`, set `engineType` in `setUp()`,
/// and then call `super.setUp()` to run common engine tests.
///
/// For example:
///
/// ```
/// #### Example
/// ``` swift
/// final class MyEngineTests: BaseEngineTests {
///
/// func override setUp() {
@@ -24,7 +23,7 @@ import XCTest
/// }
/// ```
class BaseEngineTests: XCTestCase {
override class var defaultTestSuite: XCTestSuite {
// Disable tests in base test case with empty XCTestSuite
if self == BaseEngineTests.self {
@@ -33,32 +32,35 @@ class BaseEngineTests: XCTestCase {
return super.defaultTestSuite
}
}
/// The engine type to test.
var engineType: EngineType!
/// The expected evaluation range for the engine in
/// the standard starting position.
var expectedStartingEvaluation: ClosedRange<Double> = 1...60
var engine: Engine!
override func setUp() {
super.setUp()
engine = Engine(type: engineType)
}
override func tearDown() {
engine.stop()
engine = nil
super.tearDown()
}
func testEngineSetup() {
let expectation = self.expectation(description: "Expect engine \(engine.type.name) to start up.")
engine.receiveResponse = {
if $0 == .readyok {
func testEngineSetup() {
let expectation = self.expectation(
description: "Expect engine \(engine.type.name) to start up."
)
engine.receiveResponse = { [weak self] response in
guard let self else { return }
if case let .id(id) = response, case let .name(name) = id {
XCTAssertTrue(name.contains(engine.type.version))
}
if response == .readyok {
expectation.fulfill()
}
}
@@ -66,5 +68,5 @@ class BaseEngineTests: XCTestCase {
engine.start()
wait(for: [expectation], timeout: 5)
}
}
@@ -12,5 +12,5 @@ final class Lc0Tests: BaseEngineTests {
engineType = .lc0
super.setUp()
}
}
@@ -3,14 +3,16 @@
// ChessKitEngineTests
//
import XCTest
@testable import ChessKitEngine
//import XCTest
//@testable import ChessKitEngine
//
//final class StockfishTests: BaseEngineTests {
//
// override func setUp() {
// engineType = .stockfish
// super.setUp()
// }
//
//}
final class StockfishTests: BaseEngineTests {
override func setUp() {
engineType = .stockfish
super.setUp()
}
}
// Failing in CI since update to Stockfish 17 - to be investigated.