package plist

import (
	"testing"
)

func TestPriority(t *testing.T) {
	pl := New()

	pl.Insert(NewNodeInt(1))
	pl.Insert(NewNodeInt(2))
	pl.Insert(NewNodeInt(3))
	if pl.String() != "[3,2,1]" {
		t.Error("Insert or String error", pl.String())
	}

	if pl.Get(0).GetValue() != 3 {
		t.Error(pl.Get(0).GetValue())
	}

	if pl.Get(pl.Size()-1).GetValue() != 1 {
		t.Error(pl.Get(pl.Size() - 1).GetValue())
	}

	if pl.Size() != 3 {
		t.Error("size error, current is", pl.Size())
	}

	pl.Remove(pl.Get(2))
	if pl.String() != "[3,2]" || pl.Size() != 2 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

	pl.Remove(pl.GetReverse(0))
	if pl.String() != "[3]" || pl.Size() != 1 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

	pl.Remove(pl.Get(0))
	if pl.String() != "[]" || pl.Size() != 0 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

	pl.Insert(NewNodeInt(6))
	pl.Insert(NewNodeInt(5))
	pl.Insert(NewNodeInt(7))
	pl.Insert(NewNodeInt(12))
	pl.Insert(NewNodeInt(8))
	if pl.String() != "[12,8,7,6,5]" || pl.Size() != 5 {
		t.Error("Insert or String error, current is ", pl.String(), pl.Size())
	}

	pl.RemoveReverseIndex(3)
	if pl.String() != "[12,7,6,5]" || pl.Size() != 4 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

	size := pl.Size()
	for i := 0; i < size; i++ {
		pl.RemoveReverseIndex(0)
	}
	if pl.String() != "[]" || pl.Size() != 0 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

	pl.Insert(NewNodeInt(6))
	pl.Insert(NewNodeInt(1))
	pl.Insert(NewNodeInt(9))
	pl.Insert(NewNodeInt(15))
	pl.Insert(NewNodeInt(12))
	pl.Insert(NewNodeInt(8))

	if pl.GetCompare(NewNodeInt(9)).GetValue() != 9 {
		t.Error(pl.String(), pl.GetCompare(NewNodeInt(9)).GetValue())
	}

	if pl.GetCompareReverse(NewNodeInt(11)).GetValue() != 12 {
		t.Error(pl.String(), pl.GetCompareReverse(NewNodeInt(11)).GetValue())
	}

	pl.Clear()

	if pl.String() != "[]" || pl.Size() != 0 {
		t.Error("Remove error current is ", pl.String(), pl.Size())
	}

}
