package pair

import (
	"strings"
	"testing"
)

func TestPair(t *testing.T) {
	pairs := NewPairs[string, int]()
	pairs.Append("a", 1)
	pairs.Append("b", 2)
	pairs.Append("c", 3)

	// Len
	if pairs.Len() != 3 {
		t.Fatalf("unexpected len: %v", pairs.Len())
	}

	// Pairs
	index := 0
	for first, second := range pairs.Pairs() {
		if first != pairs.list[index].First || second != pairs.list[index].Second {
			t.Fatalf("unexpected pair: %v, %v", first, second)
		}
		index++
	}

	// Firsts
	index = 0
	for first := range pairs.Firsts() {
		if first != pairs.list[index].First {
			t.Fatalf("unexpected pair: %v", first)
		}
		index++
	}

	// Seconds
	index = 0
	for second := range pairs.Seconds() {
		if second != pairs.list[index].Second {
			t.Fatalf("unexpected pair: %v", second)
		}
		index++
	}

	// All
	for pair := range pairs.All() {
		pair.First = pair.First + "-modified"
		pair.Second = pair.Second + 100
	}
	for first, second := range pairs.Pairs() {
		if !strings.HasSuffix(first, "-modified") {
			t.Fatalf("unexpected pair: %v, %v", first, second)
		}
		if second < 100 {
			t.Fatalf("unexpected pair: %v, %v", first, second)
		}
	}
}
