package list import ( "github.com/stretchr/testify/assert" "pgregory.net/rapid" "testing" ) // func TestListLen(t *testing.T) { // assert.Equal(t, 0, Empty().Len(), "should insert at head") // assert.Equal(t, 1, Empty().Conj(1).Len(), "should insert at head") // assert.Equal(t, 2, Empty().Conj(1).Conj(2).Len(), "should insert at head") // } // // func TestListString(t *testing.T) { // assert.Equal(t, "()", Empty().String(), "should insert at head") // } // // func TestListConj(t *testing.T) { // var l IList // assert.Equal(t, "()", Empty().String(), "should insert at head") // l = New(5) // assert.Equal(t, "(5)", l.String(), "should insert at head") // l = Empty().Conj(4) // assert.Equal(t, "(4)", l.String(), "should insert at head") // } // // func TestListFirst(t *testing.T) { // l := Empty().Conj(5).Conj(6).Conj(7) // assert.Equal(t, 7, l.First(), "should return first element") // assert.Equal(t, nil, Empty().First(), "should return nil") // } // // func TestListRest(t *testing.T) { // l := Empty().Conj(5).Conj(6).Conj(7) // assert.Equal(t, "(6 5)", l.Rest().String(), "should return rest sublist") // assert.Equal(t, "(5)", l.Rest().Rest().String(), "should return rest sublist") // assert.Equal(t, "()", l.Rest().Rest().Rest().String(), "should return rest sublist") // assert.Equal(t, Empty(), Empty().Rest(), "should return rest sublist") // assert.Equal(t, Empty(), Empty().Rest().Rest(), "should return rest sublist") // } // generative tests func ListLengthProperty(t *testing.T) { myList := Empty() expectedSized := 0 rapid.Check(t, func(t *rapid.T) { t.Repeat(map[string]func(*rapid.T){ "conj": func(t *rapid.T) { expectedSized += 1 myList = myList.Conj(rapid.Int().Draw(t, "el")) }, "rest": func(t *rapid.T) { if !myList.IsEmpty() { expectedSized -= 1 } myList = myList.Rest() }, "stringify": func(t *rapid.T) { myList.String() }, "": func(t *rapid.T) { assert.Equal(t, myList.Len(), expectedSized, "must be equal") }, }) }) }