private static void Test(Action<CubeConfiguration<FaceColour>> assert)
        {
            TestRunner.RunTestMultipleTimes(TestRunner.MultipleTimesToRun, async () =>
            {
                var rotations = ConfigurationGenerator.GenerateRandomRotations(100).ToList();
                var initialConfiguration = CubeConfiguration<FaceColour>.CreateStandardCubeConfiguration(5);
                CommonActions.ApplyRotations(rotations, initialConfiguration);
                var solver = new SimpleSolver();

                var solution = await solver.Solve(initialConfiguration).ConfigureAwait(true);

                var configurationToTest = CubeConfiguration<FaceColour>.CreateStandardCubeConfiguration(5);
                CommonActions.ApplyRotations(rotations, initialConfiguration);
                CommonActions.ApplyRotations(solution, configurationToTest);

                assert.Invoke(configurationToTest);
            });
        }
        public async Task StartAnimation()
        {
            var configurationGenerator = new RandomCubeConfigurationGenerator();
            ISolver solver3x3x3 = new BeginerMethod();
            ISolver solver5x5x5 = new SimpleSolver();

            var celebrator = new TimeDelayCelebrator(2000);

            // TODO: LOAD ALL SOLVERS + GENERATORS, GENERATE A CONFIG WITH RANDOM SIZE, PICK A SOLVER BASED ON THE CONFIGURATION GIVEN

            
            var random = new Random();

            while (true)
            {
                var cubeSize = GetCubeSize(random);

                ISolver solver = cubeSize == 3 ? solver3x3x3 : solver5x5x5;

                var run = new SolveRun(configurationGenerator, solver, DisplayControl, celebrator, cubeSize);
                await run.Run().ConfigureAwait(true);
            }
            // ReSharper disable once FunctionNeverReturns
        }