mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
419 lines
9.8 KiB
Go
419 lines
9.8 KiB
Go
package telegram
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// -x->[]-x-> +(.)
|
|
func TestSetMUCOccupantsLRUSetInitiallyEmpty(t *testing.T) {
|
|
// init
|
|
occupants := NewMUCOccupantsLRU()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(1, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != newOccupant || newOccupant.prev != nil || newOccupant.next != nil || occupants.newest != newOccupant {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
func testMUCOccupantsLRUChainOfOne() (occupants *MUCOccupantsLRU, occupant1 *MUCOccupant) {
|
|
occupants = NewMUCOccupantsLRU()
|
|
occupant1 = &MUCOccupant{}
|
|
occupants.m[1] = occupant1
|
|
occupants.oldest = occupant1
|
|
occupants.newest = occupant1
|
|
|
|
return
|
|
}
|
|
|
|
func testMUCOccupantsLRUChainOfThree() (occupants *MUCOccupantsLRU, occupant1, occupant2, occupant3 *MUCOccupant) {
|
|
occupants = NewMUCOccupantsLRU()
|
|
occupant1 = &MUCOccupant{}
|
|
occupant2 = &MUCOccupant{}
|
|
occupant3 = &MUCOccupant{}
|
|
occupants.m[1] = occupant1
|
|
occupants.m[2] = occupant2
|
|
occupants.m[3] = occupant3
|
|
occupants.oldest = occupant1
|
|
occupants.newest = occupant3
|
|
occupant1.next = occupant2
|
|
occupant2.prev = occupant1
|
|
occupant2.next = occupant3
|
|
occupant3.prev = occupant2
|
|
|
|
return
|
|
}
|
|
|
|
// ->[]->()-> +(.)
|
|
func TestSetMUCOccupantsLRUSetOneOther(t *testing.T) {
|
|
// init
|
|
occupants, occupant1 := testMUCOccupantsLRUChainOfOne()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(2, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 || occupant1.prev != nil || occupant1.next != newOccupant || newOccupant.prev != occupant1 || newOccupant.next != nil || occupants.newest != newOccupant {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->()->()-> +(.)
|
|
func TestSetMUCOccupantsLRUSetThreeOthers(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(4, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant2 ||
|
|
occupant2.prev != occupant1 ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != newOccupant ||
|
|
newOccupant.prev != occupant3 ||
|
|
newOccupant.next != nil ||
|
|
occupants.newest != newOccupant {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)->()->()-> +(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceFirst(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(1, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant2 ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != newOccupant ||
|
|
newOccupant.prev != occupant3 ||
|
|
newOccupant.next != nil ||
|
|
occupants.newest != newOccupant ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->(.)->()-> +(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceMiddle(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(2, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant3 ||
|
|
occupant3.prev != occupant1 ||
|
|
occupant3.next != newOccupant ||
|
|
newOccupant.prev != occupant3 ||
|
|
newOccupant.next != nil ||
|
|
occupants.newest != newOccupant ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->()->(.)-> +(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceLast(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(3, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant2 ||
|
|
occupant2.prev != occupant1 ||
|
|
occupant2.next != newOccupant ||
|
|
newOccupant.prev != occupant2 ||
|
|
newOccupant.next != nil ||
|
|
occupants.newest != newOccupant ||
|
|
occupant3.prev != nil ||
|
|
occupant3.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)-> +(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceOnly(t *testing.T) {
|
|
// init
|
|
occupants, occupant1 := testMUCOccupantsLRUChainOfOne()
|
|
|
|
// addition
|
|
newOccupant := &MUCOccupant{}
|
|
occupants.Set(1, newOccupant)
|
|
|
|
// checks
|
|
if occupants.oldest != newOccupant ||
|
|
occupants.newest != newOccupant ||
|
|
newOccupant.prev != nil ||
|
|
newOccupant.next != nil ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)->()->()-> +s(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceFirstWithSame(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
occupants.Set(1, occupant1)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant2 ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != occupant1 ||
|
|
occupant1.prev != occupant3 ||
|
|
occupant1.next != nil ||
|
|
occupants.newest != occupant1 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->(.)->()-> +s(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceMiddleWithSame(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
occupants.Set(2, occupant2)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant3 ||
|
|
occupant3.prev != occupant1 ||
|
|
occupant3.next != occupant2 ||
|
|
occupant2.prev != occupant3 ||
|
|
occupant2.next != nil ||
|
|
occupants.newest != occupant2 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->()->(.)-> +s(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceLastWithSame(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// addition
|
|
occupants.Set(3, occupant3)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant2 ||
|
|
occupant2.prev != occupant1 ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != nil ||
|
|
occupants.newest != occupant3 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)-> +(.)
|
|
func TestSetMUCOccupantsLRUSetReplaceOnlyWithSame(t *testing.T) {
|
|
// init
|
|
occupants, occupant1 := testMUCOccupantsLRUChainOfOne()
|
|
|
|
// addition
|
|
occupants.Set(1, occupant1)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupants.newest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(X)->
|
|
func TestSetMUCOccupantsLRUDeleteOnly(t *testing.T) {
|
|
// init
|
|
occupants, occupant1 := testMUCOccupantsLRUChainOfOne()
|
|
|
|
// deletion
|
|
occupants.Delete(1)
|
|
|
|
// checks
|
|
if occupants.oldest != nil ||
|
|
occupants.newest != nil ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(X)->()->()->
|
|
func TestSetMUCOccupantsLRUDeleteFirst(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// deletion
|
|
occupants.Delete(1)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant2 ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != nil ||
|
|
occupants.newest != occupant3 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->(X)->()->
|
|
func TestSetMUCOccupantsLRUDeleteMiddle(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// deletion
|
|
occupants.Delete(2)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant3 ||
|
|
occupant3.prev != occupant1 ||
|
|
occupant3.next != nil ||
|
|
occupants.newest != occupant3 ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->()->(X)->
|
|
func TestSetMUCOccupantsLRUDeleteLast(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// deletion
|
|
occupants.Delete(3)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant2 ||
|
|
occupant2.prev != occupant1 ||
|
|
occupant2.next != nil ||
|
|
occupants.newest != occupant2 ||
|
|
occupant3.prev != nil ||
|
|
occupant3.next != nil {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)->
|
|
func TestSetMUCOccupantsLRUBumpOnly(t *testing.T) {
|
|
// init
|
|
occupants, occupant1 := testMUCOccupantsLRUChainOfOne()
|
|
|
|
// bump
|
|
occupants.Bump(occupant1)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != nil ||
|
|
occupants.newest != occupant1 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->(.)->()->()->
|
|
func TestSetMUCOccupantsLRUBumpFirst(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// bump
|
|
occupants.Bump(occupant1)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant2 ||
|
|
occupant2.prev != nil ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != occupant1 ||
|
|
occupant1.prev != occupant3 ||
|
|
occupant1.next != nil ||
|
|
occupants.newest != occupant1 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->(.)->()->
|
|
func TestSetMUCOccupantsLRUBumpMiddle(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// bump
|
|
occupants.Bump(occupant2)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant3 ||
|
|
occupant3.prev != occupant1 ||
|
|
occupant3.next != occupant2 ||
|
|
occupant2.prev != occupant3 ||
|
|
occupant2.next != nil ||
|
|
occupants.newest != occupant2 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|
|
|
|
// ->[]->()->()->(.)->
|
|
func TestSetMUCOccupantsLRUBumpLast(t *testing.T) {
|
|
// init
|
|
occupants, occupant1, occupant2, occupant3 := testMUCOccupantsLRUChainOfThree()
|
|
|
|
// bump
|
|
occupants.Bump(occupant3)
|
|
|
|
// checks
|
|
if occupants.oldest != occupant1 ||
|
|
occupant1.prev != nil ||
|
|
occupant1.next != occupant2 ||
|
|
occupant2.prev != occupant1 ||
|
|
occupant2.next != occupant3 ||
|
|
occupant3.prev != occupant2 ||
|
|
occupant3.next != nil ||
|
|
occupants.newest != occupant3 {
|
|
t.Error("Broken")
|
|
}
|
|
}
|