tom-weatherhead/thaw-tic-tac-toe-engine

View on GitHub
src/test_descriptors.js

Summary

Maintainability
D
2 days
Test Coverage
// thaw-tic-tac-toe-engine/src/test_descriptors.js

'use strict';

// const config = require('../config/config');

/*
const defaultErrorHandlingFunction = (engine, message) => {
    // Support for the experimental syntax 'throwExpressions' isn't currently enabled
    // Add @babel/plugin-proposal-throw-expressions (https://git.io/vb4yF) to the 'plugins' section of your Babel config to enable transformation.
    throw new Error(engine.errorMessages.gameEngineError(message));

    return 0;
}
 */

module.exports = [
    {
        name: 'SmokeTest00FirstMove',
        // . . .
        // . . .
        // . . .
        boardString: '         ',
        maxPly: 3,
        verificationFunction: (engine, expect, result) => {
            // expect(result.bestScore).to.satisfy(bestScore => bestScore < engine.victoryScore);
            // expect(result.bestScore).to.satisfy(bestScore => bestScore > engine.defeatScore);

            // Jest:
            expect(result.bestScore < engine.victoryScore).toBeTruthy();
            expect(result.bestScore > engine.defeatScore).toBeTruthy();
        } //,
        // errorHandlingFunction: (engine, result) => defaultErrorHandlingFunction(engine, result)
    },
    {
        name: 'SmokeTest01ImmediateVictory',
        // X . X
        // . . .
        // O . O
        boardString: 'X X   O O',
        maxPly: 1,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 0, column: 1 }
            ]);
            expect(result.bestRow).toEqual(0);
            expect(result.bestColumn).toEqual(1);
        }
    },
    {
        name: 'SmokeTest02BlockingMove',
        // X . X
        // . . .
        // O . .
        boardString: 'X X   O  ',
        maxPly: 2,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore > engine.defeatScore).toBeTruthy();
            expect(result.bestMoveList).toEqual([
                { row: 0, column: 1 }
            ]);
            expect(result.bestRow).toEqual(0);
            expect(result.bestColumn).toEqual(1);
        }
    },
    {
        name: 'VictoryTest2',
        // O . .
        // . O X
        // . X .
        boardString: 'O   OX X ',
        maxPly: 3,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 2, column: 2 }
            ]);
            expect(result.bestRow).toEqual(2);
            expect(result.bestColumn).toEqual(2);
        }
    },
    {
        name: 'VictoryTest3',
        // X . .
        // . . .
        // . O .
        boardString: 'X      O ',
        maxPly: 5,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 0, column: 2 },
                { row: 1, column: 1 },
                { row: 2, column: 0 }
            ]);
        }
    },
    {
        name: 'VictoryTest4',
        // . X .    X X .    X X O    X X O
        // . . . -> . . . -> . . . -> . X .
        // O . .    O . .    O . .    O . .
        boardString: ' X    O  ',
        maxPly: 5,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 0, column: 0 }
            ]);
            expect(result.bestRow).toEqual(0);
            expect(result.bestColumn).toEqual(0);
        }
    },
    {
        name: 'VictoryTest5',
        // X O .
        // . . .
        // . . .
        boardString: 'XO       ',
        maxPly: 5,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 1, column: 0 },
                { row: 1, column: 1 },
                { row: 2, column: 0 }
            ]);
        }
    },
    {
        name: 'VictoryTest6',
        // O X .
        // . . X
        // . . .
        boardString: 'OX   X   ',
        maxPly: 5,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore).toEqual(engine.victoryScore);
            expect(result.bestMoveList).toEqual([
                { row: 2, column: 0 }
            ]);
        }
    },
    {
        name: 'NoVictoryTest1',
        // O X .
        // . . .
        // . . .
        boardString: 'OX       ',
        maxPly: 5,
        verificationFunction: (engine, expect, result) => {
            expect(result.bestScore < engine.victoryScore).toBeTruthy();
            expect(result.bestScore > engine.defeatScore).toBeTruthy();
        }
    },
    {
        name: 'NoVictoryTest2',
        boardString: 'OX       ',
        maxPly: 6,
        verificationFunction: (engine, expect, result) => {
            expect(Math.abs(result.bestScore)).toBe(0); // ThAW: result.bestScore will be -0 (???)
            // expect(result.bestMoveList).to.contain({ row: 1, column: 2 });    // This would be a losing move.
            // expect(result.bestMoveList).to.contain({ row: 2, column: 1 });    // This would be a losing move.
        }
    } /*,
    {
        name: 'maxPlyTooLow',
        boardString: '         ',
        maxPly: config.minMaxPly - 1,
        errorHandlingFunction: (engine, expect, error) => {
            const actual = error;
            const expected = engine.errorMessages.maxPlyOutOfRange(config.minMaxPly - 1, engine.minMaxPly, engine.maxMaxPly);

            expect(actual).equal(expected);
        }
    },
    {
        name: 'maxPlyTooHigh',
        boardString: '         ',
        maxPly: config.maxMaxPly + 1,
        errorHandlingFunction: (engine, expect, error) => {
            const actual = error;
            const expected = engine.errorMessages.maxPlyOutOfRange(config.maxMaxPly + 1, engine.minMaxPly, engine.maxMaxPly);

            expect(actual).equal(expected);
        }
    } */
];