mal-go/list/list_test.go
ajet ec10d85591
All checks were successful
Go / test (push) Successful in 13s
test coverage only by PBT
2025-11-04 15:11:24 -10:00

69 lines
2.0 KiB
Go

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")
},
})
})
}