poker-odds-calc
Version:
Fastest and most accurate node module for calculating odds of poker games Texas Hold'em, Texas Shortdeck/Sixplus and Omaha.
333 lines (286 loc) • 11.4 kB
text/typescript
import {TexasHoldem as Table} from "../src/index";
import * as assert from "assert";
import "../src/lib/Utils";
import Board from "../src/lib/Board";
describe("Texas Hold'em", function () {
it('STRAIGHT FLUSH', (done) => {
const result = new Table()
.addPlayer(["Qs", "Ks"])
.addPlayer(["Qd", "Kd"])
.boardAction((board: Board) => {
board
.setFlop(["Js", "Ts", "5h"])
.setTurn("Td")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 9);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 20.45);
assert.equal(result.getPlayers()[1].getWins(), 0);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0);
assert.equal(result.getPlayers()[0].getTies(), 35);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 79.55);
assert.equal(result.getPlayers()[1].getTies(), 35);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 79.55);
done();
});
it('QUADS', (done) => {
const result = new Table()
.addPlayer(["As", "Ad"])
.addPlayer(["Ks", "Kd"])
.boardAction((board: Board) => {
board
.setFlop(["Ah", "Kh", "5h"])
.setTurn("Td")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 43);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 97.73);
assert.equal(result.getPlayers()[1].getWins(), 1);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 2.27);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('QUADS - HIGH CARD', (done) => {
const result = new Table()
.addPlayer(["As", "Ad"])
.addPlayer(["Ks", "Kd"])
.boardAction((board: Board) => {
board
.setFlop(["2d", "2h", "2c"])
.setTurn("2s")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 42);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 95.45);
assert.equal(result.getPlayers()[1].getWins(), 0);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0);
assert.equal(result.getPlayers()[0].getTies(), 2);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 4.55);
assert.equal(result.getPlayers()[1].getTies(), 2);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 4.55);
done();
});
it('FULL HOUSE', (done) => {
const result = new Table()
.addPlayer(["8d", "8c"])
.addPlayer(["2d", "2c"])
.boardAction((board: Board) => {
board
.setFlop(["8h", "Ks", "Ad"])
//.setTurn("2h")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 989);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 99.9);
assert.equal(result.getPlayers()[1].getWins(), 1);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0.10);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('FLUSH', (done) => {
const result = new Table()
.addPlayer(["9d", "Td"])
.addPlayer(["2c", "3c"])
.boardAction((board: Board) => {
board
.setFlop(["8d", "2d", "Kd"])
//.setTurn("8d")
//.setRiver("Jh")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 962);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 97.17);
assert.equal(result.getPlayers()[1].getWins(), 28);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 2.83);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('FLUSH - DOUBLE', (done) => {
const result = new Table()
.addPlayer(["9d", "Td"])
.addPlayer(["7d", "8d"])
.boardAction((board: Board) => {
board
.setFlop(["5d", "2d", "Ad"])
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 988);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 99.80);
assert.equal(result.getPlayers()[1].getWins(), 1);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0.10);
assert.equal(result.getPlayers()[0].getTies(), 1);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0.10);
assert.equal(result.getPlayers()[1].getTies(), 1);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0.10);
done();
});
it('STRAIGHT', (done) => {
const result = new Table()
.addPlayer(["9d", "Tc"])
.addPlayer(["2d", "2c"])
.boardAction((board: Board) => {
board
.setFlop(["8h", "Js", "Ad"])
//.setTurn("8d")
//.setRiver("Jh")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 522);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 52.73);
assert.equal(result.getPlayers()[1].getWins(), 450);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 45.45);
assert.equal(result.getPlayers()[0].getTies(), 18);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 1.82);
assert.equal(result.getPlayers()[1].getTies(), 18);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 1.82);
done();
});
it('TRIPS', (done) => {
const result = new Table()
.addPlayer(["Kd", "Kc"])
.addPlayer(["2d", "2c"])
.boardAction((board: Board) => {
board
.setFlop(["2h", "Ks", "Ad"])
//.setTurn("8d")
//.setRiver("Jh")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 947);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 95.66);
assert.equal(result.getPlayers()[1].getWins(), 43);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 4.34);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('TWO PAIRS', (done) => {
const result = new Table()
.addPlayer(["Ad", "2c"])
.addPlayer(["Kd", "Qc"])
.boardAction((board: Board) => {
board
.setFlop(["Ah", "2s", "Ks"])
.setTurn("Qh")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 40);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 90.91);
assert.equal(result.getPlayers()[1].getWins(), 4);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 9.09);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('ONE PAIR', (done) => {
const result = new Table()
.addPlayer(["Ad", "2c"])
.addPlayer(["Qd", "Kc"])
.boardAction((board: Board) => {
board
.setFlop(["2h", "Ks", "8d"])
//.setTurn("2h")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 200);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 20.20);
assert.equal(result.getPlayers()[1].getWins(), 790);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 79.80);
assert.equal(result.getPlayers()[0].getTies(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTies(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
done();
});
it('STRAIGHT', (done) => {
const result = new Table()
.addPlayer(["Ad", "Tc"])
.addPlayer(["5d", "Kc"])
.boardAction((board: Board) => {
board
.setFlop(["6h", "7s", "8d"])
.setTurn("9h")
})
.calculate();
assert.equal(result.getPlayers()[0].getWins(), 41);
assert.equal(result.getPlayers()[0].getWinsPercentage(), 93.18);
assert.equal(result.getPlayers()[1].getWins(), 0);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0);
assert.equal(result.getPlayers()[0].getTies(), 3);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 6.82);
assert.equal(result.getPlayers()[1].getTies(), 3);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 6.82);
done();
});
it('TREE WAYS', (done) => {
const result = new Table()
.addPlayer(["2s", "2d"])
.addPlayer(["Ts", "Td"])
.addPlayer(["Ks", "Kd"])
.boardAction((board: Board) => {
board
.setFlop(["5s", "6s", "Qh"])
})
.calculate();
assert.equal(result.getPlayers()[0].getWinsPercentage(), 10.08);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 8.75);
assert.equal(result.getPlayers()[2].getWinsPercentage(), 81.17);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 0);
assert.equal(result.getPlayers()[2].getTiesPercentage(), 0);
done();
});
it('DEAD CARD', (done) => {
const ts = Date.now();
const result = new Table()
.addPlayer(["As", "Ks"])
.addPlayer(["Ad", "Kd"])
.boardAction((board: Board) => {
board
.setFlop(["Ts", "6h", "5h"])
.dead(["Js", "Qs"])
})
.calculate();
assert.equal(result.getPlayers()[0].getWinsPercentage(), 3.10);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 0);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 96.90);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 96.90);
done();
}).timeout(3e3);
it('50/50', (done) => {
const result = new Table()
.addPlayer(["2s", "3s"])
.addPlayer(["2d", "3d"])
.calculate();
assert.equal(Math.round(result.getPlayers()[0].getWinsPercentage()), 7);
assert.equal(Math.round(result.getPlayers()[1].getWinsPercentage()), 7);
assert.equal(Math.round(result.getPlayers()[0].getTiesPercentage()), 86);
assert.equal(Math.round(result.getPlayers()[1].getTiesPercentage()), 86);
done();
}).timeout(3e3);
it('EXHAUSTIVE', (done) => {
const result = new Table()
.addPlayer(["6s", "7s"])
.addPlayer(["6d", "7d"])
.exhaustive()
.calculate();
assert.equal(result.getPlayers()[0].getWinsPercentage(), 7.16);
assert.equal(result.getPlayers()[1].getWinsPercentage(), 7.16);
assert.equal(result.getPlayers()[0].getTiesPercentage(), 85.69);
assert.equal(result.getPlayers()[1].getTiesPercentage(), 85.69);
done();
}).timeout(2e4);
});