Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions public/castledEngine/CastledEngine.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* tslint:disable */
/* eslint-disable */
export function init_wasm(): void;
export function main_wasm(command: string): void;

export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;

export interface InitOutput {
readonly memory: WebAssembly.Memory;
readonly init_wasm: () => void;
readonly main_wasm: (a: number, b: number) => void;
readonly __wbindgen_export_0: WebAssembly.Table;
readonly __wbindgen_malloc: (a: number, b: number) => number;
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
readonly __wbindgen_start: () => void;
}

export type SyncInitInput = BufferSource | WebAssembly.Module;
/**
* Instantiates the given `module`, which can either be bytes or
* a precompiled `WebAssembly.Module`.
*
* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
*
* @returns {InitOutput}
*/
export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;

/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
*
* @returns {Promise<InitOutput>}
*/
export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;
234 changes: 234 additions & 0 deletions public/castledEngine/CastledEngine.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
let wasm;

const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );

if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };

let cachedUint8ArrayMemory0 = null;

function getUint8ArrayMemory0() {
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8ArrayMemory0;
}

function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}

export function init_wasm() {
wasm.init_wasm();
}

let WASM_VECTOR_LEN = 0;

const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );

const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
? function (arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
}
: function (arg, view) {
const buf = cachedTextEncoder.encode(arg);
view.set(buf);
return {
read: arg.length,
written: buf.length
};
});

function passStringToWasm0(arg, malloc, realloc) {

if (realloc === undefined) {
const buf = cachedTextEncoder.encode(arg);
const ptr = malloc(buf.length, 1) >>> 0;
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
WASM_VECTOR_LEN = buf.length;
return ptr;
}

let len = arg.length;
let ptr = malloc(len, 1) >>> 0;

const mem = getUint8ArrayMemory0();

let offset = 0;

for (; offset < len; offset++) {
const code = arg.charCodeAt(offset);
if (code > 0x7F) break;
mem[ptr + offset] = code;
}

if (offset !== len) {
if (offset !== 0) {
arg = arg.slice(offset);
}
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
const ret = encodeString(arg, view);

offset += ret.written;
ptr = realloc(ptr, len, offset, 1) >>> 0;
}

WASM_VECTOR_LEN = offset;
return ptr;
}
/**
* @param {string} command
*/
export function main_wasm(command) {
const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
wasm.main_wasm(ptr0, len0);
}

async function __wbg_load(module, imports) {
if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') {
try {
return await WebAssembly.instantiateStreaming(module, imports);

} catch (e) {
if (module.headers.get('Content-Type') != 'application/wasm') {
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);

} else {
throw e;
}
}
}

const bytes = await module.arrayBuffer();
return await WebAssembly.instantiate(bytes, imports);

} else {
const instance = await WebAssembly.instantiate(module, imports);

if (instance instanceof WebAssembly.Instance) {
return { instance, module };

} else {
return instance;
}
}
}

function __wbg_get_imports() {
const imports = {};
imports.wbg = {};
imports.wbg.__wbg_getTime_46267b1c24877e30 = function(arg0) {
const ret = arg0.getTime();
return ret;
};
imports.wbg.__wbg_getTimezoneOffset_6b5752021c499c47 = function(arg0) {
const ret = arg0.getTimezoneOffset();
return ret;
};
imports.wbg.__wbg_log_502a084075e07659 = function(arg0, arg1) {
console.log(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbg_new0_f788a2397c7ca929 = function() {
const ret = new Date();
return ret;
};
imports.wbg.__wbg_new_31a97dac4f10fab7 = function(arg0) {
const ret = new Date(arg0);
return ret;
};
imports.wbg.__wbg_postMessage_fa2bc6ec1693a12f = function(arg0, arg1) {
self.postMessage(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbindgen_init_externref_table = function() {
const table = wasm.__wbindgen_export_0;
const offset = table.grow(4);
table.set(0, undefined);
table.set(offset + 0, undefined);
table.set(offset + 1, null);
table.set(offset + 2, true);
table.set(offset + 3, false);
;
};
imports.wbg.__wbindgen_number_new = function(arg0) {
const ret = arg0;
return ret;
};
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};

return imports;
}

function __wbg_init_memory(imports, memory) {

}

function __wbg_finalize_init(instance, module) {
wasm = instance.exports;
__wbg_init.__wbindgen_wasm_module = module;
cachedUint8ArrayMemory0 = null;


wasm.__wbindgen_start();
return wasm;
}

function initSync(module) {
if (wasm !== undefined) return wasm;


if (typeof module !== 'undefined') {
if (Object.getPrototypeOf(module) === Object.prototype) {
({module} = module)
} else {
console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
}
}

const imports = __wbg_get_imports();

__wbg_init_memory(imports);

if (!(module instanceof WebAssembly.Module)) {
module = new WebAssembly.Module(module);
}

const instance = new WebAssembly.Instance(module, imports);

return __wbg_finalize_init(instance, module);
}

async function __wbg_init(module_or_path) {
if (wasm !== undefined) return wasm;


if (typeof module_or_path !== 'undefined') {
if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
({module_or_path} = module_or_path)
} else {
console.warn('using deprecated parameters for the initialization function; pass a single object instead')
}
}

if (typeof module_or_path === 'undefined') {
module_or_path = new URL('CastledEngine_bg.wasm', import.meta.url);
}
const imports = __wbg_get_imports();

if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
module_or_path = fetch(module_or_path);
}

__wbg_init_memory(imports);

const { instance, module } = await __wbg_load(await module_or_path, imports);

return __wbg_finalize_init(instance, module);
}

export { initSync };
export default __wbg_init;
Binary file added public/castledEngine/CastledEngine_bg.wasm
Binary file not shown.
9 changes: 9 additions & 0 deletions public/castledEngine/CastledEngine_bg.wasm.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export const init_wasm: () => void;
export const main_wasm: (a: number, b: number) => void;
export const __wbindgen_export_0: WebAssembly.Table;
export const __wbindgen_malloc: (a: number, b: number) => number;
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
export const __wbindgen_start: () => void;
75 changes: 75 additions & 0 deletions public/castledEngine/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@

# Castled Engine

by [Castled Org](https://github.com/CastledChess)

---

## Table of Contents

- [About](#about)
- [Features](#features)
- [Building](#building)
- [Usage](#usage)
- [Documentation](#documentation)

---

## About

**Castled Engine** is a UCI-compatible chess engine written in **Rust**, leveraging the [Shakmaty Chess Library](https://github.com/niklasf/shakmaty). It was primarily designed for analyzing chess games as part of the **Castled Chess Project**.

---

## Features

### Core Features

- UCI Compatibility
- Move Generation powered by [Shakmaty](https://github.com/niklasf/shakmaty)

### Search Techniques

- **Negamax**
- **Alpha-Beta Pruning**
- **Iterative Deepening**
- **Transposition Tables**
- **Move Ordering**
- **Principal Variation Search**
- **Reverse Futility Pruning**
- **Quiescence Search**
- **Draw & Checkmate Detection**

### Evaluation

- **Pesto Evaluation**

---

## Building

To build the engine, clone the repository and run the following command in your terminal:

```bash
cargo build --release
```

This will compile the engine in release mode for optimal performance.

---

## Usage

Castled Engine communicates using the [UCI protocol](http://wbec-ridderkerk.nl/html/UCIProtocol.html), so it can be used with any UCI-compatible GUI. Alternatively, you can run the engine directly in the terminal by executing:

```bash
cargo run --release
```

This will start the engine and you can interact with it through the terminal.

---

## Documentation

Comprehensive documentation for Castled Engine can be found [here](./docs/README.md).
25 changes: 25 additions & 0 deletions public/castledEngine/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "castled_engine",
"type": "module",
"collaborators": [
"Ludovic Debever ludovicdebever0@gmail.com",
"Eliott Reigner",
"Mahdi Aribi"
],
"description": "The Castled org chess engine",
"version": "0.1.0",
"repository": {
"type": "git",
"url": "https://github.com/CastledChess/engine"
},
"files": [
"CastledEngine_bg.wasm",
"CastledEngine.js",
"CastledEngine.d.ts"
],
"main": "CastledEngine.js",
"types": "CastledEngine.d.ts",
"sideEffects": [
"./snippets/*"
]
}
Loading