80 lines
2.7 KiB
Go
80 lines
2.7 KiB
Go
package main
|
||
|
||
import (
|
||
"math/rand"
|
||
"testing"
|
||
)
|
||
|
||
func TestMachineryCheaperInIndustrialSystems(t *testing.T) {
|
||
rng := rand.New(rand.NewSource(1))
|
||
industrial := WayfarerSystem{Industrial: 1, Wealth: 0.5}
|
||
agricultural := WayfarerSystem{Industrial: 0, Wealth: 0.5}
|
||
|
||
machineryIdx := commodityIndexByKey(t, "commodity.machinery")
|
||
industrialPrice := CommodityPrice(machineryIdx, industrial, rng)
|
||
agriculturalPrice := CommodityPrice(machineryIdx, agricultural, rng)
|
||
if industrialPrice >= agriculturalPrice {
|
||
t.Errorf("машины должны быть дешевле в промышленной системе: industrial=%v agricultural=%v",
|
||
industrialPrice, agriculturalPrice)
|
||
}
|
||
}
|
||
|
||
func TestFoodCheaperInAgriculturalSystems(t *testing.T) {
|
||
rng := rand.New(rand.NewSource(1))
|
||
industrial := WayfarerSystem{Industrial: 1, Wealth: 0.5}
|
||
agricultural := WayfarerSystem{Industrial: 0, Wealth: 0.5}
|
||
|
||
foodIdx := commodityIndexByKey(t, "commodity.food")
|
||
industrialPrice := CommodityPrice(foodIdx, industrial, rng)
|
||
agriculturalPrice := CommodityPrice(foodIdx, agricultural, rng)
|
||
if agriculturalPrice >= industrialPrice {
|
||
t.Errorf("еда должна быть дешевле в аграрной системе: agricultural=%v industrial=%v",
|
||
agriculturalPrice, industrialPrice)
|
||
}
|
||
}
|
||
|
||
func TestLuxuriesCheaperInPoorSystems(t *testing.T) {
|
||
rng := rand.New(rand.NewSource(1))
|
||
rich := WayfarerSystem{Industrial: 0.5, Wealth: 1}
|
||
poor := WayfarerSystem{Industrial: 0.5, Wealth: 0}
|
||
|
||
luxuryIdx := commodityIndexByKey(t, "commodity.luxuries")
|
||
richPrice := CommodityPrice(luxuryIdx, rich, rng)
|
||
poorPrice := CommodityPrice(luxuryIdx, poor, rng)
|
||
if poorPrice >= richPrice {
|
||
t.Errorf("предметы роскоши должны быть дешевле в бедной системе при таком знаке WealthBias: poor=%v rich=%v",
|
||
poorPrice, richPrice)
|
||
}
|
||
}
|
||
|
||
func TestSellPriceLowerThanBuyPrice(t *testing.T) {
|
||
buy := 100.0
|
||
sell := SellPrice(buy)
|
||
if sell >= buy {
|
||
t.Errorf("цена продажи должна быть ниже цены покупки, получено sell=%v buy=%v", sell, buy)
|
||
}
|
||
}
|
||
|
||
func TestCommodityPriceNeverNegativeOrZero(t *testing.T) {
|
||
rng := rand.New(rand.NewSource(2))
|
||
extreme := WayfarerSystem{Industrial: 1, Wealth: 1}
|
||
for i := range WayfarerCommodities {
|
||
for trial := 0; trial < 20; trial++ {
|
||
p := CommodityPrice(i, extreme, rng)
|
||
if p <= 0 {
|
||
t.Fatalf("цена товара %d не должна быть <= 0, получено %v", i, p)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func commodityIndexByKey(t *testing.T, key string) int {
|
||
t.Helper()
|
||
for i, c := range WayfarerCommodities {
|
||
if c.Key == key {
|
||
return i
|
||
}
|
||
}
|
||
t.Fatalf("товар с ключом %q не найден", key)
|
||
return -1
|
||
}
|