Added tests for enigma machine and bombe
[cipher-training.git] / Untitled.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": true
8 },
9 "outputs": [],
10 "source": [
11 "from enigma import *"
12 ]
13 },
14 {
15 "cell_type": "code",
16 "execution_count": 2,
17 "metadata": {
18 "collapsed": true
19 },
20 "outputs": [],
21 "source": [
22 "e31 = Enigma(reflector_b_spec, \n",
23 " wheel_i_spec, wheel_i_pegs,\n",
24 " wheel_v_spec, wheel_v_pegs,\n",
25 " wheel_iii_spec, wheel_iii_pegs,\n",
26 " 6, 20, 24, \n",
27 " 'ua pf rq so ni ey bg hl tx zj')\n"
28 ]
29 },
30 {
31 "cell_type": "code",
32 "execution_count": 3,
33 "metadata": {
34 "collapsed": true
35 },
36 "outputs": [],
37 "source": [
38 "def advance(e, n):\n",
39 " def print_state(e):\n",
40 " print(' self.assertEqual(self.enigma31.wheel_positions, {})'.format(e.wheel_positions))\n",
41 " print(\" self.assertEqual(cat(self.enigma31.wheel_positions_l), '{}')\".format(cat(e.wheel_positions_l)))\n",
42 " print(' self.assertEqual(self.enigma31.peg_positions, {})'.format(e.peg_positions))\n",
43 " print()\n",
44 " \n",
45 " \n",
46 " \n",
47 " print_state(e)\n",
48 " for i in range(n):\n",
49 " print(' self.engima31.advance()')\n",
50 " e.advance()\n",
51 " print_state(e)\n"
52 ]
53 },
54 {
55 "cell_type": "code",
56 "execution_count": 4,
57 "metadata": {
58 "collapsed": false
59 },
60 "outputs": [
61 {
62 "name": "stdout",
63 "output_type": "stream",
64 "text": [
65 " self.assertEqual(self.enigma31.wheel_positions, (21, 5, 22))\n",
66 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayt')\n",
67 " self.assertEqual(self.enigma31.peg_positions, ([16], [1], [2]))\n",
68 "\n",
69 " self.engima31.advance()\n",
70 " self.assertEqual(self.enigma31.wheel_positions, (21, 5, 23))\n",
71 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayu')\n",
72 " self.assertEqual(self.enigma31.peg_positions, ([16], [1], [1]))\n",
73 "\n",
74 " self.engima31.advance()\n",
75 " self.assertEqual(self.enigma31.wheel_positions, (21, 5, 24))\n",
76 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayv')\n",
77 " self.assertEqual(self.enigma31.peg_positions, ([16], [1], [0]))\n",
78 "\n",
79 " self.engima31.advance()\n",
80 " self.assertEqual(self.enigma31.wheel_positions, (21, 6, 25))\n",
81 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'azw')\n",
82 " self.assertEqual(self.enigma31.peg_positions, ([16], [0], [25]))\n",
83 "\n",
84 " self.engima31.advance()\n",
85 " self.assertEqual(self.enigma31.wheel_positions, (22, 7, 0))\n",
86 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bax')\n",
87 " self.assertEqual(self.enigma31.peg_positions, ([15], [25], [24]))\n",
88 "\n",
89 " self.engima31.advance()\n",
90 " self.assertEqual(self.enigma31.wheel_positions, (22, 7, 1))\n",
91 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bay')\n",
92 " self.assertEqual(self.enigma31.peg_positions, ([15], [25], [23]))\n",
93 "\n"
94 ]
95 }
96 ],
97 "source": [
98 "e31.set_wheels('a', 'y', 't')\n",
99 "advance(e31, 5)"
100 ]
101 },
102 {
103 "cell_type": "code",
104 "execution_count": 5,
105 "metadata": {
106 "collapsed": false
107 },
108 "outputs": [
109 {
110 "name": "stdout",
111 "output_type": "stream",
112 "text": [
113 " self.assertEqual(self.enigma31.wheel_positions, (21, 6, 21))\n",
114 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'azs')\n",
115 " self.assertEqual(self.enigma31.peg_positions, ([16], [0], [3]))\n",
116 "\n",
117 " self.engima31.advance()\n",
118 " self.assertEqual(self.enigma31.wheel_positions, (22, 7, 22))\n",
119 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bat')\n",
120 " self.assertEqual(self.enigma31.peg_positions, ([15], [25], [2]))\n",
121 "\n",
122 " self.engima31.advance()\n",
123 " self.assertEqual(self.enigma31.wheel_positions, (22, 7, 23))\n",
124 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bau')\n",
125 " self.assertEqual(self.enigma31.peg_positions, ([15], [25], [1]))\n",
126 "\n",
127 " self.engima31.advance()\n",
128 " self.assertEqual(self.enigma31.wheel_positions, (22, 7, 24))\n",
129 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bav')\n",
130 " self.assertEqual(self.enigma31.peg_positions, ([15], [25], [0]))\n",
131 "\n",
132 " self.engima31.advance()\n",
133 " self.assertEqual(self.enigma31.wheel_positions, (22, 8, 25))\n",
134 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bbw')\n",
135 " self.assertEqual(self.enigma31.peg_positions, ([15], [24], [25]))\n",
136 "\n",
137 " self.engima31.advance()\n",
138 " self.assertEqual(self.enigma31.wheel_positions, (22, 8, 0))\n",
139 " self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bbx')\n",
140 " self.assertEqual(self.enigma31.peg_positions, ([15], [24], [24]))\n",
141 "\n"
142 ]
143 }
144 ],
145 "source": [
146 "e31.set_wheels('a', 'z', 's')\n",
147 "advance(e31, 5)"
148 ]
149 },
150 {
151 "cell_type": "code",
152 "execution_count": null,
153 "metadata": {
154 "collapsed": true
155 },
156 "outputs": [],
157 "source": []
158 }
159 ],
160 "metadata": {
161 "kernelspec": {
162 "display_name": "Python 3",
163 "language": "python",
164 "name": "python3"
165 },
166 "language_info": {
167 "codemirror_mode": {
168 "name": "ipython",
169 "version": 3
170 },
171 "file_extension": ".py",
172 "mimetype": "text/x-python",
173 "name": "python",
174 "nbconvert_exporter": "python",
175 "pygments_lexer": "ipython3",
176 "version": "3.5.1+"
177 }
178 },
179 "nbformat": 4,
180 "nbformat_minor": 0
181 }