package pool

import (
	"net/netip"
	"testing"
)

func TestAllocate(t *testing.T) {
	ps, err := Parse([]byte("pools:\n- name: a\n  addresses: [\"10.0.0.1-10.0.0.2\", \"10.0.1.0/30\"]\n"))
	if err != nil {
		t.Fatal(err)
	}
	p := ps[0]
	used := map[netip.Addr]bool{}
	var got []string
	for {
		ip, ok := p.Next(used)
		if !ok {
			break
		}
		used[ip] = true
		got = append(got, ip.String())
	}
	want := []string{"10.0.0.1", "10.0.0.2", "10.0.1.0", "10.0.1.1", "10.0.1.2", "10.0.1.3"}
	if len(got) != len(want) {
		t.Fatalf("got %v want %v", got, want)
	}
	for i := range want {
		if got[i] != want[i] {
			t.Fatalf("got %v want %v", got, want)
		}
	}
	if !p.Contains(netip.MustParseAddr("10.0.1.3")) || p.Contains(netip.MustParseAddr("10.0.2.0")) {
		t.Fatal("Contains falla")
	}
}
