This commit is contained in:
root
2026-09-20 14:16:41 +02:00
parent 0798933b05
commit b6d1909d7f
56 changed files with 3752 additions and 1989 deletions
+18 -18
View File
@@ -10,7 +10,7 @@ import (
"os"
"strconv"
"wh/fixed"
"halcyon/fixed"
)
const SecondsPerDay = 86400
@@ -85,20 +85,20 @@ func Bind(fs *flag.FlagSet) (*Config, error) {
if err := c.applyEnv(os.Getenv); err != nil {
return nil, err
}
fs.Uint64Var(&c.Seed, "seed", c.Seed, "world seed (env WH_SEED)")
fs.IntVar(&c.TicksPerDay, "ticks-per-day", c.TicksPerDay, "simulation ticks per day (env WH_TICKS_PER_DAY)")
fs.IntVar(&c.CyclesPerTick, "cycles-per-tick", c.CyclesPerTick, "VM cycles per ship per tick (env WH_CYCLES_PER_TICK)")
fs.IntVar(&c.ProgramBytes, "program-bytes", c.ProgramBytes, "max ship program size (env WH_PROGRAM_BYTES)")
fs.IntVar(&c.RAMBytes, "ram-bytes", c.RAMBytes, "ship RAM size (env WH_RAM_BYTES)")
fs.IntVar(&c.CommBytes, "comm-bytes", c.CommBytes, "uplink/downlink buffer size (env WH_COMM_BYTES)")
fs.IntVar(&c.AsteroidCount, "asteroids", c.AsteroidCount, "number of asteroids (env WH_ASTEROIDS)")
fs.Uint64Var(&c.Seed, "seed", c.Seed, "world seed (env HALCYON_SEED)")
fs.IntVar(&c.TicksPerDay, "ticks-per-day", c.TicksPerDay, "simulation ticks per day (env HALCYON_TICKS_PER_DAY)")
fs.IntVar(&c.CyclesPerTick, "cycles-per-tick", c.CyclesPerTick, "VM cycles per ship per tick (env HALCYON_CYCLES_PER_TICK)")
fs.IntVar(&c.ProgramBytes, "program-bytes", c.ProgramBytes, "max ship program size (env HALCYON_PROGRAM_BYTES)")
fs.IntVar(&c.RAMBytes, "ram-bytes", c.RAMBytes, "ship RAM size (env HALCYON_RAM_BYTES)")
fs.IntVar(&c.CommBytes, "comm-bytes", c.CommBytes, "uplink/downlink buffer size (env HALCYON_COMM_BYTES)")
fs.IntVar(&c.AsteroidCount, "asteroids", c.AsteroidCount, "number of asteroids (env HALCYON_ASTEROIDS)")
return &c, nil
}
// EnvVars lists the environment variables that set the world, for documentation.
var EnvVars = []string{
"WH_SEED", "WH_TICKS_PER_DAY", "WH_CYCLES_PER_TICK", "WH_PROGRAM_BYTES",
"WH_RAM_BYTES", "WH_COMM_BYTES", "WH_ASTEROIDS",
"HALCYON_SEED", "HALCYON_TICKS_PER_DAY", "HALCYON_CYCLES_PER_TICK", "HALCYON_PROGRAM_BYTES",
"HALCYON_RAM_BYTES", "HALCYON_COMM_BYTES", "HALCYON_ASTEROIDS",
}
func (c *Config) applyEnv(get func(string) string) error {
@@ -124,13 +124,13 @@ func (c *Config) applyEnv(get func(string) string) error {
err = fmt.Errorf("%s=%q: %w", name, v, err)
}
}
num("WH_SEED", &c.Seed)
num("WH_TICKS_PER_DAY", &c.TicksPerDay)
num("WH_CYCLES_PER_TICK", &c.CyclesPerTick)
num("WH_PROGRAM_BYTES", &c.ProgramBytes)
num("WH_RAM_BYTES", &c.RAMBytes)
num("WH_COMM_BYTES", &c.CommBytes)
num("WH_ASTEROIDS", &c.AsteroidCount)
num("HALCYON_SEED", &c.Seed)
num("HALCYON_TICKS_PER_DAY", &c.TicksPerDay)
num("HALCYON_CYCLES_PER_TICK", &c.CyclesPerTick)
num("HALCYON_PROGRAM_BYTES", &c.ProgramBytes)
num("HALCYON_RAM_BYTES", &c.RAMBytes)
num("HALCYON_COMM_BYTES", &c.CommBytes)
num("HALCYON_ASTEROIDS", &c.AsteroidCount)
return err
}
@@ -141,5 +141,5 @@ func DatabaseURL() string {
if v := os.Getenv("DATABASE_URL"); v != "" {
return v
}
return "sqlite:wh.db"
return "sqlite:halcyon.db"
}
+9 -9
View File
@@ -26,9 +26,9 @@ func TestBindDefaults(t *testing.T) {
}
func TestBindEnvAndFlagPrecedence(t *testing.T) {
t.Setenv("WH_SEED", "42")
t.Setenv("WH_TICKS_PER_DAY", "720")
t.Setenv("WH_ASTEROIDS", "60")
t.Setenv("HALCYON_SEED", "42")
t.Setenv("HALCYON_TICKS_PER_DAY", "720")
t.Setenv("HALCYON_ASTEROIDS", "60")
c, err := bind(t)
if err != nil {
@@ -49,21 +49,21 @@ func TestBindEnvAndFlagPrecedence(t *testing.T) {
func TestBindRejectsBadEnv(t *testing.T) {
for _, v := range []string{"lots", "-3", "1.5"} {
t.Setenv("WH_SEED", v)
t.Setenv("HALCYON_SEED", v)
if _, err := bind(t); err == nil {
t.Errorf("WH_SEED=%q should be rejected", v)
t.Errorf("HALCYON_SEED=%q should be rejected", v)
}
}
t.Setenv("WH_SEED", "")
t.Setenv("WH_COMM_BYTES", "big")
t.Setenv("HALCYON_SEED", "")
t.Setenv("HALCYON_COMM_BYTES", "big")
if _, err := bind(t); err == nil {
t.Error("WH_COMM_BYTES=big should be rejected")
t.Error("HALCYON_COMM_BYTES=big should be rejected")
}
}
func TestDatabaseURL(t *testing.T) {
t.Setenv("DATABASE_URL", "")
if DatabaseURL() != "sqlite:wh.db" {
if DatabaseURL() != "sqlite:halcyon.db" {
t.Fatal("default")
}
t.Setenv("DATABASE_URL", "postgres://x")