def getWinnersTest(): player=random.randrange(2,5) seed=random.randrange(3,11) game = d.initializeGame(player, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], seed) #for i in range(MAX_TEST): turn=random.randrange(0,player) game.whoseTurn=turn hand1=[] deck1=[] discard1=[] for i in range(player): hand1.append(random.randrange(0,MAX_HAND)) deck1.append(random.randrange(0,MAX_DECK)) discard1.append(random.randrange(0,MAX_DECK)) for p in range(player): game.hand[p]=[] game.deck[p]=[] game.discard[p]=[] for a in range(hand1[p]): game.hand[p].append(random.randrange(d.curse,d.mine+1)) for b in range(deck1[p]): game.deck[p].append(random.randrange(d.curse,d.mine+1)) for c in range(discard1[p]): game.discard[p].append(random.randrange(d.curse,d.mine+1)) d.getWinners(game)
def test_buyCard(x,c): g=d.initializeGame(x, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall,d.mine], 2) if g.numBuys<1 or g.supplyCount[c]==0 or g.coins<d.getCost(c): assert d.buyCard(c, g)==-1 else: assert d.buyCard(c, g)==0
def test_endTurn(s): g=d.initializeGame(s, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall,d.mine], 2) n=random.randrange(0,s) g.whoseTurn=n r=d.endTurn(g) if r==0: assert g.whoseTurn!=n
def isGameOverTest(): player=random.randrange(2,5) seed=random.randrange(3,11) game = d.initializeGame(player, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], seed) #for i in range(MAX_TEST): for card in range(d.curse,d.mine): game.supplyCount[card]=random.randrange(0,12) d.isGameOver(game)
def random_GameState(w,s): #x=random.randrange(2,5) g=d.initializeGame(w, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall,d.mine], s) for i in xrange(10): if d.isGameOver(g): break d.buyCard(random.randrange(7,17),g) d.playCard(len(g.hand[g.whoseTurn])-1,random.randrange(1,16),random.randrange(1,16),random.randrange(1,17),g) d.endTurn(g) return g
def random_GameState2(w,s): cardlist=[d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.smithy, d.village,d.sea_hag] g=d.initializeGame(w, cardlist, s) for i in xrange(10): if d.isGameOver(g): break d.buyCard(random.choice(cardlist),g) d.playCard(len(g.hand[g.whoseTurn])-1,random.randrange(0,len(g.hand[g.whoseTurn])-1),random.choice(cardlist),random.choice(cardlist),g) d.endTurn(g) return g
def test_initialzeGame_2(s,x): g=d.initializeGame(x, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall,d.mine], s) assert isinstance(g,d.gameState) if x==2: supply={d.curse:10,d.estate:8,d.duchy:8,d.province:8,d.copper:46,d.silver:40,d.gold:30,d.adventurer:10,d.ambassador:10,d.baron:10,d.council_room:10, d.cutpurse:10,d.embargo:10, d.feast:10, d.gardens:8, d.great_hall:8, d.mine:10} assert supply==g.supplyCount if x==3: supply={d.curse:20,d.estate:12,d.duchy:12,d.province:12,d.copper:39,d.silver:40,d.gold:30,d.adventurer:10,d.ambassador:10,d.baron:10,d.council_room:10, d.cutpurse:10,d.embargo:10, d.feast:10, d.gardens:12, d.great_hall:12, d.mine:10} assert supply==g.supplyCount if x==4: supply={d.curse:30,d.estate:12,d.duchy:12,d.province:12,d.copper:32,d.silver:40,d.gold:30,d.adventurer:10,d.ambassador:10,d.baron:10,d.council_room:10, d.cutpurse:10,d.embargo:10, d.feast:10, d.gardens:12, d.great_hall:12, d.mine:10} assert supply==g.supplyCount
def test_isGameOver(s): g=d.initializeGame(s, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall,d.mine], 2) for i in xrange(7,17): g.supplyCount[i]=random.randrange(0,10) g.supplyCount[3]=random.randrange(0,10) count=0 for i in xrange(7,17): if g.supplyCount[i]==0: count=count+1 if g.supplyCount[3]==0: assert d.isGameOver(g)==1 elif count>=3: assert d.isGameOver(g)==1 else: assert d.isGameOver(g)==0
def buyCardTest(): player=random.randrange(2,5) seed=random.randrange(3,11) game = d.initializeGame(player, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], seed) #for i in range(MAX_TEST): turn=random.randrange(0,player) card=random.choice(game.kingdomCards) game.supplyCount[card]=random.randrange(0,31) game.coins=random.randrange(0,100) game.numBuys=random.randrange(0,10) d.buyCard(card,game)
def drawCardTest(): player=random.randrange(2,5) seed=random.randrange(3,11) game = d.initializeGame(player, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], seed) #for i in range(MAX_TEST): turn=random.randrange(0,player) deck=random.randrange(0,MAX_DECK) discard=random.randrange(0,MAX_DECK) hand=random.randrange(0,MAX_HAND) game.deck[turn]=[] game.discard[turn]=[] game.hand[turn]=[] for i in range(deck): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) d.drawCard(turn,game)
# this is my shuffle function # the random.shuffle() function can shuffle empty array so I do not check array is empty or not # def shuffle(player,state): # array=state.deck[player] ##array.sort() # in C version it do the sort but I am not sure we have to do it at python # random.shuffle(array) # state.deck[player]=array # return 0 # if we trust initializeGame() is correct we can use this function initial gamestate #but need to follow some rule like players have to be 2-4 card=[] for i in range(10): card.append(i+7) game = d.initializeGame(3, card, 10) ##we also can create a gamestate break the rules and just fill the deck as test data # game=d.gameState(1) # game.deck[0]=[4,4,4,1,1] game2=copy.deepcopy(game) assert(game.deck==game2.deck) print(game.deck) print('test shuffle ##################################') print('shuffle player1 #1') print(game.deck) assert(d.shuffle(0,game)==0) assert(game.deck[0]!=game2.deck[0])
import dominion_p as d import copy game = d.initializeGame(2, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], 10) game2=copy.deepcopy(game) print(game.supplyCount) print(game.deck[0]) print(game.hand[0]) # test toFlag ==1 assert(d.gainCard(d.adventurer,game,1,0)==0) assert(game.supplyCount[d.adventurer]+1==game2.supplyCount[d.adventurer]) assert(d.adventurer in game.deck[0]) #test toFlag ==2 game2=copy.deepcopy(game) assert(d.gainCard(d.adventurer,game,2,0)==0) assert(game.supplyCount[d.adventurer]+1==game2.supplyCount[d.adventurer]) assert(d.adventurer in game.hand[0]) #test toFlag not ==1 and 2 game2=copy.deepcopy(game) assert(d.gainCard(d.adventurer,game,0,0)==0) assert(game.supplyCount[d.adventurer]+1==game2.supplyCount[d.adventurer]) assert(d.adventurer in game.discard[0])
def playCardTest(): player=random.randrange(2,5) seed=random.randrange(3,11) game = d.initializeGame(player, [d.adventurer, d.ambassador, d.baron, d.council_room, d.cutpurse, d.embargo, d.feast, d.gardens, d.great_hall, d.mine], seed) #for i in range(MAX_TEST): turn=random.randrange(0,player) game.whoseTurn=turn play=random.choice(game.kingdomCards) #play=d.baron if play==d.adventurer: deck=random.randrange(0,MAX_DECK) discard=random.randrange(0,MAX_DECK) hand=random.randrange(0,MAX_HAND-1) game.deck[turn]=[] game.discard[turn]=[] game.hand[turn]=[] for i in range(deck): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.adventurer) # insert the kingdom card to position choice1=-1 #adventurer does not need player any choise so set all -1 and bonus use default choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.ambassador: pass #still not clearn this card effect elif play==d.baron: #I think have some bug at the baron implementation hand=random.randrange(0,MAX_HAND-1) discard=random.randrange(0,MAX_DECK) game.hand[turn]=[] game.discard[turn]=[] for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.baron) choice1=random.randrange(0,hand) choice2=random.randrange(0,2) choice3=-1 # don't need 3 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.council_room: hand1=[] deck1=[] for i in range(player): hand1.append(random.randrange(0,MAX_HAND-1)) for j in range(player): deck1.append(random.randrange(0,MAX_DECK)) game.hand[turn]=[] game.deck[turn]=[] for j in range(hand1[turn]): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(deck1[turn]): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand1[turn]) game.hand[turn].insert(pos,d.council_room) for a in range(player): if a != turn: game.hand[a]=[] game.deck[a]=[] for b in range(hand1[a]): game.hand[a].append(random.randrange(d.curse,d.mine+1)) for c in range(deck1[a]): game.deck[a].append(random.randrange(d.curse,d.mine+1)) choice1=-1 #don't need choice so set all -1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.cutpurse: hand1=[] deck1=[] for i in range(player): hand1.append(random.randrange(0,MAX_HAND-1)) for j in range(player): deck1.append(random.randrange(0,MAX_DECK)) game.hand[turn]=[] game.deck[turn]=[] for j in range(hand1[turn]): # current player game.hand[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(deck1[turn]): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand1[turn]) game.hand[turn].insert(pos,d.cutpurse) for a in range(player): #other player if a !=turn: game.hand[a]=[] game.deck[a]=[] for b in range(hand1[a]): game.hand[a].append(random.randrange(d.curse,d.mine+1)) for c in range(deck1[a]): game.deck[a].append(random.randrange(d.curse,d.mine+1)) choice1=-1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.embargo: hand=random.randrange(0,MAX_HAND-1) game.hand[turn]=[] for i in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.embargo) ####random supplyCount for card in game.kingdomCards: game.supplyCount[card]=random.randrange(0,11) #####random embargo token for token in game.kingdomCards: game.embargoTokens[token]=random.randrange(0,99) choice1=random.randrange(d.adventurer,d.mine+1) #random pick one choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.feast: hand=random.randrange(0,MAX_HAND-1) game.hand[turn]=[] for i in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.feast) for card in game.kingdomCards: game.supplyCount[card]=random.randrange(0,11) choice1=random.choice(game.kingdomCards) choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.great_hall: deck=random.randrange(0,MAX_DECK) discard=random.randrange(0,MAX_DECK) hand=random.randrange(0,MAX_HAND-1) game.deck[turn]=[] game.discard[turn]=[] game.hand[turn]=[] for i in range(deck): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.great_hall) game.numActions=random.randrange(0,99) choice1=-1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.mine: hand=random.randrange(0,MAX_HAND-1) game.hand[turn]=[] for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.mine) for card in range(d.copper,d.gold+1): ##random moey game.supplyCount[card]=random.randrange(0,50) choice1=random.choice(game.hand[turn]) choice2=random.randrange(d.copper,d.gold+1) choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.smithy: deck=random.randrange(0,MAX_DECK) discard=random.randrange(0,MAX_DECK) hand=random.randrange(0,MAX_HAND-1) game.deck[turn]=[] game.discard[turn]=[] game.hand[turn]=[] for i in range(deck): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.smithy) choice1=-1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.village: deck=random.randrange(0,MAX_DECK) discard=random.randrange(0,MAX_DECK) hand=random.randrange(0,MAX_HAND-1) game.deck[turn]=[] game.discard[turn]=[] game.hand[turn]=[] for i in range(deck): game.deck[turn].append(random.randrange(d.curse,d.mine+1)) for j in range(discard): game.discard[turn].append(random.randrange(d.curse,d.mine+1)) for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.village) game.numActions=random.randrange(0,99) choice1=-1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game) elif play==d.sea_hag: hand=random.randrange(0,MAX_HAND-1) game.hand[turn]=[] for k in range(hand): game.hand[turn].append(random.randrange(d.curse,d.mine+1)) pos=random.randrange(0,hand) game.hand[turn].insert(pos,d.sea_hag) discard1=[] deck1=[] for i in range(player): discard1.append(random.randrange(0,MAX_HAND-1)) for j in range(player): deck1.append(random.randrange(0,MAX_DECK)) for a in range(player): if a!=turn: game.discard[a]=[] game.deck[a]=[] for b in range(discard1[a]): game.discard[a].append(random.randrange(d.curse,d.mine+1)) for c in range(deck1[a]): game.deck[a].append(random.randrange(d.curse,d.mine+1)) choice1=-1 choice2=-1 choice3=-1 d.playCard(pos,choice1,choice2,choice3,game)
def test_initialzeGame(x,l,s): g=d.initializeGame(x,l,s) if len(l)==len(set(l)): assert g==-1