rts-sim-module/sys/circuit_sys/psd_test.go

89 lines
3.3 KiB
Go

package circuit_sys
import (
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"math/rand"
"strconv"
"testing"
)
func Test_mkxBtnDriveRelay(t *testing.T) {
for i := 0; i < 100; i++ {
mkx, pmc, psdCircuit := generateTestCase()
t.Run(strconv.Itoa(i), func(t *testing.T) {
mkxBtnDriveRelay(mkx, pmc, psdCircuit)
if component.BitStateType.Get(mkx.PCB).Val && !component.BitStateType.Get(mkx.PCBPL).Val != component.RelayDriveType.Get(pmc.PCBJ).Td {
panic("PCB对应的继电器状态不对")
}
if component.BitStateType.Get(mkx.POB).Val && !component.BitStateType.Get(mkx.POBPL).Val != component.RelayDriveType.Get(pmc.POBJ).Td {
panic("POB对应的继电器状态不对")
}
if component.BitStateType.Get(mkx.PAB).Val && !component.BitStateType.Get(mkx.PABPL).Val != component.RelayDriveType.Get(pmc.PABJ).Td {
panic("PAB对应的继电器状态不对")
}
if component.BitStateType.Get(mkx.WRZF).Val && !component.BitStateType.Get(mkx.WRZFPL).Val != component.RelayDriveType.Get(pmc.WRZFJ).Td {
panic("WRZF对应的继电器状态不对")
}
if component.BitStateType.Get(mkx.QKQR).Val && !component.BitStateType.Get(mkx.QKQRPL).Val != component.RelayDriveType.Get(pmc.QKQRJ).Td {
panic("QKQR对应的继电器状态不对")
}
})
i++
}
}
func generateTestCase() (*component.Mkx, *component.PlatformMkxCircuit, *component.PsdCircuit) {
world := ecs.NewWorld(100)
mkx := &component.Mkx{
PCB: newButtonEntity(world, "PCB", rand.Int()%2 == 0),
PCBPL: newButtonEntity(world, "PCBPL", rand.Int()%2 == 0),
POB: newButtonEntity(world, "POB", rand.Int()%2 == 0),
POBPL: newButtonEntity(world, "POBPL", rand.Int()%2 == 0),
PAB: newButtonEntity(world, "PAB", rand.Int()%2 == 0),
PABPL: newButtonEntity(world, "PABPL", rand.Int()%2 == 0),
WRZF: newButtonEntity(world, "WRZF", rand.Int()%2 == 0),
WRZFPL: newButtonEntity(world, "WRZFPL", rand.Int()%2 == 0),
QKQR: newButtonEntity(world, "QKQR", rand.Int()%2 == 0),
QKQRPL: newButtonEntity(world, "QKQRPL", rand.Int()%2 == 0),
MPL: newButtonEntity(world, "MPL", rand.Int()%2 == 0),
JXTCPL: newButtonEntity(world, "JXTCPL", rand.Int()%2 == 0),
}
rand.Int()
pmc := &component.PlatformMkxCircuit{
MkxList: nil,
PCBJ: newRelayEntry(world, "PCBJ"),
POBJ: newRelayEntry(world, "POBJ"),
PABJ: newRelayEntry(world, "PABJ"),
WRZFJ: newRelayEntry(world, "WRZFJ"),
QKQRJ: newRelayEntry(world, "QKQRJ"),
}
psdCircuit := &component.PsdCircuit{
GMJ: nil,
KMJMap: nil,
MGJ: nil,
MPLJ: newRelayEntry(world, "MPLJ"),
QDTCJ: nil,
TZTCJ: nil,
ZAWJ: nil,
JXTCPLJ: newRelayEntry(world, "JXTCPLJ"),
UnusedJ: nil,
}
return mkx, pmc, psdCircuit
}
func newRelayEntry(w ecs.World, uid string) *ecs.Entry {
entry := w.Entry(w.Create(component.RelayTag, component.UidType, component.RelayDriveType, component.BitStateType))
component.UidType.SetValue(entry, component.Uid{Id: uid})
entry.AddComponent(component.YjRelayTag)
return entry
}
func newButtonEntity(w ecs.World, uid string, val bool) *ecs.Entry {
btnType := component.NoResetPressBtn
entry := w.Entry(w.Create(component.ButtonTag, btnType, component.UidType, component.BitStateType))
component.UidType.SetValue(entry, component.Uid{Id: uid})
component.BitStateType.SetValue(entry, component.BitState{Val: val})
return entry
}