1
0
Fork 0
spacetac/src/core/ai/TacticalAI.spec.ts

45 lines
1.6 KiB
TypeScript
Raw Normal View History

/// <reference path="Maneuver.ts" />
2017-09-24 22:23:22 +00:00
module TK.SpaceTac.Specs {
describe("TacticalAI", function () {
class FixedManeuver extends Maneuver {
score: number;
constructor(score: number) {
2017-05-18 21:10:16 +00:00
let battle = new Battle();
let ship = battle.fleets[0].addShip();
2017-09-19 15:09:06 +00:00
super(ship, new BaseAction("nothing", "Do nothing"), new Target(0, 0));
this.score = score;
}
}
// producer of FixedManeuver from a list of scores
2017-02-24 00:34:31 +00:00
let producer = (...scores: number[]) => imap(iarray(scores), score => new FixedManeuver(score));
2017-03-09 17:11:00 +00:00
let applied: number[] = [];
beforeEach(function () {
2017-05-17 23:03:33 +00:00
spyOn(console, "log").and.stub();
applied = [];
});
it("applies the highest evaluated maneuver", function () {
2017-05-18 21:10:16 +00:00
let battle = new Battle();
let ship = battle.fleets[0].addShip();
2017-10-25 22:45:53 +00:00
TestTools.setShipPlaying(battle, ship);
ship.playing = true;
let ai = new TacticalAI(ship, Timer.synchronous);
2017-05-17 23:03:33 +00:00
spyOn(ai, "getDefaultProducers").and.returnValue([
producer(1, -8, 4),
producer(3, 7, 0, 6, 1)
]);
spyOn(ai, "getDefaultEvaluators").and.returnValue([
(maneuver: Maneuver) => (<FixedManeuver>maneuver).score
]);
spyOn(ai, "applyManeuver").and.callFake((maneuver: FixedManeuver) => applied.push(maneuver.score));
ai.play();
expect(applied).toEqual([7]);
});
});
}