Skip to content

Instantly share code, notes, and snippets.

@wookay
Created November 8, 2010 22:49
Show Gist options
  • Save wookay/668418 to your computer and use it in GitHub Desktop.
Save wookay/668418 to your computer and use it in GitHub Desktop.
Chess Test
//
// TestChess.m
// Chess
//
// Created by wookyoung noh on 08/11/10.
// Copyright 2010 factorcat. All rights reserved.
//
#import "TestChess.h"
#import "ChessBoard.h"
#import "ChessUnit.h"
#import "UnitTest.h"
#import "ChessManager.h"
#import "Logger.h"
#import "GeometryExt.h"
@implementation TestChess
-(void) test_castling {
[CHESSMAN loadGame];
kMoveType moveResult;
ChessUnit* blackPawn;
blackPawn = [CHESSMAN.board unitAt:CGPointMake(5,2)];
moveResult = [CHESSMAN.board move:blackPawn To:CGPointMake(5,4)];
ChessUnit* blackBishop = [CHESSMAN.board unitAt:CGPointMake(6,1)];
moveResult = [CHESSMAN.board move:blackBishop To:CGPointMake(1,6)];
assert_equal(kMoveSuccess, moveResult);
ChessUnit* blackKnight = [CHESSMAN.board unitAt:CGPointMake(7,1)];
assert_equal(UNITTYPE_KNIGHT, [blackKnight unitType]);
assert_equal(3, [CHESSMAN.board movablePositions:blackKnight].count);
moveResult = [CHESSMAN.board move:blackKnight To:CGPointMake(6,3)];
assert_equal(kMoveSuccess, moveResult);
blackPawn = [CHESSMAN.board unitAt:CGPointMake(8,2)];
moveResult = [CHESSMAN.board move:blackPawn To:CGPointMake(8,4)];
ChessUnit* blackRook = [CHESSMAN.board unitAt:CGPointMake(8,1)];
assert_equal(4, [CHESSMAN.board movablePositions:blackRook].count);
ChessUnit* blackKing = [CHESSMAN.board unitAt:CGPointMake(5,1)];
assert_equal(3, [CHESSMAN.board movablePositions:blackKing].count);
moveResult = [CHESSMAN.board move:blackKing To:CGPointMake(7,1)];
assert_equal(kMoveCastling, moveResult);
log_info(@"CHESSMAN panInfo %@", [CHESSMAN panInfo]);
}
-(void) test_promotion {
[CHESSMAN loadGame];
ChessUnit* pawn = [CHESSMAN.board unitAt:CGPointMake(7, 7)];
assert_equal(UNITTYPE_PAWN, [pawn unitType]);
assert_equal(2, [CHESSMAN.board movablePositions:pawn].count);
assert_equal(0, [CHESSMAN.board targetablePositions:pawn].count);
kMoveType moveResult;
kAttackType attackResult;
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(7,7)];
assert_equal(kMoveFailed, moveResult);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(6,7)];
assert_equal(kMoveFailed, moveResult);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(7,5)];
assert_equal(kMoveSuccess, moveResult);
assert_equal(1, [CHESSMAN.board movablePositions:pawn].count);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(7,3)];
assert_equal(kMoveFailed, moveResult);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(7,4)];
assert_equal(kMoveSuccess, moveResult);
ChessUnit* blackPawn = [CHESSMAN.board unitAt:CGPointMake(6,2)];
moveResult = [CHESSMAN.board move:blackPawn To:CGPointMake(6,4)];
assert_equal(kMoveSuccess, moveResult);
assert_false([CHESSMAN.board isDeadUnit:blackPawn]);
assert_equal(1, [CHESSMAN.board targetablePositions:pawn].count);
attackResult = [CHESSMAN.board attack:pawn To:CGPointMake(6,3)];
assert_equal(kAttackEnPassan, attackResult);
assert_true([CHESSMAN.board isDeadUnit:blackPawn]);
assert_equal(2, [CHESSMAN.board targetablePositions:pawn].count);
assert_equal(1, [CHESSMAN.board movablePositions:pawn].count);
blackPawn = [CHESSMAN.board unitAt:CGPointMake(5,2)];
moveResult = [CHESSMAN.board move:blackPawn To:CGPointMake(5,4)];
ChessUnit* blackBishop = [CHESSMAN.board unitAt:CGPointMake(6,1)];
moveResult = [CHESSMAN.board move:blackBishop To:CGPointMake(1,6)];
assert_equal(kMoveSuccess, moveResult);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(6,2)];
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(6,1)];
[CHESSMAN.board promotion:pawn to:UNITTYPE_QUEEN];
assert_equal(UNITTYPE_QUEEN, [pawn unitType]);
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(6,6)];
moveResult = [CHESSMAN.board move:pawn To:CGPointMake(4,6)];
assert_nil([CHESSMAN.board unitAt:CGPointMake(6,1)]);
//log_info(@"CHESSMAN panInfo %@", [CHESSMAN panInfo]);
}
-(void) test_unit {
ChessUnit* pawn = [ChessUnit unitWithName:@"P" nation:NATION_WHITE];
assert_equal(UNITTYPE_PAWN, [pawn unitType]);
assert_false([CHESSMAN.board hasUnitAt:CGPointMake(5, 5)]);
[CHESSMAN.board setPosition:pawn To:CGPointMake(5,5)];
assert_true([CHESSMAN.board hasUnitAt:CGPointMake(5, 5)]);
[CHESSMAN.board popUnit:CGPointMake(5,5)];
assert_false([CHESSMAN.board hasUnitAt:CGPointMake(5, 5)]);
}
@end
@wookay
Copy link
Author

wookay commented Nov 8, 2010

Started
.......            TestChess.m #050   CHESSMAN panInfo 
  1 2 3 4 5 6 7 8
1 R N B Q - R K -
2 P P P P - P P -
3 - - - - - N - -
4 - - - - P - - P
5 - - - - - - - -
6 B - - - - - - -
7 p p p p p p p p
8 r n b q k b n r
.......................
Finished in 1.29e+09 seconds.

5 tests, 30 assertions, 0 failures, 0 errors

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment