Files
AAA da47189fc3 refactor: unify Go runtime and audited frontend
Squash integration of the reviewed Go core, frontend audit fixes, release tooling, and deployment hygiene. CI passed all Server/Client jobs.
2026-09-06 23:26:01 +08:00

80 lines
2.0 KiB
Go

package ordered
import (
"slices"
"testing"
)
func TestMapKeepsInsertionOrderAndPositionOnSet(t *testing.T) {
var m Map[string, int]
m.Set("a", 1)
m.Set("b", 2)
m.Set("c", 3)
m.Set("a", 10)
if got := m.Keys(); !slices.Equal(got, []string{"a", "b", "c"}) {
t.Fatalf("keys = %v", got)
}
if got := m.Values(); !slices.Equal(got, []int{10, 2, 3}) {
t.Fatalf("values = %v", got)
}
m.MoveToBack("a", 11)
if got := m.Keys(); !slices.Equal(got, []string{"b", "c", "a"}) {
t.Fatalf("keys after MoveToBack = %v", got)
}
if value, ok := m.Get("a"); !ok || value != 11 || m.Len() != 3 {
t.Fatalf("get a = %v %v len %d", value, ok, m.Len())
}
}
func TestMapLiveIterationSkipsDeletedAndVisitsAppended(t *testing.T) {
var m Map[string, int]
for _, key := range []string{"a", "b", "c", "d"} {
m.Set(key, len(key))
}
var visited []string
for key := range m.All() {
visited = append(visited, key)
switch key {
case "a":
m.Delete("c") // deleted before its turn: skipped, like a JS Map
case "b":
m.Set("e", 1) // appended during iteration: visited
}
}
if !slices.Equal(visited, []string{"a", "b", "d", "e"}) {
t.Fatalf("visited = %v", visited)
}
if got := m.Keys(); !slices.Equal(got, []string{"a", "b", "d", "e"}) {
t.Fatalf("keys = %v", got)
}
}
func TestMapCompactionPreservesOrderAndIndex(t *testing.T) {
var m Map[int, int]
for index := 0; index < 100; index++ {
m.Set(index, index)
}
for index := 0; index < 100; index += 2 {
m.Delete(index)
}
if m.Len() != 50 || len(m.entries) > 60 {
t.Fatalf("len %d entries %d", m.Len(), len(m.entries))
}
for index := 1; index < 100; index += 2 {
if value, ok := m.Get(index); !ok || value != index {
t.Fatalf("get %d = %v %v", index, value, ok)
}
}
keys := m.Keys()
if keys[0] != 1 || keys[49] != 99 || !slices.IsSorted(keys) {
t.Fatalf("keys = %v", keys)
}
if m.Delete(1000) {
t.Fatal("deleting an absent key must report false")
}
m.Clear()
if m.Len() != 0 || len(m.Keys()) != 0 {
t.Fatal("clear must empty the map")
}
}