Files
cheesy-arena-lite/game/control_panel_test.go
2020-04-04 21:54:28 -07:00

157 lines
8.2 KiB
Go

// Copyright 2020 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package game
import (
"github.com/stretchr/testify/assert"
"math/rand"
"testing"
"time"
)
func TestControlPanelGetPositionControlTargetColor(t *testing.T) {
rand.Seed(0)
var controlPanel ControlPanel
controlPanel.CurrentColor = ColorUnknown
results := getPositionTargetColorNTimes(&controlPanel, 10000)
assert.Equal(t, [5]int{0, 2543, 2527, 2510, 2420}, results)
controlPanel.CurrentColor = ColorRed
results = getPositionTargetColorNTimes(&controlPanel, 10000)
assert.Equal(t, [5]int{0, 0, 3351, 3311, 3338}, results)
controlPanel.CurrentColor = ColorBlue
results = getPositionTargetColorNTimes(&controlPanel, 10000)
assert.Equal(t, [5]int{0, 3335, 0, 3320, 3345}, results)
controlPanel.CurrentColor = ColorGreen
results = getPositionTargetColorNTimes(&controlPanel, 10000)
assert.Equal(t, [5]int{0, 3328, 3296, 0, 3376}, results)
controlPanel.CurrentColor = ColorYellow
results = getPositionTargetColorNTimes(&controlPanel, 10000)
assert.Equal(t, [5]int{0, 3303, 3388, 3309, 0}, results)
}
func TestGetGameDataForColor(t *testing.T) {
assert.Equal(t, "", GetGameDataForColor(ColorUnknown))
assert.Equal(t, "R", GetGameDataForColor(ColorRed))
assert.Equal(t, "B", GetGameDataForColor(ColorBlue))
assert.Equal(t, "G", GetGameDataForColor(ColorGreen))
assert.Equal(t, "Y", GetGameDataForColor(ColorYellow))
assert.Equal(t, "", GetGameDataForColor(-100))
}
func TestControlPanelUpdateState(t *testing.T) {
rand.Seed(0)
var controlPanel ControlPanel
controlPanel.ControlPanelStatus = ControlPanelRotation
currentTime := time.Now()
// Check before Stage 2 capacity is reached.
controlPanel.UpdateState(0, false, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(30, false, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(50, false, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
// Check rotation control.
controlPanel.UpdateState(60, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(80, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(37, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(36, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(40, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(35, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(21, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(20, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(44, true, false, currentTime)
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(55, true, false, currentTime.Add(1*time.Millisecond))
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(55, true, false, currentTime.Add(2000*time.Millisecond))
assert.Equal(t, ControlPanelNone, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(55, true, false, currentTime.Add(2001*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(-1000, true, false, currentTime.Add(3000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
// Check position control.
assert.Equal(t, ColorUnknown, controlPanel.positionTargetColor)
controlPanel.UpdateState(1000, true, true, currentTime.Add(5000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
assert.Equal(t, ColorGreen, controlPanel.GetPositionControlTargetColor())
controlPanel.CurrentColor = ColorBlue
controlPanel.UpdateState(1001, true, true, currentTime.Add(6000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.CurrentColor = ColorGreen
controlPanel.UpdateState(1002, true, true, currentTime.Add(7000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(1002, true, true, currentTime.Add(9999*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(1002, true, true, currentTime.Add(10000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.CurrentColor = ColorYellow
controlPanel.UpdateState(1003, true, true, currentTime.Add(11000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(1003, true, true, currentTime.Add(20000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.CurrentColor = ColorGreen
controlPanel.UpdateState(1002, true, true, currentTime.Add(21000*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOn, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(1002, true, true, currentTime.Add(25999*time.Millisecond))
assert.Equal(t, ControlPanelRotation, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightFlashing, controlPanel.ControlPanelLightState)
controlPanel.UpdateState(1002, true, true, currentTime.Add(26000*time.Millisecond))
assert.Equal(t, ControlPanelPosition, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
controlPanel.CurrentColor = ColorRed
controlPanel.UpdateState(0, true, true, currentTime.Add(26001*time.Millisecond))
assert.Equal(t, ControlPanelPosition, controlPanel.ControlPanelStatus)
assert.Equal(t, ControlPanelLightOff, controlPanel.ControlPanelLightState)
}
// Invokes the method N times and returns a map of the counts for each result, for statistical testing.
func getPositionTargetColorNTimes(controlPanel *ControlPanel, n int) [5]int {
var results [5]int
for i := 0; i < n; i++ {
controlPanel.positionTargetColor = ColorUnknown
results[controlPanel.GetPositionControlTargetColor()]++
}
return results
}