package bencode import "testing" func TestDecode(t *testing.T) { tests := []struct { in string want any err bool }{ { in: "4:spam", want: "spam", }, { in: "0:", want: "", }, { in: "i42e", want: int64(42), }, { in: "i-42e", want: int64(-42), }, { in: "i0e", want: int64(0), }, { in: "", err: true, }, } for _, tt := range tests { t.Run(tt.in, func(t *testing.T) { got, _, err := Decode([]byte(tt.in)) if tt.err { if err == nil { t.Error("expected error") } return } if err != nil { t.Fatalf("unexpected error: %v", err) } if got != tt.want { t.Errorf("got %v, want %v", got, tt.want) } }) } } func TestEncode(t *testing.T) { tests := []struct { name string in any want string }{ { name: "string", in: "spam", want: "4:spam", }, { name: "empty string", in: "", want: "0:", }, { name: "int", in: int64(42), want: "i42e", }, { name: "negative int", in: int64(-42), want: "i-42e", }, { name: "list", in: []any{"a", "b"}, want: "l1:a1:be", }, { name: "empty list", in: []any{}, want: "le", }, { name: "dict", in: map[string]any{"b": int64(2), "a": int64(1)}, want: "d1:ai1e1:bi2ee", }, { name: "empty dict", in: map[string]any{}, want: "de", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := Encode(tt.in) if err != nil { t.Fatalf("unexpected error: %v", err) } if string(got) != tt.want { t.Errorf("got %s, want %s", got, tt.want) } }) } }