package cql

import (
	"bytes"
	"testing"
)

func TestWriteBytesMapRoundTrip(t *testing.T) {
	input := map[string][]byte{
		"a": []byte("alpha"),
		"b": nil,
	}
	encoded := writeBytesMap(input)
	decoded, n, err := readBytesMap(encoded)
	if err != nil {
		t.Fatalf("readBytesMap failed: %v", err)
	}
	if n != len(encoded) {
		t.Fatalf("expected %d bytes read, got %d", len(encoded), n)
	}
	if got := len(decoded); got != len(input) {
		t.Fatalf("expected %d entries, got %d", len(input), got)
	}
	if v := decoded["b"]; v != nil {
		t.Fatalf("expected nil value for key b, got %v", v)
	}
	if v := decoded["a"]; !bytes.Equal(v, input["a"]) {
		t.Fatalf("expected %q for key a, got %q", input["a"], v)
	}
}

func TestWriteStringListRoundTrip(t *testing.T) {
	list := []string{"alpha", "beta", "gamma"}
	encoded := writeStringListFromBytes(list)
	decoded, err := readStringListFromBytes(encoded)
	if err != nil {
		t.Fatalf("readStringListFromBytes failed: %v", err)
	}
	if len(decoded) != len(list) {
		t.Fatalf("expected %d strings, got %d", len(list), len(decoded))
	}
	for i := range list {
		if decoded[i] != list[i] {
			t.Fatalf("expected %q at %d, got %q", list[i], i, decoded[i])
		}
	}
}
