package caesar import ( "testing" ) func TestEncode(t *testing.T) { msg := "Attack at dawn" t.Logf("testing message %s", msg) if Encode(msg) != "Dwwdfn dw gdzq" { t.Fail() } } func TestLong(t *testing.T) { if testing.Short() { t.Skip() } msg := "Attack at dawn" encoded := Encode(msg) if encoded == msg { t.Errorf("expected ciphertext and plaintext to differ") } decoded := Decode(encoded) if decoded != msg { t.Errorf("expected recovered plaintext to match message, but got: %s", decoded) } } func TestEncoderTable(t *testing.T) { tests := []struct { in string out string }{ {"abcxyz", "defabc"}, {"ABCXYZ", "DEFABC"}, {"1234567890", "4567890123"}, {"!@#$%^&*()", "!@#$%^&*()"}, } for _, test := range tests { result := Encode(test.in) if result != test.out { t.Errorf("encode %s: expected %s, got %s", test.in, test.out, result) } } } func TestEncoderIndividualTable(t *testing.T) { tests := []struct { name string in string out string }{ {"lowers", "abcxyz", "defabc"}, {"uppers", "ABCXYZ", "DEFABC"}, {"nums", "1234567890", "4567890123"}, {"symbols", "!@#$%^&*()", "!@#$%^&*()"}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { result := Encode(test.in) if result != test.out { t.Fatalf("expected %s, got %s", test.out, result) // HL } }) } } func BenchmarkFailure(b *testing.B) { b.Fail() } func BenchmarkEncode(b *testing.B) { for i := 0; i < b.N; i++ { Encode("attack at dawn") } }