Files

287 lines
7.6 KiB
Go

package annalyn
import "testing"
type charactersState struct {
desc string
knightIsAwake bool
archerIsAwake bool
prisonerIsAwake bool
dogIsPresent bool
expected bool
}
func TestCanFastAttack(t *testing.T) {
tests := []charactersState{
{
desc: "Knight is awake",
knightIsAwake: true,
expected: false,
},
{
desc: "Knight is sleeping",
knightIsAwake: false,
expected: true,
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
if got := CanFastAttack(tc.knightIsAwake); got != tc.expected {
t.Errorf("CanFastAttack(%v) = %v; want %v", tc.knightIsAwake, got, tc.expected)
}
})
}
}
func TestCanSpy(t *testing.T) {
tests := []charactersState{
{
desc: "All characters are sleeping",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: false,
expected: false,
},
{
desc: "Knight is awake, archer and prisoner are sleeping",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: false,
expected: true,
},
{
desc: "Knight and archer are awake, prisoner is sleeping",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: false,
expected: true,
},
{
desc: "Knight and prisoner are awake, archer is sleeping",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: true,
expected: true,
},
{
desc: "Archer is awake, knight and prisoner are sleeping",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: false,
expected: true,
},
{
desc: "Archer and prisoner are awake, knight is sleeping",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: true,
expected: true,
},
{
desc: "Prisoner is awake, knight and archer are sleeping",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: true,
expected: true,
},
{
desc: "All characters are awake",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: true,
expected: true,
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
if got := CanSpy(tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake); got != tc.expected {
t.Errorf("CanSpy(%v, %v, %v) = %v; want %v", tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, got, tc.expected)
}
})
}
}
func TestCanSignalPrisoner(t *testing.T) {
tests := []charactersState{
{
desc: "All characters are sleeping",
archerIsAwake: false,
prisonerIsAwake: false,
expected: false,
},
{
desc: "Archer is sleeping, prisoner is awake",
archerIsAwake: false,
prisonerIsAwake: true,
expected: true,
},
{
desc: "Archer is awake, prisoner is sleeping",
archerIsAwake: true,
prisonerIsAwake: false,
expected: false,
},
{
desc: "All characters are awake",
archerIsAwake: true,
prisonerIsAwake: true,
expected: false,
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
if got := CanSignalPrisoner(tc.archerIsAwake, tc.prisonerIsAwake); got != tc.expected {
t.Errorf("CanSignalPrisoner(%v, %v) = %v; want %v", tc.archerIsAwake, tc.prisonerIsAwake, got, tc.expected)
}
})
}
}
func TestCanFreePrisoner(t *testing.T) {
tests := []charactersState{
{
desc: "All characters are sleeping. Dog is not present.",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: false,
dogIsPresent: false,
expected: false,
},
{
desc: "All characters are sleeping. Dog is present.",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: false,
dogIsPresent: true,
expected: true,
},
{
desc: "Knight and archer are sleeping. Prisoner is awake. Dog is not present.",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: true,
dogIsPresent: false,
expected: true,
},
{
desc: "Knight and archer are sleeping. Prisoner is awake. Dog is present.",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: true,
dogIsPresent: true,
expected: true,
},
{
desc: "Knight is sleeping. Archer is awake. Prisoner is sleeping. Dog is not present.",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: false,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight is sleeping. Archer is awake. Prisoner is sleeping. Dog is present.",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: false,
dogIsPresent: true,
expected: false,
},
{
desc: "Knight is sleeping. Archer is awake. Prisoner is awake. Dog is not present.",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: true,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight is sleeping. Archer is awake. Prisoner is awake. Dog is present.",
knightIsAwake: false,
archerIsAwake: true,
prisonerIsAwake: true,
dogIsPresent: true,
expected: false,
},
{
desc: "Knight is awake. Archer is sleeping. Prisoner is sleeping. Dog is not present.",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: false,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight is awake. Archer is sleeping. Prisoner is sleeping. Dog is present.",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: false,
dogIsPresent: true,
expected: true,
},
{
desc: "Knight is awake. Archer is sleeping. Prisoner is awake. Dog is not present",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: true,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight is awake. Archer is sleeping. Prisoner is awake. Dog is present",
knightIsAwake: true,
archerIsAwake: false,
prisonerIsAwake: true,
dogIsPresent: true,
expected: true,
},
{
desc: "Knight and archer are awake. Prisoner is sleeping. Dog is not present",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: false,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight and archer are awake. Prisoner is sleeping. Dog is present",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: false,
dogIsPresent: true,
expected: false,
},
{
desc: "Knight and archer are awake. Prisoner is awake. Dog is not present",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: true,
dogIsPresent: false,
expected: false,
},
{
desc: "Knight and archer are awake. Prisoner is awake. Dog is present",
knightIsAwake: true,
archerIsAwake: true,
prisonerIsAwake: true,
dogIsPresent: true,
expected: false,
},
{
desc: "Everyone is sleeping. Dog is not present",
knightIsAwake: false,
archerIsAwake: false,
prisonerIsAwake: false,
dogIsPresent: false,
expected: false,
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
if got := CanFreePrisoner(tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, tc.dogIsPresent); got != tc.expected {
t.Errorf("CanFreePrisoner(%v,%v,%v,%v) = %v; want %v", tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, tc.dogIsPresent, got, tc.expected)
}
})
}
}