chore: setup linting for tests
This commit is contained in:
parent
ebaf78cddd
commit
8a4192eaa5
|
|
@ -12,7 +12,7 @@ export default [
|
|||
],
|
||||
},
|
||||
{
|
||||
files: ['**/*.ts', '**/*.tsx'],
|
||||
files: ['src/**/*.ts', 'src/**/*.tsx'],
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
parser: tsParser,
|
||||
|
|
@ -22,4 +22,15 @@ export default [
|
|||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['test/**/*.ts', 'test/**/*.tsx'],
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
parser: tsParser,
|
||||
project: ['./tsconfig.test.json'],
|
||||
sourceType: 'module',
|
||||
tsconfigRootDir: import.meta.dirname,
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import * as assert from 'node:assert';
|
||||
import * as Common from '../src/common.js';
|
||||
import { TileType, TileId } from '../src/common.js';
|
||||
import { MasterGameEngine, MasterState, INITIAL_POINT } from '../src/engine.master.js';
|
||||
|
|
@ -15,12 +14,7 @@ const INITIAL_TILES_LENGTH = 69;
|
|||
class TileSetBuilder {
|
||||
private restTiles = [...TILES];
|
||||
|
||||
private handTiles: {
|
||||
e: TileId[] | null,
|
||||
s: TileId[] | null,
|
||||
w: TileId[] | null,
|
||||
n: TileId[] | null,
|
||||
} = {
|
||||
private handTiles: Record<Common.House, TileId[] | null> = {
|
||||
e: null,
|
||||
s: null,
|
||||
w: null,
|
||||
|
|
@ -35,8 +29,8 @@ class TileSetBuilder {
|
|||
}
|
||||
|
||||
const tiles = tileTypes.map(tile => {
|
||||
const index = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t == tile);
|
||||
if (index == -1) {
|
||||
const index = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t === tile);
|
||||
if (index === -1) {
|
||||
throw new TypeError(`Tile '${tile}' is not left`);
|
||||
}
|
||||
return this.restTiles.splice(index, 1)[0];
|
||||
|
|
@ -65,8 +59,8 @@ class TileSetBuilder {
|
|||
throw new TypeError(`${n}th tile is already set`);
|
||||
}
|
||||
|
||||
const indexInRestTiles = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t == tileType);
|
||||
if (indexInRestTiles == -1) {
|
||||
const indexInRestTiles = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t === tileType);
|
||||
if (indexInRestTiles === -1) {
|
||||
throw new TypeError(`Tile '${tileType}' is not left`);
|
||||
}
|
||||
this.tiles.set(indexInTiles, this.restTiles.splice(indexInRestTiles, 1)[0]);
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import assert from "node:assert"
|
||||
import { calcWaitPatterns } from "../src/common.fu"
|
||||
import { analyzeFourMentsuOneJyantou } from "../src/common"
|
||||
import assert from 'node:assert';
|
||||
import { calcWaitPatterns } from '../src/common.fu';
|
||||
import { analyzeFourMentsuOneJyantou } from '../src/common';
|
||||
|
||||
describe('Fu', () => {
|
||||
describe('Wait patterns', () => {
|
||||
it('Ryanmen', () => {
|
||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9']
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9'],
|
||||
)[0];
|
||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's9'), [{
|
||||
...fourMentsuOneJyantou,
|
||||
|
|
@ -23,7 +23,7 @@ describe('Fu', () => {
|
|||
|
||||
it('Kanchan', () => {
|
||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9']
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9'],
|
||||
)[0];
|
||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's8'), [{
|
||||
...fourMentsuOneJyantou,
|
||||
|
|
@ -31,11 +31,11 @@ describe('Fu', () => {
|
|||
agariTile: 's8',
|
||||
waitedTaatsu: ['s7', 's9'],
|
||||
}]);
|
||||
})
|
||||
});
|
||||
|
||||
it('Penchan', () => {
|
||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9']
|
||||
['m2', 'm3', 'm4', 'p6', 'p7', 'p8', 'p5', 'p6', 'p7', 's1', 's1', 's7', 's8', 's9'],
|
||||
)[0];
|
||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's7'), [{
|
||||
...fourMentsuOneJyantou,
|
||||
|
|
@ -43,11 +43,11 @@ describe('Fu', () => {
|
|||
agariTile: 's7',
|
||||
waitedTaatsu: ['s8', 's9'],
|
||||
}]);
|
||||
})
|
||||
});
|
||||
|
||||
it('Tanki', () => {
|
||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
||||
['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e']
|
||||
['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e'],
|
||||
)[0];
|
||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 'e'), [{
|
||||
...fourMentsuOneJyantou,
|
||||
|
|
@ -58,7 +58,7 @@ describe('Fu', () => {
|
|||
|
||||
it('Nobetan', () => {
|
||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
||||
['m1', 'm2', 'm3', 'm5', 'm6', 'm7', 'p2', 'p3', 'p4', 's3', 's4', 's5', 's6', 's6']
|
||||
['m1', 'm2', 'm3', 'm5', 'm6', 'm7', 'p2', 'p3', 'p4', 's3', 's4', 's5', 's6', 's6'],
|
||||
)[0];
|
||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's6'), [{
|
||||
...fourMentsuOneJyantou,
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ describe('Yaku', () => {
|
|||
huros: [],
|
||||
ronTile: 'p2',
|
||||
}).includes('tsumo'), false);
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
describe('white', () => {
|
||||
|
|
@ -231,7 +231,7 @@ describe('Yaku', () => {
|
|||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||
huros: [{
|
||||
type: 'ankan',
|
||||
tile: 'n'
|
||||
tile: 'n',
|
||||
}],
|
||||
tsumoTile: 'm3',
|
||||
rinshan: true,
|
||||
|
|
@ -244,7 +244,7 @@ describe('Yaku', () => {
|
|||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||
huros: [{
|
||||
type: 'ankan',
|
||||
tile: 'n'
|
||||
tile: 'n',
|
||||
}],
|
||||
tsumoTile: 'm3',
|
||||
}).includes('rinshan'), false);
|
||||
|
|
@ -424,7 +424,6 @@ describe('Yaku', () => {
|
|||
huros: [],
|
||||
tsumoTile: 'm3',
|
||||
}).includes('sanshoku-dojun'), true);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -436,7 +435,6 @@ describe('Yaku', () => {
|
|||
huros: [],
|
||||
tsumoTile: 'm3',
|
||||
}).includes('sanshoku-doko'), true);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -509,8 +507,8 @@ describe('Yaku', () => {
|
|||
handTiles: ['m2', 'm3', 'm4', 'm2', 'm3', 'm4', 'p5', 'p6', 'p7', 'p5', 'p6', 'p7', 'p1', 'p1'],
|
||||
huros: [],
|
||||
tsumoTile: 'p1',
|
||||
}).includes('chitoitsu'), false)
|
||||
})
|
||||
}).includes('chitoitsu'), false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('toitoi', () => {
|
||||
|
|
@ -755,7 +753,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 'chun',
|
||||
}).includes('suanko-tanki'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('daisangen', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -823,7 +821,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 's',
|
||||
}).includes('tsuiso'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('shosushi', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -856,7 +854,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 's',
|
||||
}).includes('shosushi'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('daisushi', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -889,7 +887,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 'e',
|
||||
}).includes('daisushi'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('ryuiso', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -921,7 +919,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 's2',
|
||||
}).includes('ryuiso'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('chinroto', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -947,7 +945,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 's2',
|
||||
}).includes('chinroto'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('sukantsu', () => {
|
||||
it('valid', () => {
|
||||
|
|
@ -966,7 +964,7 @@ describe('Yaku', () => {
|
|||
tsumoTile: 'm2',
|
||||
}).includes('sukantsu'), false);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('churen', () => {
|
||||
it('valid', () => {
|
||||
|
|
|
|||
|
|
@ -15,9 +15,6 @@
|
|||
"experimentalDecorators": true,
|
||||
"noImplicitReturns": true,
|
||||
"esModuleInterop": true,
|
||||
"typeRoots": [
|
||||
"./node_modules/@types"
|
||||
],
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"types": ["jest", "node"]
|
||||
},
|
||||
"include": [
|
||||
"test/**/*"
|
||||
],
|
||||
}
|
||||
Loading…
Reference in New Issue