@@ -24,11 +24,59 @@ def test_strategy(self):
24
24
# Starts by cooperating.
25
25
self .first_play_test (C )
26
26
# If opponent has defected more than 10 percent of the time, defect.
27
- P1 = axelrod .Retaliate ()
28
- P2 = axelrod .Player ()
29
- self .responses_test ([C ], [C ] * 4 , [C ] * 4 )
30
- self .responses_test ([D ], [C , C , C , C , D ], [C , C , C , D , C ])
31
- self .responses_test ([D ], [C ] * 6 , [C ] * 5 + [D ])
27
+ opponent = axelrod .Cooperator ()
28
+ actions = [(C , C )] * 5
29
+ self .versus_test (opponent = opponent , expected_actions = actions )
30
+
31
+ opponent = axelrod .MockPlayer ([C , C , C , D , C ])
32
+ actions = [(C , C ), (C , C ), (C , C ), (C , D ), (D , C ), (D , C )]
33
+ self .versus_test (opponent = opponent , expected_actions = actions )
34
+
35
+
36
+ class TestRetaliate2 (TestPlayer ):
37
+
38
+ name = "Retaliate 2: 0.08"
39
+ player = axelrod .Retaliate2
40
+ expected_classifier = {
41
+ 'memory_depth' : float ('inf' ), # Long memory
42
+ 'stochastic' : False ,
43
+ 'makes_use_of' : set (),
44
+ 'long_run_time' : False ,
45
+ 'inspects_source' : False ,
46
+ 'manipulates_source' : False ,
47
+ 'manipulates_state' : False
48
+ }
49
+
50
+ def test_strategy (self ):
51
+ # Starts by cooperating.
52
+ self .first_play_test (C )
53
+ # If opponent has defected more than 8 percent of the time, defect.
54
+ opponent = axelrod .MockPlayer ([C ] * 13 + [D ])
55
+ actions = [(C , C )] * 13 + [(C , D ), (D , C )]
56
+ self .versus_test (opponent = opponent , expected_actions = actions )
57
+
58
+
59
+ class TestRetaliate3 (TestPlayer ):
60
+
61
+ name = "Retaliate 3: 0.05"
62
+ player = axelrod .Retaliate3
63
+ expected_classifier = {
64
+ 'memory_depth' : float ('inf' ), # Long memory
65
+ 'stochastic' : False ,
66
+ 'makes_use_of' : set (),
67
+ 'long_run_time' : False ,
68
+ 'inspects_source' : False ,
69
+ 'manipulates_source' : False ,
70
+ 'manipulates_state' : False
71
+ }
72
+
73
+ def test_strategy (self ):
74
+ # Starts by cooperating.
75
+ self .first_play_test (C )
76
+ # If opponent has defected more than 5 percent of the time, defect.
77
+ opponent = axelrod .MockPlayer ([C ] * 19 + [D ])
78
+ actions = [(C , C )] * 19 + [(C , D ), (D , C )]
79
+ self .versus_test (opponent = opponent , expected_actions = actions )
32
80
33
81
34
82
class TestLimitedRetaliate (TestPlayer ):
@@ -50,38 +98,40 @@ def test_strategy(self):
50
98
self .first_play_test (C )
51
99
52
100
# If opponent has never defected, co-operate
53
- self .responses_test ([C ], [C ] * 4 , [C ] * 4 , attrs = {"retaliating" : False })
101
+ opponent = axelrod .Cooperator ()
102
+ actions = [(C , C )] * 5
103
+ self .versus_test (opponent = opponent , expected_actions = actions ,
104
+ attrs = {"retaliating" : False })
54
105
55
106
# Retaliate after a (C, D) round.
56
- self .responses_test ([D ], [C , C , C , C , D ], [C , C , C , D , C ],
57
- attrs = {"retaliating" : True })
58
- self .responses_test ([D ], [C , C , C , C , C , C ], [C , C , C , C , C , D ],
59
- attrs = {"retaliating" : True })
60
-
61
- # Case were retaliation count is less than limit: cooperate, reset
62
- # retaliation count and be not retaliating
63
- P1 = self .player ()
64
- P2 = TestOpponent ()
65
- P1 .history = [C , C , C , D , C ]
66
- P2 .history = [D , D , D , C , D ]
67
- P1 .retaliation_count = 1
68
- P1 .retaliation_limit = 0
69
- self .assertEqual (P1 .strategy (P2 ), C )
70
- self .assertEqual (P1 .retaliation_count , 0 )
71
- self .assertFalse (P1 .retaliating )
72
-
73
- # If I've hit the limit for retaliation attempts, co-operate
74
- P1 .history = [C , C , C , C , D ]
75
- P2 .history = [C , C , C , D , C ]
76
- P1 .retaliation_count = 20
77
- self .assertEqual (P1 .strategy (P2 ), C )
78
- self .assertFalse (P1 .retaliating )
79
-
80
- def test_reset (self ):
81
- P1 = axelrod .LimitedRetaliate ()
82
- P1 .history = [C , C , C , C , D ]
83
- P1 .retaliating = True
84
- P1 .retaliation_count = 4
85
- P1 .reset ()
86
- self .assertFalse (P1 .retaliating )
87
- self .assertEqual (P1 .retaliation_count , 0 )
107
+ opponent = axelrod .MockPlayer ([C , C , C , D , C ])
108
+ actions = [(C , C ), (C , C ), (C , C ), (C , D ), (D , C ), (D , C )]
109
+ self .versus_test (opponent = opponent , expected_actions = actions ,
110
+ attrs = {"retaliating" : True })
111
+
112
+ opponent = axelrod .Alternator ()
113
+
114
+ # Count retaliations
115
+ actions = [(C , C ), (C , D ), (D , C ), (D , D ), (D , C )]
116
+ self .versus_test (opponent = opponent , expected_actions = actions ,
117
+ attrs = {"retaliation_count" : 3 })
118
+ opponent = axelrod .Alternator ()
119
+
120
+ # Cooperate if we hit the retaliation limit
121
+ actions = [(C , C ), (C , D ), (D , C ), (D , D ), (C , C )]
122
+ self .versus_test (opponent = opponent , expected_actions = actions ,
123
+ attrs = {"retaliation_count" : 0 },
124
+ init_kwargs = {"retaliation_limit" : 2 })
125
+
126
+ # Defect again after cooperating
127
+ actions = [(C , C ), (C , D ), (D , C ), (D , D ), (C , C ), (D , D ), (D , C )]
128
+ self .versus_test (opponent = opponent , expected_actions = actions ,
129
+ attrs = {"retaliation_count" : 2 },
130
+ init_kwargs = {"retaliation_limit" : 2 })
131
+
132
+ # Different behaviour with different retaliation threshold
133
+ actions = [(C , C ), (C , D ), (D , C ), (C , D ), (C , C ), (C , D ), (C , C )]
134
+ self .versus_test (opponent = opponent , expected_actions = actions ,
135
+ attrs = {"retaliation_count" : 0 },
136
+ init_kwargs = {"retaliation_limit" : 2 ,
137
+ "retaliation_threshold" : 9 })
0 commit comments