From 3d1014bf630eb3263a45b388aa1f5be34e29d501 Mon Sep 17 00:00:00 2001 From: Emir Pasic Date: Sun, 26 Jun 2016 22:40:49 +0200 Subject: [PATCH] - test iterator last on all structures with reversible iterators --- lists/arraylist/arraylist_test.go | 15 +++++++++++++++ .../doublylinkedlist/doublylinkedlist_test.go | 15 +++++++++++++++ maps/treemap/treemap_test.go | 16 +++++++++++++++- sets/treeset/treeset_test.go | 14 +++++++++++++- stacks/arraystack/arraystack_test.go | 19 ++++++++++++++++++- .../linkedliststack/linkedliststack_test.go | 2 +- trees/binaryheap/binaryheap_test.go | 19 ++++++++++++++++++- trees/redblacktree/redblacktree_test.go | 16 +++++++++++++++- 8 files changed, 110 insertions(+), 6 deletions(-) diff --git a/lists/arraylist/arraylist_test.go b/lists/arraylist/arraylist_test.go index b4e131b..66b7499 100644 --- a/lists/arraylist/arraylist_test.go +++ b/lists/arraylist/arraylist_test.go @@ -393,6 +393,21 @@ func TestListIteratorReset(t *testing.T) { } } +func TestListIteratorLast(t *testing.T) { + list := New() + it := list.Iterator() + if actualValue, expectedValue := it.Last(), false; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + list.Add("a", "b", "c") + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if index, value := it.Index(), it.Value(); index != 2 || value != "c" { + t.Errorf("Got %v,%v expected %v,%v", index, value, 2, "c") + } +} + func BenchmarkList(b *testing.B) { for i := 0; i < b.N; i++ { list := New() diff --git a/lists/doublylinkedlist/doublylinkedlist_test.go b/lists/doublylinkedlist/doublylinkedlist_test.go index e24f376..4a6b66a 100644 --- a/lists/doublylinkedlist/doublylinkedlist_test.go +++ b/lists/doublylinkedlist/doublylinkedlist_test.go @@ -393,6 +393,21 @@ func TestListIteratorReset(t *testing.T) { } } +func TestListIteratorLast(t *testing.T) { + list := New() + it := list.Iterator() + if actualValue, expectedValue := it.Last(), false; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + list.Add("a", "b", "c") + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if index, value := it.Index(), it.Value(); index != 2 || value != "c" { + t.Errorf("Got %v,%v expected %v,%v", index, value, 2, "c") + } +} + func BenchmarkList(b *testing.B) { for i := 0; i < b.N; i++ { list := New() diff --git a/maps/treemap/treemap_test.go b/maps/treemap/treemap_test.go index 228472c..76f13bf 100644 --- a/maps/treemap/treemap_test.go +++ b/maps/treemap/treemap_test.go @@ -406,7 +406,7 @@ func TestMapIteratorPrev(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestMapIteratorReset(t *testing.T) { m := NewWithIntComparator() it := m.Iterator() it.Reset() @@ -422,6 +422,20 @@ func TestListIteratorReset(t *testing.T) { } } +func TestMapIteratorLast(t *testing.T) { + m := NewWithIntComparator() + m.Put(3, "c") + m.Put(1, "a") + m.Put(2, "b") + it := m.Iterator() + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if key, value := it.Key(), it.Value(); key != 3 || value != "c" { + t.Errorf("Got %v,%v expected %v,%v", key, value, 3, "c") + } +} + func BenchmarkMap(b *testing.B) { for i := 0; i < b.N; i++ { m := NewWithIntComparator() diff --git a/sets/treeset/treeset_test.go b/sets/treeset/treeset_test.go index 990cf3c..b645eb0 100644 --- a/sets/treeset/treeset_test.go +++ b/sets/treeset/treeset_test.go @@ -278,7 +278,7 @@ func TestSetIteratorPrev(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestSetIteratorReset(t *testing.T) { m := NewWithStringComparator() it := m.Iterator() it.Reset() @@ -292,6 +292,18 @@ func TestListIteratorReset(t *testing.T) { } } +func TestSetIteratorLast(t *testing.T) { + set := NewWithStringComparator() + set.Add("a", "b", "c") + it := set.Iterator() + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if index, value := it.Index(), it.Value(); index != 3 || value != "c" { + t.Errorf("Got %v,%v expected %v,%v", index, value, 3, "c") + } +} + func BenchmarkSet(b *testing.B) { for i := 0; i < b.N; i++ { set := NewWithIntComparator() diff --git a/stacks/arraystack/arraystack_test.go b/stacks/arraystack/arraystack_test.go index 89faa43..0fd2118 100644 --- a/stacks/arraystack/arraystack_test.go +++ b/stacks/arraystack/arraystack_test.go @@ -176,7 +176,7 @@ func TestStackIteratorPrev(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestStackIteratorReset(t *testing.T) { stack := New() it := stack.Iterator() it.Reset() @@ -192,6 +192,23 @@ func TestListIteratorReset(t *testing.T) { } } +func TestStackIteratorLast(t *testing.T) { + stack := New() + it := stack.Iterator() + if actualValue, expectedValue := it.Last(), false; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + stack.Push("a") + stack.Push("b") + stack.Push("c") + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if index, value := it.Index(), it.Value(); index != 2 || value != "a" { + t.Errorf("Got %v,%v expected %v,%v", index, value, 2, "a") + } +} + func BenchmarkStack(b *testing.B) { for i := 0; i < b.N; i++ { stack := New() diff --git a/stacks/linkedliststack/linkedliststack_test.go b/stacks/linkedliststack/linkedliststack_test.go index f9f1df0..4283da0 100644 --- a/stacks/linkedliststack/linkedliststack_test.go +++ b/stacks/linkedliststack/linkedliststack_test.go @@ -136,7 +136,7 @@ func TestStackIterator(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestStackIteratorReset(t *testing.T) { stack := New() it := stack.Iterator() it.Reset() diff --git a/trees/binaryheap/binaryheap_test.go b/trees/binaryheap/binaryheap_test.go index aed82c0..3f925f7 100644 --- a/trees/binaryheap/binaryheap_test.go +++ b/trees/binaryheap/binaryheap_test.go @@ -191,7 +191,7 @@ func TestBinaryHeapIteratorPrev(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestBinaryHeapIteratorReset(t *testing.T) { tree := NewWithIntComparator() it := tree.Iterator() it.Reset() @@ -207,6 +207,23 @@ func TestListIteratorReset(t *testing.T) { } } +func TestBinaryHeapIteratorLast(t *testing.T) { + tree := NewWithIntComparator() + it := tree.Iterator() + if actualValue, expectedValue := it.Last(), false; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + tree.Push(2) + tree.Push(3) + tree.Push(1) // [1,3,2](2 swapped with 1, hence last) + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if index, value := it.Index(), it.Value(); index != 2 || value != 2 { + t.Errorf("Got %v,%v expected %v,%v", index, value, 2, 2) + } +} + func BenchmarkBinaryHeap(b *testing.B) { for i := 0; i < b.N; i++ { heap := NewWithIntComparator() diff --git a/trees/redblacktree/redblacktree_test.go b/trees/redblacktree/redblacktree_test.go index 3795859..9c321f1 100644 --- a/trees/redblacktree/redblacktree_test.go +++ b/trees/redblacktree/redblacktree_test.go @@ -496,7 +496,7 @@ func TestRedBlackTreeIterator4(t *testing.T) { } } -func TestListIteratorReset(t *testing.T) { +func TestRedBlackTreeIteratorReset(t *testing.T) { tree := NewWithIntComparator() tree.Put(3, "c") tree.Put(1, "a") @@ -512,6 +512,20 @@ func TestListIteratorReset(t *testing.T) { } } +func TestRedBlackTreeIteratorLast(t *testing.T) { + tree := NewWithIntComparator() + tree.Put(3, "c") + tree.Put(1, "a") + tree.Put(2, "b") + it := tree.Iterator() + if actualValue, expectedValue := it.Last(), true; actualValue != expectedValue { + t.Errorf("Got %v expected %v", actualValue, expectedValue) + } + if key, value := it.Key(), it.Value(); key != 3 || value != "c" { + t.Errorf("Got %v,%v expected %v,%v", key, value, 3, "c") + } +} + func BenchmarkRedBlackTree(b *testing.B) { for i := 0; i < b.N; i++ { tree := NewWithIntComparator()