module TK.SpaceTac.Specs { testing("Target", test => { test.case("initializes from ship or location", check => { var target: Target; target = Target.newFromLocation(2, 3); check.equals(target.x, 2); check.equals(target.y, 3); check.equals(target.ship_id, null); var ship = new Ship(); ship.arena_x = 4; ship.arena_y = -2.1; target = Target.newFromShip(ship); check.equals(target.x, 4); check.equals(target.y, -2.1); check.equals(target.ship_id, ship.id); }); test.case("gets distance to another target", check => { var t1 = Target.newFromLocation(5, 1); var t2 = Target.newFromLocation(6, 2); check.nears(t1.getDistanceTo(t2), Math.sqrt(2)); }); test.case("gets angle to another target", check => { var t1 = Target.newFromLocation(2, 3); var t2 = Target.newFromLocation(4, 5); check.nears(t1.getAngleTo(t2), Math.PI / 4); }); test.case("snaps to a grid", check => { let grid = new HexagonalArenaGrid(5, 1); check.equals(Target.newFromLocation(1, 1).snap(grid), Target.newFromLocation(0, 0), "1,1"); check.equals(Target.newFromLocation(6, 4).snap(grid), Target.newFromLocation(7.5, 5), "6,4"); let ship = new Ship(); check.equals(new Target(6, 4, ship).snap(grid), new Target(7.5, 5, ship), "6,4,ship"); }); }); }