You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

145 lines
2.8 KiB

package student_test
import (
"strconv"
"testing"
solution "./solutions"
solutions "./solutions"
student "./student"
"github.com/01-edu/z01"
)
type NodeI14 = student.NodeI
type NodeIS14 = solution.NodeI
func listToStringStu3(n *NodeI14) string {
var res string
it := n
for it != nil {
res += strconv.Itoa(it.Data) + "-> "
it = it.Next
}
res += "<nil>"
return res
}
func nodepushback1(l *NodeI14, data int) *NodeI14 {
n := &NodeI14{Data: data}
if l == nil {
return n
}
iterator := l
for iterator.Next != nil {
iterator = iterator.Next
}
iterator.Next = n
return l
}
func nodepushback2(l *NodeIS14, data int) *NodeIS14 {
n := &NodeIS14{Data: data}
if l == nil {
return n
}
iterator := l
for iterator.Next != nil {
iterator = iterator.Next
}
iterator.Next = n
return l
}
func comparFuncNodeInt14(l *NodeI14, l1 *NodeIS14, t *testing.T, data []int) {
for l != nil || l1 != nil {
if (l == nil && l1 != nil) || (l != nil && l1 == nil) {
t.Fatalf("\ndata used to insert: %d\nstudent list:%s\nlist:%s\n\nSortListInsert() == %v instead of %v\n\n",
data, listToStringStu3(l), solution.PrintList(l1), l, l1)
return
} else if l.Data != l1.Data {
t.Fatalf("\ndata used to insert: %d\nstudent list:%s\nlist:%s\n\nSortListInsert() == %v instead of %v\n\n",
data, listToStringStu3(l), solution.PrintList(l1), l.Data, l1.Data)
return
}
l = l.Next
l1 = l1.Next
}
}
// exercise 16
func TestSortListInsert(t *testing.T) {
var link *NodeI14
var link2 *NodeIS14
type nodeTest struct {
data []int
data_ref []int
}
table := []nodeTest{}
table = append(table,
nodeTest{
data: []int{},
data_ref: []int{},
})
for i := 0; i < 2; i++ {
val := nodeTest{
data: z01.MultRandInt(),
data_ref: z01.MultRandInt(),
}
table = append(table, val)
}
table = append(table,
nodeTest{
data: []int{5, 4, 3, 2, 1},
data_ref: z01.MultRandInt(),
},
)
for _, arg := range table {
for i := 0; i < len(arg.data); i++ {
link2 = nodepushback2(link2, arg.data[i])
link = nodepushback1(link, arg.data[i])
}
link2 = solutions.ListSort(link2)
link = sortStudentsList(link)
for i := 0; i < len(arg.data_ref); i++ {
link2 = solution.SortListInsert(link2, arg.data_ref[i])
link = student.SortListInsert(link, arg.data_ref[i])
}
comparFuncNodeInt14(link, link2, t, arg.data_ref)
link = &NodeI14{}
link2 = &NodeIS14{}
}
}
func sortStudentsList(l *NodeI14) *NodeI14 {
Head := l
if Head == nil {
return nil
}
Head.Next = sortStudentsList(Head.Next)
if Head.Next != nil && Head.Data > Head.Next.Data {
Head = move(Head)
}
return Head
}
func move(l *NodeI14) *NodeI14 {
p := l
n := l.Next
ret := n
for n != nil && l.Data > n.Data {
p = n
n = n.Next
}
p.Next = l
l.Next = n
return ret
}