Пример #1
0
        public static void TestRecoveryBlockSort()
        {
            String[] testStrings =
            {
                "the quick brown fox jumps over the lazy dog",
                "Hello there. I am going to sort this string, but there are some problems.",
                "#Testing «ταБЬℓσ»: 1<2 & 4+1>3, now 20% off! E-mail @ (me)"
            };
            ObservableCollection <Delegate> sorters = new ObservableCollection <Delegate>();

            //Three different ways of building the delegates
            sorters.Add((Func <String, String>)Sort.MikkelSort);

            SortDelegate madsSort = Sort.MadsSort;

            sorters.Add(madsSort);

            MethodInfo sortMethod = typeof(Sort).GetMethod("MarcSort");
            Delegate   marcSort   = Delegate.CreateDelegate(typeof(SortDelegate), sortMethod);

            sorters.Add(marcSort);

            //Print stuff without recovery blocks
            Console.WriteLine("Unsorted:");
            foreach (string unsortedString in testStrings)
            {
                Console.WriteLine(unsortedString);
            }
            foreach (Delegate sorter in sorters)
            {
                Console.WriteLine(sorter.Method.Name + ":");
                foreach (string unsortedString in testStrings)
                {
                    Console.WriteLine(sorter.DynamicInvoke(unsortedString));
                }
            }

            //Recovery block testing
            RecoveryBlock sortReco = new RecoveryBlock(sorters, null);

            sortReco.acceptanceTest       = (Func <string, string, bool>)String.Equals;
            sortReco.acceptanceParameters = new List <Object>();
            sortReco.useResultForTest     = true;

            char[] charArr = testStrings[0].ToCharArray();
            Array.Sort <char>(charArr);

            sortReco.acceptanceParameters.Add(new String(charArr));

            Console.WriteLine(sortReco.Run <string, string>(testStrings[0]));

            sortReco.acceptanceParameters.Clear();
            sortReco.acceptanceParameters.Add("am are but going Hello I problems. some sort string, there there. this to");
            Console.WriteLine(sortReco.Run <string, string>(testStrings[1]));

            sortReco.acceptanceParameters.Clear();
            sortReco.acceptanceParameters.Add("          !#%&()+,-0112234:<>@ETaeeffgiilmmnnoostw«»αστБЬℓ");
            Console.WriteLine(sortReco.Run <string, string>(testStrings[2]));
        }
Пример #2
0
        public static void TestRecoveryBlockPrime()
        {
            long          maxSearch   = 100;
            PrimeSearcher primeSearch = new PrimeSearcher();

            Console.WriteLine("\n\n\nWithout recovery blocks: ");
            primeSearch.Search(maxSearch);
            primeSearch.PrintResults();
            Console.WriteLine("");

            primeSearch = new PrimeSearcher();
            Func <PrimeSearcher, long, List <long> > algoFail1 = PrimeSearcher.SearchStatic;
            Func <long, List <long> > algoFail2 = primeSearch.SearchFail;
            Func <long, List <long> > algo1     = primeSearch.Search;
            Func <long, List <long> > algo2     = PrimeSearcher.SearchStatic;
            Func <bool> checkPrimes             = primeSearch.CheckPrimes;

            RecoveryBlock reco = new RecoveryBlock(checkPrimes);

            reco.AddAlgorithm(algoFail1);
            reco.AddAlgorithm(algoFail2);
            reco.AddAlgorithm(algo1);
            reco.AddAlgorithm(algo2);
            reco.AddAlgorithm((Func <long, List <long> >)primeSearch.SearchUnoptimized); //Just a different way to add the algorithm.

            List <long> primes2 = reco.Run <List <long>, PrimeSearcher, long>(maxSearch);

            Console.WriteLine("Recovery block run result:\n" + string.Join(",", primes2.ToArray()) + "\n\n");
        }