return Py_BuildValue("(OO)", wInsufficient ? Py_True : Py_False, bInsufficient ? Py_True : Py_False);
}
+// INPUT variant, fen
+extern "C" PyObject* pyffish_validateFen(PyObject* self, PyObject *args) {
+ const char *fen, *variant;
+ if (!PyArg_ParseTuple(args, "ss", &fen, &variant)) {
+ return NULL;
+ }
+
+ return Py_BuildValue("i", fen::validate_fen(std::string(fen), variants.find(std::string(variant))->second));
+}
+
static PyMethodDef PyFFishMethods[] = {
{"version", (PyCFunction)pyffish_version, METH_NOARGS, "Get package version."},
{"is_immediate_game_end", (PyCFunction)pyffish_isImmediateGameEnd, METH_VARARGS, "Get result from given FEN if variant rules ends the game."},
{"is_optional_game_end", (PyCFunction)pyffish_isOptionalGameEnd, METH_VARARGS, "Get result from given FEN it rules enable game end by player."},
{"has_insufficient_material", (PyCFunction)pyffish_hasInsufficientMaterial, METH_VARARGS, "Checks for insufficient material."},
+ {"validate_fen", (PyCFunction)pyffish_validateFen, METH_VARARGS, "Validate an input FEN."},
{NULL, NULL, 0, NULL}, // sentinel
};
result = sf.has_insufficient_material(variant, fen, [])
self.assertEqual(result, expected_result, "{}: {}".format(variant, fen))
+ def test_validate_fen(self):
+ for variant, positions in variant_positions.items():
+ for fen in positions:
+ self.assertTrue(sf.validate_fen(fen, variant) == 1, "{}: {}".format(variant, fen))
+
if __name__ == '__main__':
unittest.main(verbosity=2)