Skip to content

Commit

Permalink
Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
floatdrop committed Mar 28, 2022
1 parent 9f2c4ba commit 57c78ce
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 1 deletion.
2 changes: 1 addition & 1 deletion 2q.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func (L *TwoQueue[K, V]) Len() int {

// Peek returns value for key (if key was in cache), but does not modify its recency.
func (L *TwoQueue[K, V]) Peek(key K) *V {
if e := L.frequent.Get(key); e != nil {
if e := L.frequent.Peek(key); e != nil {
return e
}

Expand Down
69 changes: 69 additions & 0 deletions 2q_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,72 @@ func Test2Q(t *testing.T) {
// }
// }
}

func Test2Q_Add_RecentEvict(t *testing.T) {
l := NewParams[int, int](4, 4, 4)

// Set 1,2,3,4,5 -> Evict 1
l.Set(1, 1)
l.Set(2, 2)
l.Set(3, 3)
l.Set(4, 4)

if e := l.Peek(2); e == nil || *e != 2 {
t.Fatalf("peek should return 2 from recent: %+v", e)
}

if e := l.Set(5, 5); e == nil || e.Key != 1 {
t.Fatalf("1 should be evicted to ghosted elements: %+v", e)
}

if n := l.recent.Len(); n != 4 {
t.Fatalf("recent should have size of 4: %d", n)
}

if n := l.recentEvict.Len(); n != 1 {
t.Fatalf("one element should be in recentEvict: %d", n)
}

if n := l.frequent.Len(); n != 0 {
t.Fatalf("no elemenets should be in frequent: %d", n)
}

// Pull in the recently evicted
if e := l.Set(1, 1); e != nil {
t.Fatalf("frequent item should go straight to frequent: %+v", e)
}

if l.recent.Len() != 4 || l.frequent.Len() != 1 || l.recentEvict.Len() != 0 {
t.Fatalf("recently evicted should go to frequent")
}

// Local brust to recent should not change frequent
l.Set(3, 3)
l.Set(3, 3)
l.Set(3, 3)
l.Set(3, 3)

if l.recent.Len() != 4 || l.frequent.Len() != 1 || l.recentEvict.Len() != 0 {
t.Fatalf("recently evicted should go to frequent")
}

if l.Len() != 5 {
t.Fatalf("bad length: %v != 5", l.Len())
}

if e := l.Get(1); e == nil || *e != 1 {
t.Fatalf("get should return 1 from frequent: %+v", e)
}

if e := l.Peek(1); e == nil || *e != 1 {
t.Fatalf("peek should return 1 from frequent: %+v", e)
}

if e := l.Remove(3); e == nil {
t.Fatalf("recent item should be removed: %+v", e)
}

if e := l.Remove(1); e == nil {
t.Fatalf("frequent item should be removed: %+v", e)
}
}

0 comments on commit 57c78ce

Please sign in to comment.