mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-03-21 03:30:42 +00:00
chore: setup linting for tests
This commit is contained in:
@@ -12,7 +12,7 @@ export default [
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['**/*.ts', '**/*.tsx'],
|
files: ['src/**/*.ts', 'src/**/*.tsx'],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
parser: tsParser,
|
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
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as assert from 'node:assert';
|
|
||||||
import * as Common from '../src/common.js';
|
import * as Common from '../src/common.js';
|
||||||
import { TileType, TileId } from '../src/common.js';
|
import { TileType, TileId } from '../src/common.js';
|
||||||
import { MasterGameEngine, MasterState, INITIAL_POINT } from '../src/engine.master.js';
|
import { MasterGameEngine, MasterState, INITIAL_POINT } from '../src/engine.master.js';
|
||||||
@@ -15,12 +14,7 @@ const INITIAL_TILES_LENGTH = 69;
|
|||||||
class TileSetBuilder {
|
class TileSetBuilder {
|
||||||
private restTiles = [...TILES];
|
private restTiles = [...TILES];
|
||||||
|
|
||||||
private handTiles: {
|
private handTiles: Record<Common.House, TileId[] | null> = {
|
||||||
e: TileId[] | null,
|
|
||||||
s: TileId[] | null,
|
|
||||||
w: TileId[] | null,
|
|
||||||
n: TileId[] | null,
|
|
||||||
} = {
|
|
||||||
e: null,
|
e: null,
|
||||||
s: null,
|
s: null,
|
||||||
w: null,
|
w: null,
|
||||||
@@ -35,8 +29,8 @@ class TileSetBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const tiles = tileTypes.map(tile => {
|
const tiles = tileTypes.map(tile => {
|
||||||
const index = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t == tile);
|
const index = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t === tile);
|
||||||
if (index == -1) {
|
if (index === -1) {
|
||||||
throw new TypeError(`Tile '${tile}' is not left`);
|
throw new TypeError(`Tile '${tile}' is not left`);
|
||||||
}
|
}
|
||||||
return this.restTiles.splice(index, 1)[0];
|
return this.restTiles.splice(index, 1)[0];
|
||||||
@@ -65,8 +59,8 @@ class TileSetBuilder {
|
|||||||
throw new TypeError(`${n}th tile is already set`);
|
throw new TypeError(`${n}th tile is already set`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const indexInRestTiles = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t == tileType);
|
const indexInRestTiles = this.restTiles.findIndex(tileId => Common.TILE_ID_MAP.get(tileId)!.t === tileType);
|
||||||
if (indexInRestTiles == -1) {
|
if (indexInRestTiles === -1) {
|
||||||
throw new TypeError(`Tile '${tileType}' is not left`);
|
throw new TypeError(`Tile '${tileType}' is not left`);
|
||||||
}
|
}
|
||||||
this.tiles.set(indexInTiles, this.restTiles.splice(indexInRestTiles, 1)[0]);
|
this.tiles.set(indexInTiles, this.restTiles.splice(indexInRestTiles, 1)[0]);
|
||||||
@@ -151,9 +145,9 @@ describe('Master game engine', () => {
|
|||||||
it('rinshan', () => {
|
it('rinshan', () => {
|
||||||
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
||||||
new TileSetBuilder()
|
new TileSetBuilder()
|
||||||
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 'n'])
|
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 'n'])
|
||||||
.setTile(-1, 'm3')
|
.setTile(-1, 'm3')
|
||||||
.build(),
|
.build(),
|
||||||
));
|
));
|
||||||
engine.commit_ankan('e', engine.$state.handTiles.e.at(-1)!);
|
engine.commit_ankan('e', engine.$state.handTiles.e.at(-1)!);
|
||||||
expect(engine.commit_tsumoHora('e', false).yakus.yakuNames).toEqual(['tsumo', 'rinshan']);
|
expect(engine.commit_tsumoHora('e', false).yakus.yakuNames).toEqual(['tsumo', 'rinshan']);
|
||||||
@@ -168,9 +162,9 @@ describe('Master game engine', () => {
|
|||||||
it('double-riichi ippatsu tsumo', () => {
|
it('double-riichi ippatsu tsumo', () => {
|
||||||
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
||||||
new TileSetBuilder()
|
new TileSetBuilder()
|
||||||
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 's'])
|
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 's'])
|
||||||
.setTile(3, 'm3')
|
.setTile(3, 'm3')
|
||||||
.build(),
|
.build(),
|
||||||
));
|
));
|
||||||
tsumogiriAndIgnore(engine, true);
|
tsumogiriAndIgnore(engine, true);
|
||||||
tsumogiriAndIgnore(engine);
|
tsumogiriAndIgnore(engine);
|
||||||
@@ -210,7 +204,7 @@ describe('Master game engine', () => {
|
|||||||
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
const engine = new MasterGameEngine(MasterGameEngine.createInitialState(
|
||||||
new TileSetBuilder()
|
new TileSetBuilder()
|
||||||
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 's'])
|
.setHandTiles('e', ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'n', 'n', 'n', 'm3', 's'])
|
||||||
.setHandTiles('s', ['m3', 'm6', 'p2', 'p5', 'p8', 's4', 'e', 's', 'w', 'haku', 'hatsu', 'chun', 'chun'])
|
.setHandTiles('s', ['m3', 'm6', 'p2', 'p5', 'p8', 's4', 'e', 's', 'w', 'haku', 'hatsu', 'chun', 'chun'])
|
||||||
.setTile(-1, 'm3')
|
.setTile(-1, 'm3')
|
||||||
.build(),
|
.build(),
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -3,15 +3,15 @@
|
|||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import assert from "node:assert"
|
import assert from 'node:assert';
|
||||||
import { calcWaitPatterns } from "../src/common.fu"
|
import { calcWaitPatterns } from '../src/common.fu';
|
||||||
import { analyzeFourMentsuOneJyantou } from "../src/common"
|
import { analyzeFourMentsuOneJyantou } from '../src/common';
|
||||||
|
|
||||||
describe('Fu', () => {
|
describe('Fu', () => {
|
||||||
describe('Wait patterns', () => {
|
describe('Wait patterns', () => {
|
||||||
it('Ryanmen', () => {
|
it('Ryanmen', () => {
|
||||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
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];
|
)[0];
|
||||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's9'), [{
|
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's9'), [{
|
||||||
...fourMentsuOneJyantou,
|
...fourMentsuOneJyantou,
|
||||||
@@ -23,7 +23,7 @@ describe('Fu', () => {
|
|||||||
|
|
||||||
it('Kanchan', () => {
|
it('Kanchan', () => {
|
||||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
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];
|
)[0];
|
||||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's8'), [{
|
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's8'), [{
|
||||||
...fourMentsuOneJyantou,
|
...fourMentsuOneJyantou,
|
||||||
@@ -31,11 +31,11 @@ describe('Fu', () => {
|
|||||||
agariTile: 's8',
|
agariTile: 's8',
|
||||||
waitedTaatsu: ['s7', 's9'],
|
waitedTaatsu: ['s7', 's9'],
|
||||||
}]);
|
}]);
|
||||||
})
|
});
|
||||||
|
|
||||||
it('Penchan', () => {
|
it('Penchan', () => {
|
||||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
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];
|
)[0];
|
||||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's7'), [{
|
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's7'), [{
|
||||||
...fourMentsuOneJyantou,
|
...fourMentsuOneJyantou,
|
||||||
@@ -43,11 +43,11 @@ describe('Fu', () => {
|
|||||||
agariTile: 's7',
|
agariTile: 's7',
|
||||||
waitedTaatsu: ['s8', 's9'],
|
waitedTaatsu: ['s8', 's9'],
|
||||||
}]);
|
}]);
|
||||||
})
|
});
|
||||||
|
|
||||||
it('Tanki', () => {
|
it('Tanki', () => {
|
||||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
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];
|
)[0];
|
||||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 'e'), [{
|
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 'e'), [{
|
||||||
...fourMentsuOneJyantou,
|
...fourMentsuOneJyantou,
|
||||||
@@ -58,7 +58,7 @@ describe('Fu', () => {
|
|||||||
|
|
||||||
it('Nobetan', () => {
|
it('Nobetan', () => {
|
||||||
const fourMentsuOneJyantou = analyzeFourMentsuOneJyantou(
|
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];
|
)[0];
|
||||||
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's6'), [{
|
assert.deepStrictEqual(calcWaitPatterns(fourMentsuOneJyantou, 's6'), [{
|
||||||
...fourMentsuOneJyantou,
|
...fourMentsuOneJyantou,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ describe('Yaku', () => {
|
|||||||
huros: [],
|
huros: [],
|
||||||
ronTile: 'p2',
|
ronTile: 'p2',
|
||||||
}).includes('tsumo'), false);
|
}).includes('tsumo'), false);
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('white', () => {
|
describe('white', () => {
|
||||||
@@ -65,7 +65,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'ankan', tile: 'haku'}],
|
huros: [{ type: 'ankan', tile: 'haku' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: true,
|
riichi: true,
|
||||||
}).includes('white'), true);
|
}).includes('white'), true);
|
||||||
@@ -73,7 +73,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'pon', tile: 'haku'}],
|
huros: [{ type: 'pon', tile: 'haku' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: false,
|
riichi: false,
|
||||||
}), ['white']);
|
}), ['white']);
|
||||||
@@ -85,7 +85,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'ankan', tile: 'chun'}],
|
huros: [{ type: 'ankan', tile: 'chun' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: true,
|
riichi: true,
|
||||||
}).includes('red'), true);
|
}).includes('red'), true);
|
||||||
@@ -93,7 +93,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'pon', tile: 'chun'}],
|
huros: [{ type: 'pon', tile: 'chun' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: false,
|
riichi: false,
|
||||||
}), ['red']);
|
}), ['red']);
|
||||||
@@ -105,7 +105,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'ankan', tile: 'hatsu'}],
|
huros: [{ type: 'ankan', tile: 'hatsu' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: true,
|
riichi: true,
|
||||||
}).includes('green'), true);
|
}).includes('green'), true);
|
||||||
@@ -113,7 +113,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{type: 'pon', tile: 'hatsu'}],
|
huros: [{ type: 'pon', tile: 'hatsu' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
riichi: false,
|
riichi: false,
|
||||||
}), ['green']);
|
}), ['green']);
|
||||||
@@ -231,7 +231,7 @@ describe('Yaku', () => {
|
|||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{
|
huros: [{
|
||||||
type: 'ankan',
|
type: 'ankan',
|
||||||
tile: 'n'
|
tile: 'n',
|
||||||
}],
|
}],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
rinshan: true,
|
rinshan: true,
|
||||||
@@ -244,7 +244,7 @@ describe('Yaku', () => {
|
|||||||
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
handTiles: ['m1', 'm2', 'm3', 'p6', 'p6', 'p6', 's6', 's7', 's8', 'm3', 'm3'],
|
||||||
huros: [{
|
huros: [{
|
||||||
type: 'ankan',
|
type: 'ankan',
|
||||||
tile: 'n'
|
tile: 'n',
|
||||||
}],
|
}],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('rinshan'), false);
|
}).includes('rinshan'), false);
|
||||||
@@ -307,7 +307,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['p6', 'p7', 'p8', 's3', 's3', 's3', 's4', 's5', 's6', 'm3', 'm3'],
|
handTiles: ['p6', 'p7', 'p8', 's3', 's3', 's3', 's4', 's5', 's6', 'm3', 'm3'],
|
||||||
huros: [{type: 'pon', tile: 'm2'}],
|
huros: [{ type: 'pon', tile: 'm2' }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('tanyao'), true);
|
}).includes('tanyao'), true);
|
||||||
|
|
||||||
@@ -385,7 +385,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm3', 'm4', 'p5', 'p6', 'p7', 's9', 's9', 's4', 's5', 's6'],
|
handTiles: ['m2', 'm3', 'm4', 'p5', 'p6', 'p7', 's9', 's9', 's4', 's5', 's6'],
|
||||||
huros: [{type: 'cii', tiles: ['m2','m3','m4']}],
|
huros: [{ type: 'cii', tiles: ['m2', 'm3', 'm4'] }],
|
||||||
tsumoTile: 's6',
|
tsumoTile: 's6',
|
||||||
}).includes('iipeko'), false);
|
}).includes('iipeko'), false);
|
||||||
|
|
||||||
@@ -410,7 +410,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm3', 'm4', 'p5', 'p6', 'p7', 'p5', 'p6', 'p7', 'p1', 'p1'],
|
handTiles: ['m2', 'm3', 'm4', 'p5', 'p6', 'p7', 'p5', 'p6', 'p7', 'p1', 'p1'],
|
||||||
huros: [{type: 'cii', tiles: ['m2','m3','m4']}],
|
huros: [{ type: 'cii', tiles: ['m2', 'm3', 'm4'] }],
|
||||||
tsumoTile: 'p1',
|
tsumoTile: 'p1',
|
||||||
}).includes('ryampeko'), false);
|
}).includes('ryampeko'), false);
|
||||||
});
|
});
|
||||||
@@ -424,7 +424,6 @@ describe('Yaku', () => {
|
|||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('sanshoku-dojun'), true);
|
}).includes('sanshoku-dojun'), true);
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -436,7 +435,6 @@ describe('Yaku', () => {
|
|||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('sanshoku-doko'), true);
|
}).includes('sanshoku-doko'), true);
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -452,7 +450,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm3', 'm4', 's4', 's5', 's6', 's7', 's8', 's9', 'm3', 'm3'],
|
handTiles: ['m2', 'm3', 'm4', 's4', 's5', 's6', 's7', 's8', 's9', 'm3', 'm3'],
|
||||||
huros: [{type: 'cii', tiles:['s1', 's2', 's3']}],
|
huros: [{ type: 'cii', tiles: ['s1', 's2', 's3'] }],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('ittsu'), true);
|
}).includes('ittsu'), true);
|
||||||
});
|
});
|
||||||
@@ -470,7 +468,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 's1', 's2', 's3', 's7', 's8', 's9', 'haku', 'haku'],
|
handTiles: ['m1', 'm2', 'm3', 's1', 's2', 's3', 's7', 's8', 's9', 'haku', 'haku'],
|
||||||
huros: [{type: 'pon', tile : 'p9'}],
|
huros: [{ type: 'pon', tile: 'p9' }],
|
||||||
tsumoTile: 'haku',
|
tsumoTile: 'haku',
|
||||||
}).includes('chanta'), true);
|
}).includes('chanta'), true);
|
||||||
});
|
});
|
||||||
@@ -488,7 +486,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 's1', 's2', 's3', 's7', 's8', 's9', 'm9', 'm9'],
|
handTiles: ['m1', 'm2', 'm3', 's1', 's2', 's3', 's7', 's8', 's9', 'm9', 'm9'],
|
||||||
huros: [{type: 'pon', tile : 'p9'}],
|
huros: [{ type: 'pon', tile: 'p9' }],
|
||||||
tsumoTile: 'm9',
|
tsumoTile: 'm9',
|
||||||
}).includes('junchan'), true);
|
}).includes('junchan'), true);
|
||||||
});
|
});
|
||||||
@@ -509,11 +507,11 @@ describe('Yaku', () => {
|
|||||||
handTiles: ['m2', 'm3', 'm4', 'm2', 'm3', 'm4', 'p5', 'p6', 'p7', 'p5', 'p6', 'p7', 'p1', 'p1'],
|
handTiles: ['m2', 'm3', 'm4', 'm2', 'm3', 'm4', 'p5', 'p6', 'p7', 'p5', 'p6', 'p7', 'p1', 'p1'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'p1',
|
tsumoTile: 'p1',
|
||||||
}).includes('chitoitsu'), false)
|
}).includes('chitoitsu'), false);
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('toitoi', () => {
|
describe('toitoi', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
@@ -524,13 +522,13 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm2', 'm2', 'p5', 'p5', 'p5', 's7', 's7', 's7', 'p2', 'p2'],
|
handTiles: ['m2', 'm2', 'm2', 'p5', 'p5', 'p5', 's7', 's7', 's7', 'p2', 'p2'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 'p2',
|
tsumoTile: 'p2',
|
||||||
}).includes('toitoi'), true);
|
}).includes('toitoi'), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('sananko', () => {
|
describe('sananko', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
@@ -541,7 +539,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'p5', 'p5', 'p5', 's7', 's8', 's9', 'p2', 'p2'],
|
handTiles: ['m1', 'm1', 'm1', 'p5', 'p5', 'p5', 's7', 's8', 's9', 'p2', 'p2'],
|
||||||
huros: [{type: 'ankan', tile: 'm2'}],
|
huros: [{ type: 'ankan', tile: 'm2' }],
|
||||||
tsumoTile: 'p2',
|
tsumoTile: 'p2',
|
||||||
}).includes('sananko'), true);
|
}).includes('sananko'), true);
|
||||||
});
|
});
|
||||||
@@ -549,7 +547,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'p5', 'p5', 'p5', 's7', 's8', 's9', 'p2', 'p2'],
|
handTiles: ['m1', 'm1', 'm1', 'p5', 'p5', 'p5', 's7', 's8', 's9', 'p2', 'p2'],
|
||||||
huros: [{type: 'minkan', tile: 'm2'}],
|
huros: [{ type: 'minkan', tile: 'm2' }],
|
||||||
tsumoTile: 'p2',
|
tsumoTile: 'p2',
|
||||||
}).includes('sananko'), false);
|
}).includes('sananko'), false);
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
@@ -561,7 +559,7 @@ describe('Yaku', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('honroto', () => {
|
describe('honroto', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
@@ -573,29 +571,29 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m9', 'm9', 'm9', 'p9', 'p9', 'p9', 'hatsu', 'hatsu', 'hatsu', 'n', 'n'],
|
handTiles: ['m9', 'm9', 'm9', 'p9', 'p9', 'p9', 'hatsu', 'hatsu', 'hatsu', 'n', 'n'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 'p9',
|
tsumoTile: 'p9',
|
||||||
}).includes('honroto'), true);
|
}).includes('honroto'), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('sankantsu', () => {
|
describe('sankantsu', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m9', 'm9', 'm9', 'n', 'n'],
|
handTiles: ['m9', 'm9', 'm9', 'n', 'n'],
|
||||||
huros: [{type: 'ankan', tile: 'm1'}, {type: 'ankan', tile: 'm2'}, {type: 'minkan', tile: 'm3'}],
|
huros: [{ type: 'ankan', tile: 'm1' }, { type: 'ankan', tile: 'm2' }, { type: 'minkan', tile: 'm3' }],
|
||||||
tsumoTile: 'm9',
|
tsumoTile: 'm9',
|
||||||
}).includes('sankantsu'), true);
|
}).includes('sankantsu'), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('honitsu', () => {
|
describe('honitsu', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'n', 'n'],
|
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'n', 'n'],
|
||||||
huros: [{type: 'pon', tile: 'w'}],
|
huros: [{ type: 'pon', tile: 'w' }],
|
||||||
tsumoTile: 'n',
|
tsumoTile: 'n',
|
||||||
}).includes('honitsu'), true);
|
}).includes('honitsu'), true);
|
||||||
|
|
||||||
@@ -610,7 +608,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'm8', 'm8'],
|
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'm8', 'm8'],
|
||||||
huros: [{type: 'pon', tile: 'm3'}],
|
huros: [{ type: 'pon', tile: 'm3' }],
|
||||||
tsumoTile: 'm8',
|
tsumoTile: 'm8',
|
||||||
}).includes('honitsu'), false);
|
}).includes('honitsu'), false);
|
||||||
});
|
});
|
||||||
@@ -621,7 +619,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'm8', 'm8'],
|
handTiles: ['m1', 'm1', 'm1', 'm5', 'm6', 'm7', 'm9', 'm9', 'm9', 'm8', 'm8'],
|
||||||
huros: [{type: 'pon', tile: 'm3'}],
|
huros: [{ type: 'pon', tile: 'm3' }],
|
||||||
tsumoTile: 'm8',
|
tsumoTile: 'm8',
|
||||||
}).includes('chinitsu'), true);
|
}).includes('chinitsu'), true);
|
||||||
|
|
||||||
@@ -637,8 +635,8 @@ describe('Yaku', () => {
|
|||||||
describe('shosangen', () => {
|
describe('shosangen', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['haku', 'haku', 'haku', 'chun', 'chun', 'hatsu', 'hatsu', 'hatsu', 'm1', 'm1', 'm1', 'm2', 'm3', 'm4'] ,
|
handTiles: ['haku', 'haku', 'haku', 'chun', 'chun', 'hatsu', 'hatsu', 'hatsu', 'm1', 'm1', 'm1', 'm2', 'm3', 'm4'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm2',
|
tsumoTile: 'm2',
|
||||||
}).includes('shosangen'), true);
|
}).includes('shosangen'), true);
|
||||||
@@ -649,18 +647,18 @@ describe('Yaku', () => {
|
|||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm9'] ,
|
handTiles: ['m1', 'm1', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm9'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm9',
|
tsumoTile: 'm9',
|
||||||
}), ['kokushi']);
|
}), ['kokushi']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('invalid', () => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm3'] ,
|
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm3'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm3',
|
tsumoTile: 'm3',
|
||||||
}).includes('kokushi'), false);
|
}).includes('kokushi'), false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -669,47 +667,47 @@ describe('Yaku', () => {
|
|||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm1'] ,
|
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm1'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm1',
|
tsumoTile: 'm1',
|
||||||
}), ['kokushi-13']);
|
}), ['kokushi-13']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('invalid', () => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm9'] ,
|
handTiles: ['m1', 'm9', 's1', 's9', 'p1', 'p9', 'haku', 'hatsu', 'chun', 'n', 'w', 's', 'e', 'm9'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm1',
|
tsumoTile: 'm1',
|
||||||
}).includes('kokushi-13'), false);
|
}).includes('kokushi-13'), false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('suanko', () => {
|
describe('suanko', () => {
|
||||||
it('valid',() => {
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'chun',
|
tsumoTile: 'chun',
|
||||||
}), ['suanko']);
|
}), ['suanko']);
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
handTiles: ['m2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
||||||
huros: [{type: 'ankan', tile: 'm1'}],
|
huros: [{ type: 'ankan', tile: 'm1' }],
|
||||||
tsumoTile: 'chun',
|
tsumoTile: 'chun',
|
||||||
}), ['suanko']);
|
}), ['suanko']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('invalid',() => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'm2', 'm2', 'e', 'e', 'e'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'm2', 'm2', 'e', 'e', 'e'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
ronTile: 'e',
|
ronTile: 'e',
|
||||||
}).includes('suanko'), false);
|
}).includes('suanko'), false);
|
||||||
|
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'm2', 'm2', 'e', 'e', 'e'],
|
handTiles: ['m1', 'm1', 'm1', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'm2', 'm2', 'e', 'e', 'e'],
|
||||||
huros: [],
|
huros: [],
|
||||||
@@ -726,7 +724,7 @@ describe('Yaku', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('suanko-tanki', () => {
|
describe('suanko-tanki', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e'],
|
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e'],
|
||||||
@@ -736,7 +734,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e'],
|
handTiles: ['m2', 'm2', 'm2', 'm3', 'm3', 'm3', 'haku', 'haku', 'haku', 'e', 'e'],
|
||||||
huros: [{type: 'ankan', tile: 'm1'}],
|
huros: [{ type: 'ankan', tile: 'm1' }],
|
||||||
tsumoTile: 'e',
|
tsumoTile: 'e',
|
||||||
}), ['suanko-tanki']);
|
}), ['suanko-tanki']);
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
@@ -751,11 +749,11 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
handTiles: ['m1', 'm1', 'm1', 'm2', 'm2', 'm2', 'hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'e', 'e'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'chun',
|
tsumoTile: 'chun',
|
||||||
}).includes('suanko-tanki'), false);
|
}).includes('suanko-tanki'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('daisangen', () => {
|
describe('daisangen', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
@@ -769,15 +767,15 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'p2', 'p2', 'p2', 's2', 's2'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'chun', 'chun', 'chun', 'p2', 'p2', 'p2', 's2', 's2'],
|
||||||
huros: [{type: 'pon', tile: 'haku'}],
|
huros: [{ type: 'pon', tile: 'haku' }],
|
||||||
tsumoTile: 's2',
|
tsumoTile: 's2',
|
||||||
}), ['daisangen']);
|
}), ['daisangen']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('invalid', () => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['haku', 'haku', 'haku', 'chun', 'chun', 'hatsu', 'hatsu', 'hatsu', 'm1', 'm1', 'm1', 'm2', 'm2', 'm2'] ,
|
handTiles: ['haku', 'haku', 'haku', 'chun', 'chun', 'hatsu', 'hatsu', 'hatsu', 'm1', 'm1', 'm1', 'm2', 'm2', 'm2'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'm2',
|
tsumoTile: 'm2',
|
||||||
}).includes('daisangen'), false);
|
}).includes('daisangen'), false);
|
||||||
@@ -785,18 +783,18 @@ describe('Yaku', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('tsuiso', () => {
|
describe('tsuiso', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['haku', 'haku', 'haku', 'hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['haku', 'haku', 'haku', 'hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}), [ 'suanko-tanki', 'tsuiso']);
|
}), ['suanko-tanki', 'tsuiso']);
|
||||||
|
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'haku'}],
|
huros: [{ type: 'pon', tile: 'haku' }],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}), ['tsuiso']);
|
}), ['tsuiso']);
|
||||||
|
|
||||||
@@ -819,14 +817,14 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}).includes('tsuiso'), false);
|
}).includes('tsuiso'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('shosushi', () => {
|
describe('shosushi', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm2', 'm3', 'n', 'n', 'n', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['m1', 'm2', 'm3', 'n', 'n', 'n', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
@@ -836,7 +834,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'n', 'n', 'n', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['m1', 'm1', 'm1', 'n', 'n', 'n', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'e'}],
|
huros: [{ type: 'pon', tile: 'e' }],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}), ['shosushi']);
|
}), ['shosushi']);
|
||||||
});
|
});
|
||||||
@@ -852,14 +850,14 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}).includes('shosushi'), false);
|
}).includes('shosushi'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('daisushi', () => {
|
describe('daisushi', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'n', 'n', 'n', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's', 's'],
|
handTiles: ['m1', 'm1', 'n', 'n', 'n', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's', 's'],
|
||||||
@@ -869,7 +867,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'n', 'n', 'n', 'w', 'w', 'w', 's', 's', 's'],
|
handTiles: ['m1', 'm1', 'n', 'n', 'n', 'w', 'w', 'w', 's', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'e'}],
|
huros: [{ type: 'pon', tile: 'e' }],
|
||||||
tsumoTile: 's',
|
tsumoTile: 's',
|
||||||
}), ['daisushi']);
|
}), ['daisushi']);
|
||||||
});
|
});
|
||||||
@@ -885,14 +883,14 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
handTiles: ['hatsu', 'hatsu', 'hatsu', 'e', 'e', 'e', 'w', 'w', 'w', 's', 's'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 'e',
|
tsumoTile: 'e',
|
||||||
}).includes('daisushi'), false);
|
}).includes('daisushi'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('ryuiso', () => {
|
describe('ryuiso', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['s2', 's2', 's2', 's2', 's3', 's4', 's6', 's6', 's6', 's8', 's8', 's8', 'hatsu', 'hatsu'],
|
handTiles: ['s2', 's2', 's2', 's2', 's3', 's4', 's6', 's6', 's6', 's8', 's8', 's8', 'hatsu', 'hatsu'],
|
||||||
@@ -902,7 +900,7 @@ describe('Yaku', () => {
|
|||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8'],
|
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8'],
|
||||||
huros: [{type: 'pon', tile: 'hatsu'}],
|
huros: [{ type: 'pon', tile: 'hatsu' }],
|
||||||
tsumoTile: 's8',
|
tsumoTile: 's8',
|
||||||
}), ['ryuiso']);
|
}), ['ryuiso']);
|
||||||
});
|
});
|
||||||
@@ -910,31 +908,31 @@ describe('Yaku', () => {
|
|||||||
it('invalid', () => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8','haku','haku','haku'],
|
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8', 'haku', 'haku', 'haku'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 's2',
|
tsumoTile: 's2',
|
||||||
}).includes('ryuiso'), false);
|
}).includes('ryuiso'), false);
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8'],
|
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8'],
|
||||||
huros: [{type: 'pon', tile: 'haku'}],
|
huros: [{ type: 'pon', tile: 'haku' }],
|
||||||
tsumoTile: 's2',
|
tsumoTile: 's2',
|
||||||
}).includes('ryuiso'), false);
|
}).includes('ryuiso'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('chinroto', () => {
|
describe('chinroto', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m1', 'm1', 'm1', 'm9', 'm9', 'm9', 's1', 's1', 's1', 's9', 's9', 's9', 'p1', 'p1'],
|
handTiles: ['m1', 'm1', 'm1', 'm9', 'm9', 'm9', 's1', 's1', 's1', 's9', 's9', 's9', 'p1', 'p1'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 'p1',
|
tsumoTile: 'p1',
|
||||||
}), ['suanko-tanki', 'chinroto']);
|
}), ['suanko-tanki', 'chinroto']);
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['m9', 'm9', 'm9', 's1', 's1', 's1', 's9', 's9', 's9', 'p1', 'p1'],
|
handTiles: ['m9', 'm9', 'm9', 's1', 's1', 's1', 's9', 's9', 's9', 'p1', 'p1'],
|
||||||
huros: [{type: 'pon', tile: 'm1'}],
|
huros: [{ type: 'pon', tile: 'm1' }],
|
||||||
tsumoTile: 'p1',
|
tsumoTile: 'p1',
|
||||||
}), ['chinroto']);
|
}), ['chinroto']);
|
||||||
});
|
});
|
||||||
@@ -942,19 +940,19 @@ describe('Yaku', () => {
|
|||||||
it('invalid', () => {
|
it('invalid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8','haku','haku','haku'],
|
handTiles: ['s2', 's2', 's2', 's2', 's3', 's3', 's3', 's3', 's4', 's8', 's8', 'haku', 'haku', 'haku'],
|
||||||
huros: [],
|
huros: [],
|
||||||
tsumoTile: 's2',
|
tsumoTile: 's2',
|
||||||
}).includes('chinroto'), false);
|
}).includes('chinroto'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('sukantsu', () => {
|
describe('sukantsu', () => {
|
||||||
it('valid', () =>{
|
it('valid', () => {
|
||||||
assert.deepStrictEqual(calcYakus({
|
assert.deepStrictEqual(calcYakus({
|
||||||
seatWind: 'e',
|
seatWind: 'e',
|
||||||
handTiles: ['p1', 'p1'],
|
handTiles: ['p1', 'p1'],
|
||||||
huros: [{type: 'ankan', tile: 'm1'}, {type: 'ankan', tile: 'm2'}, {type: 'minkan', tile: 'm3'}, {type: 'minkan', tile: 'chun'}],
|
huros: [{ type: 'ankan', tile: 'm1' }, { type: 'ankan', tile: 'm2' }, { type: 'minkan', tile: 'm3' }, { type: 'minkan', tile: 'chun' }],
|
||||||
tsumoTile: 'p1',
|
tsumoTile: 'p1',
|
||||||
}), ['sukantsu']);
|
}), ['sukantsu']);
|
||||||
});
|
});
|
||||||
@@ -966,7 +964,7 @@ describe('Yaku', () => {
|
|||||||
tsumoTile: 'm2',
|
tsumoTile: 'm2',
|
||||||
}).includes('sukantsu'), false);
|
}).includes('sukantsu'), false);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
describe('churen', () => {
|
describe('churen', () => {
|
||||||
it('valid', () => {
|
it('valid', () => {
|
||||||
|
|||||||
@@ -15,9 +15,6 @@
|
|||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"noImplicitReturns": true,
|
"noImplicitReturns": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"typeRoots": [
|
|
||||||
"./node_modules/@types"
|
|
||||||
],
|
|
||||||
"lib": [
|
"lib": [
|
||||||
"esnext",
|
"esnext",
|
||||||
"dom"
|
"dom"
|
||||||
|
|||||||
9
packages/misskey-mahjong/tsconfig.test.json
Normal file
9
packages/misskey-mahjong/tsconfig.test.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"test/**/*"
|
||||||
|
],
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user