public void TestOddEvenSort()
 {
     for (int t = 0; t < 10; t++)
     {
         var arr = new int[_random.Next(100, 200)];
         for (int i = 0; i < arr.Length; i++)
         {
             arr[i] = _random.Next();
         }
         var arr1 = new int[arr.Length];
         var arr2 = new int[arr.Length];
         for (int i = 0; i < arr.Length; i++)
         {
             arr1[i] = arr[i];
         }
         for (int i = 0; i < arr.Length; i++)
         {
             arr2[i] = arr[i];
         }
         Array.Sort(arr1);
         lock (CudafyArray.Semaphore)
         {
             CudafyArray.SetArray(arr2);
             CudafyArray.OddEvenSort();
             arr2 = CudafyArray.GetArray();
         }
         Console.WriteLine(string.Join(",", arr1.Select(i => i.ToString(CultureInfo.InvariantCulture))));
         Console.WriteLine(string.Join(",", arr2.Select(i => i.ToString(CultureInfo.InvariantCulture))));
         Assert.IsTrue(arr1.SequenceEqual(arr2));
     }
 }
 public override int GetHashCode()
 {
     if (Settings.EnableCudafy)
     {
         try
         {
             lock (CudafyArray.Semaphore)
             {
                 CudafyArray.SetArray(this.Select(item => item.GetHashCode()).ToArray());
                 CudafyArray.Execute("Hash");
                 return(CudafyArray.GetHash());
             }
         }
         catch (Exception ex)
         {
             Debug.WriteLine(ex.ToString());
             return(this.Aggregate(0,
                                   (current, item) => (current << 1) ^ (current >> (8 * sizeof(int) - 1)) ^ item.GetHashCode()));
         }
     }
     return(this.Aggregate(0,
                           (current, item) => (current << 1) ^ (current >> (8 * sizeof(int) - 1)) ^ item.GetHashCode()));
 }