Ejemplo n.º 1
0
    def test_rotation_with_settings(self):
        machine = Machine([Rotors["I"](), Rotors["II"](), Rotors["III"]()],
                          Rotors["B"]())

        machine.set_rotor_settings(11, 15, 19)
        machine.set_rotor_positions("A", "C", "U")

        self.assertEqual(machine._get_positions(), "ACU")
        self.assertEqual(machine.encode("A"), "Z")
        self.assertEqual(machine._get_positions(), "ACV")
        self.assertEqual(machine.encode("A"), "T")
        self.assertEqual(machine._get_positions(), "ADW")
        self.assertEqual(machine.encode("AAAAA AAAAA AAAAA AAAAA AAAA"),
                         "RILUL FKGVT WFLSP YXFPY DUQJ")
        self.assertEqual(machine._get_positions(), "ADU")
        self.assertEqual(machine.encode("A"), "Y")
        self.assertEqual(machine._get_positions(), "ADV")
        self.assertEqual(machine.encode("A"), "V")
        self.assertEqual(machine._get_positions(), "AEW")
        self.assertEqual(machine.encode("A"), "S")
        self.assertEqual(machine._get_positions(), "BFX")
        self.assertEqual(machine.encode("A"), "E")
        self.assertEqual(machine._get_positions(), "BFY")
        self.assertEqual(
            machine.encode(
                "AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA"
            ),
            "MTQON LBVCE JTXON UVZTG FWDYI OGKRT QSNEI DGFCL KGLSH CMGJG OKRQI MDFSM MNDLW RSVEJ OYJXD"
        )
Ejemplo n.º 2
0
    def test_I_II_III_IV_rC_07111519_QEVZ(self):
        machine = Machine(
            [Rotors["I"](), Rotors["II"](), Rotors["III"](), Rotors["IV"]()],
            Rotors["C"]())
        machine.set_rotor_settings(7, 11, 15, 19)
        machine.set_rotor_positions("Q", "E", "V", "Z")

        self.assertEqual(machine.encode("Z"), "V")
        self.assertEqual(machine._get_positions(), "QFWA")
Ejemplo n.º 3
0
    def test_rotation_without_notches(self):
        machine = Machine(
            [Rotors["I"](), Rotors["II"](), Rotors["Beta"](), Rotors["III"]()],
            Rotors["B"]())

        machine.set_rotor_positions("A", "A", "A", "U")

        self.assertEqual(machine._get_positions(), "AAAU")
        machine.encode("A")
        self.assertEqual(machine._get_positions(), "AAAV")
        machine.encode("A")
        self.assertEqual(machine._get_positions(), "AABW")

        # Test that the Beta rotor will turn a full cycle and not increment the next rotor
        # 4 steps to complete the current rotation of the 1st rotor
        # then loop all 26 turns of the 1st rotor 25 times to complete a full cycle of the 2nd rotor
        loop_count = 4 + 26 * 25

        for _ in range(loop_count):
            machine.encode("A")

        self.assertEqual(machine._get_positions(), "AAAA")
Ejemplo n.º 4
0
    def test_rotation(self):
        machine = Machine([Rotors["I"](), Rotors["II"](), Rotors["III"]()],
                          Rotors["B"]())

        machine.set_rotor_positions("A", "C", "U")

        self.assertEqual(machine._get_positions(), "ACU")
        self.assertEqual(machine.encode("A"), "G")
        self.assertEqual(machine._get_positions(), "ACV")
        self.assertEqual(machine.encode("A"), "O")
        self.assertEqual(machine._get_positions(), "ADW")
        self.assertEqual(machine.encode("AAAAAAAAAAAAAAAAAAAAAAAA"),
                         "TFSODBBZZLXLCYZXIFGWFDZE")
        self.assertEqual(machine._get_positions(), "ADU")
        self.assertEqual(machine.encode("A"), "E")
        self.assertEqual(machine._get_positions(), "ADV")
        self.assertEqual(machine.encode("A"), "Q")
        self.assertEqual(machine._get_positions(), "AEW")
        self.assertEqual(machine.encode("A"), "I")
        self.assertEqual(machine._get_positions(), "BFX")
        self.assertEqual(machine.encode("A"), "B")
        self.assertEqual(machine._get_positions(), "BFY")
Ejemplo n.º 5
0
    def test_single_steps_II_rotor(self):
        machine = Machine([Rotors["II"](), Rotors["II"](), Rotors["II"]()],
                          Rotors["B"]())

        machine.set_rotor_positions("A", "A", "C")

        self.assertEqual(machine._get_positions(), "AAC")  # step: 1
        self.assertEqual(machine.encode("A"), "P")
        self.assertEqual(machine._get_positions(), "AAD")  # step: 1
        self.assertEqual(machine.encode("A"), "K")
        self.assertEqual(machine._get_positions(), "AAE")  # step: 1
        self.assertEqual(machine.encode("A"), "T")
        self.assertEqual(machine._get_positions(), "ABF")  # step: 1, 2
        self.assertEqual(machine.encode("A"), "S")
        self.assertEqual(machine._get_positions(), "ABG")  # step: 1
        self.assertEqual(machine.encode("A"), "Y")
        self.assertEqual(machine._get_positions(), "ABH")  # step: 1
Ejemplo n.º 6
0
    def test_double_steps_II_rotor(self):
        machine = Machine([Rotors["II"](), Rotors["II"](), Rotors["II"]()],
                          Rotors["B"]())

        machine.set_rotor_positions("A", "D", "C")

        self.assertEqual(machine._get_positions(), "ADC")  # step: 1
        self.assertEqual(machine.encode("A"), "P")
        self.assertEqual(machine._get_positions(), "ADD")  # step: 1
        self.assertEqual(machine.encode("A"), "P")
        self.assertEqual(machine._get_positions(), "ADE")  # step: 1
        self.assertEqual(machine.encode("A"), "X")
        self.assertEqual(machine._get_positions(), "AEF")  # step: 1, 2
        self.assertEqual(machine.encode("A"), "O")
        self.assertEqual(machine._get_positions(), "BFG")  # double: 1, 2, 3
        self.assertEqual(machine.encode("A"), "M")
        self.assertEqual(machine._get_positions(), "BFH")  # step: 1
Ejemplo n.º 7
0
    def test_positions_too_few(self):
        machine = Machine([Rotors["I"](), Rotors["II"](), Rotors["III"]()],
                          Rotors["B"]())

        machine.set_rotor_positions("R", "T")
        self.assertEqual(machine._get_positions(), "RTA")