- Go 1.27 + Ebitengine v2.10, intern upplösning 320x180 med heltalsskalning - internal/res (resursuppslag), internal/rng (seedad slump), internal/level (banformat, validering, BFS-lösbarhet) med tester; internal/archtest kontrollerar att bara presentationslagret beror på Ebitengine - tools/build: debug -> build/debug/, release -> build/release/<os>-<arch>/ med resources/ bredvid binären; Windows korsbyggs utan C-verktyg - VS Code tasks (build/test/release) och launch (dlv) - Första banan 001-flygplatsen, sv/en-texter, skyltordbok, placeholder-sprite - doc/: spelbeskrivning (renskriven), mål och tester, roadmap med teknikval (M0–M12), plan.md; README med bygg- och beroendeinformation Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
39 lines
921 B
Go
39 lines
921 B
Go
package rng
|
|
|
|
import "testing"
|
|
|
|
func TestDeterministic(t *testing.T) {
|
|
a := FromInt(42).New()
|
|
b := FromInt(42).New()
|
|
for i := 0; i < 1000; i++ {
|
|
if x, y := a.Uint64(), b.Uint64(); x != y {
|
|
t.Fatalf("sekvensen skiljer sig vid %d: %d != %d", i, x, y)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDifferentSeedsDiffer(t *testing.T) {
|
|
if FromInt(1).New().Uint64() == FromInt(2).New().Uint64() {
|
|
t.Fatal("olika seeds gav samma första värde")
|
|
}
|
|
}
|
|
|
|
func TestDeriveIsStableAndContextual(t *testing.T) {
|
|
s := FromInt(7)
|
|
if s.Derive("ticket") != s.Derive("ticket") {
|
|
t.Fatal("Derive är inte deterministisk")
|
|
}
|
|
if s.Derive("ticket") == s.Derive("toilet") {
|
|
t.Fatal("olika kontexter gav samma del-seed")
|
|
}
|
|
if s.Derive("ticket") == FromInt(8).Derive("ticket") {
|
|
t.Fatal("olika rot-seeds gav samma del-seed")
|
|
}
|
|
}
|
|
|
|
func TestNewSeedIsRandom(t *testing.T) {
|
|
if NewSeed() == NewSeed() {
|
|
t.Fatal("två NewSeed() gav samma värde")
|
|
}
|
|
}
|