Index: branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/HeuristicLab.Encodings.PermutationEncoding-3.3.Tests.csproj
===================================================================
--- branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/HeuristicLab.Encodings.PermutationEncoding-3.3.Tests.csproj	(revision 6206)
+++ branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/HeuristicLab.Encodings.PermutationEncoding-3.3.Tests.csproj	(revision 6760)
@@ -112,4 +112,5 @@
     <Compile Include="OrderCrossoverTest.cs" />
     <Compile Include="PartiallyMatchedCrossoverTest.cs" />
+    <Compile Include="PermutationEqualityComparerTest.cs" />
     <Compile Include="PositionBasedCrossoverTest.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -120,4 +121,5 @@
     <Compile Include="TranslocationInversionManipulatorTest.cs" />
     <Compile Include="TranslocationManipulatorTest.cs" />
+    <Compile Include="UniformLikeCrossoverTest.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -129,4 +131,8 @@
       <Name>HeuristicLab.Collections-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
       <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
@@ -144,4 +150,8 @@
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Optimization.Operators\3.3\HeuristicLab.Optimization.Operators-3.3.csproj">
+      <Project>{25087811-F74C-4128-BC86-8324271DA13E}</Project>
+      <Name>HeuristicLab.Optimization.Operators-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
Index: branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/PermutationEqualityComparerTest.cs
===================================================================
--- branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/PermutationEqualityComparerTest.cs	(revision 6760)
+++ branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/PermutationEqualityComparerTest.cs	(revision 6760)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Encodings.PermutationEncoding;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.PermutationEncoding_33.Tests {
+  [TestClass]
+  public class PermutationEqualityComparerTest {
+    [TestMethod]
+    public void TestPermutationEqualityComparer() {
+      PermutationEqualityComparer comparer = new PermutationEqualityComparer();
+      Permutation p = new Permutation(PermutationTypes.RelativeUndirected, new int[] { 3, 2, 0, 1, 4 });
+      Permutation q = new Permutation(PermutationTypes.RelativeUndirected, new int[] { 1, 0, 2, 3, 4 });
+      Assert.IsTrue(comparer.Equals(p, q));
+      Assert.IsTrue(comparer.GetHashCode(p) == comparer.GetHashCode(q));
+      Permutation p2 = new Permutation(PermutationTypes.RelativeDirected, new int[] { 2, 3, 4, 1, 0 });
+      Permutation q2 = new Permutation(PermutationTypes.RelativeDirected, new int[] { 1, 0, 2, 3, 4 });
+      Assert.IsTrue(comparer.Equals(p2, q2));
+      Assert.IsTrue(comparer.GetHashCode(p2) == comparer.GetHashCode(q2));
+
+      Assert.IsFalse(comparer.Equals(p, q2));
+      Assert.IsFalse(comparer.Equals(p2, q));
+
+      Permutation p3 = new Permutation(PermutationTypes.Absolute, new int[] { 2, 3, 0, 4, 1 });
+      Permutation q3 = new Permutation(PermutationTypes.Absolute, new int[] { 2, 3, 0, 4, 1 });
+      Assert.IsTrue(comparer.Equals(p3, q3));
+      Assert.IsTrue(comparer.GetHashCode(p3) == comparer.GetHashCode(q3));
+
+      Assert.IsFalse(comparer.Equals(p3, q));
+      Assert.IsFalse(comparer.Equals(p2, q3));
+
+      Permutation p4 = new Permutation(PermutationTypes.RelativeUndirected, new int[] { 3, 2, 0, 1, 4, 5 });
+      Assert.IsFalse(comparer.Equals(p, p4));
+      Assert.IsFalse(comparer.Equals(p4, q));
+    }
+  }
+}
Index: branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/Properties/AssemblyInfo.cs
===================================================================
--- branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/Properties/AssemblyInfo.cs	(revision 6206)
+++ branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/Properties/AssemblyInfo.cs	(revision 6760)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.0")]
+[assembly: AssemblyFileVersion("3.3.5.0")]
Index: branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/UniformLikeCrossoverTest.cs
===================================================================
--- branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/UniformLikeCrossoverTest.cs	(revision 6760)
+++ branches/PersistenceSpeedUp/HeuristicLab.Encodings.PermutationEncoding/3.3/Tests/UniformLikeCrossoverTest.cs	(revision 6760)
@@ -0,0 +1,103 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.PermutationEncoding_33.Tests {
+
+
+  /// <summary>
+  ///This is a test class for UniformLikeCrossoverTest and is intended
+  ///to contain all UniformLikeCrossoverTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class UniformLikeCrossoverTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void UniformLikeCrossoverApplyTest() {
+      // test from the paper
+      IRandom random = new TestRandom(new int[] { 0 }, new double[] { 0.2, 0.7, 0.2, 0.2 }); // TODO: Initialize to an appropriate value
+      Permutation parent1 = new Permutation(PermutationTypes.Absolute,
+        new int[] { 3, 2, 0, 7, 5, 4, 1, 6 });
+      Assert.IsTrue(parent1.Validate());
+      Permutation parent2 = new Permutation(PermutationTypes.Absolute,
+        new int[] { 5, 0, 4, 7, 1, 3, 2, 6 });
+      Assert.IsTrue(parent2.Validate());
+      Permutation expected = new Permutation(PermutationTypes.Absolute,
+        new int[] { 3, 0, 4, 7, 5, 2, 1, 6 });
+      Assert.IsTrue(expected.Validate());
+      Permutation actual;
+      actual = UniformLikeCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+    }
+
+    /// <summary>
+    ///A test for Cross
+    ///</summary>
+    [TestMethod()]
+    [DeploymentItem("HeuristicLab.Encodings.PermutationEncoding-3.3.dll")]
+    public void UniformLikeCrossoverCrossTest() {
+      UniformLikeCrossover_Accessor target = new UniformLikeCrossover_Accessor();
+      IRandom random = new TestRandom(new int[] { }, new double[] { 0.1, 0.2, 0.3, 0.4 });
+      random.Reset();
+      bool exceptionFired = false;
+      try {
+        target.Cross(random, new ItemArray<Permutation>(new Permutation[] { 
+          new Permutation(PermutationTypes.RelativeUndirected, 4), new Permutation(PermutationTypes.RelativeUndirected, 4), new Permutation(PermutationTypes.RelativeUndirected, 4)}));
+      } catch (System.InvalidOperationException) {
+        exceptionFired = true;
+      }
+      Assert.IsTrue(exceptionFired);
+    }
+  }
+}
