public DeterministicTree2(Player startPlayer = Player.Max)
        {
            A.CallTo(() => EndState1.ToString()).Returns(nameof(EndState1));
            A.CallTo(() => EndState2.ToString()).Returns(nameof(EndState2));
            A.CallTo(() => EndState3.ToString()).Returns(nameof(EndState3));
            A.CallTo(() => EndState4.ToString()).Returns(nameof(EndState4));
            A.CallTo(() => RootState.ToString()).Returns(nameof(RootState));
            A.CallTo(() => ChildState1.ToString()).Returns(nameof(ChildState1));
            A.CallTo(() => ChildState2.ToString()).Returns(nameof(ChildState2));

            A.CallTo(() => EndState1.Turn).Returns(startPlayer);
            A.CallTo(() => EndState2.Turn).Returns(startPlayer);
            A.CallTo(() => EndState3.Turn).Returns(startPlayer);
            A.CallTo(() => EndState4.Turn).Returns(startPlayer);
            A.CallTo(() => RootState.Turn).Returns(startPlayer);
            A.CallTo(() => ChildState1.Turn).Returns(startPlayer.GetReversePlayer());
            A.CallTo(() => ChildState2.Turn).Returns(startPlayer.GetReversePlayer());

            RootState.SetNeigbors(ChildState1, ChildState2);
            ChildState1.SetNeigbors(EndState1, EndState2);
            ChildState2.SetNeigbors(EndState3, EndState4);
            EndState1.SetAsEndState();
            EndState2.SetAsEndState();
            EndState3.SetAsEndState();
            EndState4.SetAsEndState();
        }
        public RepeatStateTree(Player startPlayer = Player.Max)
        {
            A.CallTo(() => EndState1.ToString()).Returns(nameof(EndState1));
            A.CallTo(() => EndState2.ToString()).Returns(nameof(EndState2));
            A.CallTo(() => EndState3.ToString()).Returns(nameof(EndState3));
            A.CallTo(() => RootState.ToString()).Returns(nameof(RootState));
            A.CallTo(() => ChildState1.ToString()).Returns(nameof(ChildState1));
            A.CallTo(() => ChildState2.ToString()).Returns(nameof(ChildState2));
            A.CallTo(() => ChildState4.ToString()).Returns(nameof(ChildState4));
            A.CallTo(() => ChildState5.ToString()).Returns(nameof(ChildState5));

            A.CallTo(() => RootState.Turn).Returns(startPlayer);
            A.CallTo(() => ChildState1.Turn).Returns(startPlayer.GetReversePlayer());
            A.CallTo(() => ChildState2.Turn).Returns(startPlayer);
            A.CallTo(() => ChildState4.Turn).Returns(startPlayer.GetReversePlayer());
            A.CallTo(() => ChildState5.Turn).Returns(startPlayer.GetReversePlayer());
            A.CallTo(() => EndState1.Turn).Returns(startPlayer);
            A.CallTo(() => EndState2.Turn).Returns(startPlayer);
            A.CallTo(() => EndState3.Turn).Returns(startPlayer);

            RootState.SetNeigbors(ChildState1, ChildState1);
            ChildState1.SetNeigbor(ChildState2);
            ChildState2.SetNeigbors(ChildState4, ChildState5);
            ChildState4.SetNeigbor(EndState1);
            ChildState5.SetNeigbors(EndState2, EndState3);
            EndState1.SetAsEndState();
            EndState2.SetAsEndState();
            EndState3.SetAsEndState();
        }
        public EndlessTree(Player startPlayer = Player.Max)
        {
            A.CallTo(() => RootState.ToString()).Returns(nameof(RootState));
            A.CallTo(() => ChildState1.ToString()).Returns(nameof(ChildState1));
            A.CallTo(() => ChildState2.ToString()).Returns(nameof(ChildState2));

            A.CallTo(() => RootState.Turn).Returns(startPlayer);
            A.CallTo(() => ChildState1.Turn).Returns(startPlayer.GetReversePlayer());
            A.CallTo(() => ChildState2.Turn).Returns(startPlayer.GetReversePlayer());

            RootState.SetNeigbors(ChildState1, ChildState2);
            ChildState1.SetNeigbor(ChildState1);
            ChildState2.SetNeigbors(ChildState2);
        }