telegabber/telegram/muc_test.go
2025-07-23 17:03:19 -04:00

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