From b5cac3d137eed6634dc2b79d7db2c497b5d839ec Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 19 Jul 2015 08:40:29 -0700 Subject: [PATCH] Unit tests for inverse encoding and ring settings --- EnigmaTests/EnigmaTests.swift | 44 +++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/EnigmaTests/EnigmaTests.swift b/EnigmaTests/EnigmaTests.swift index 9b7949d..a8211b7 100644 --- a/EnigmaTests/EnigmaTests.swift +++ b/EnigmaTests/EnigmaTests.swift @@ -22,17 +22,26 @@ class MachineTests: XCTestCase { class RotorTests: XCTestCase { let rotorSeries = "EKMFLGDQVZNTOWYHXUSPAIBRCJ" + let rot13Series = "NOPQRSTUVWXYZABCDEFGHIJKLM" + + func makeRotorWithSeries(series: String) -> Rotor! { + do { + return try Rotor(series: series) + } catch let error { + XCTFail("Unable to create rotor: \(error)") + } + return nil + } func testThatUnadvancedSubstitutionWorks() { - let rotor = try! Rotor(series: rotorSeries) + let rotor = makeRotorWithSeries(rotorSeries) for (plainCharacter, cipherCharacter) in zip(alphaSeries.characters, rotorSeries.characters) { XCTAssertEqual(try! rotor.encode(plainCharacter), cipherCharacter) } } func testThatRotorCanAdvanceToRot13() { - let rot13Series = "NOPQRSTUVWXYZABCDEFGHIJKLM" - let rotor = try! Rotor(series: alphaSeries) + let rotor = makeRotorWithSeries(alphaSeries) rotor.advance(13) for (plainCharacter, cipherCharacter) in zip(alphaSeries.characters, rot13Series.characters) { XCTAssertEqual(try! rotor.encode(plainCharacter), cipherCharacter) @@ -40,13 +49,38 @@ class RotorTests: XCTestCase { } func testThatRotorCanSetToRot13() { - let rot13Series = "NOPQRSTUVWXYZABCDEFGHIJKLM" - let rotor = try! Rotor(series: alphaSeries) + let rotor = makeRotorWithSeries(alphaSeries) rotor.position = 13 for (plainCharacter, cipherCharacter) in zip(alphaSeries.characters, rot13Series.characters) { XCTAssertEqual(try! rotor.encode(plainCharacter), cipherCharacter) } } + + func testThatRotorCanDoInverseEncoding() { + let rotor = makeRotorWithSeries(rotorSeries) + for (plainCharacter, cipherCharacter) in zip(alphaSeries.characters, rotorSeries.characters) { + do { + let encodedCharacter = try rotor.inverseEncode(cipherCharacter) + XCTAssertEqual(encodedCharacter, plainCharacter) + } catch let error { + XCTFail("Error inverse-encoding \(cipherCharacter) -> \(plainCharacter): \(error)") + } + } + } + + func testThatRingSettingWorks() { + let rotor = makeRotorWithSeries(alphaSeries) + rotor.ringPosition = 1 + let characters = Array(alphaSeries.characters) + for (index, c) in alphaSeries.characters.enumerate() { + do { + let encodedCharacter = try rotor.encode(c) + XCTAssertEqual(encodedCharacter, characters[(index + 1) % characters.count]) + } catch let error { + XCTFail("Error encoding with ring setting = 1: \(error)") + } + } + } }