Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/AuthoringTests.txt
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/AuthoringTests.txt	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/AuthoringTests.txt	(revision 2836)
@@ -0,0 +1,136 @@
+﻿==========================================================================
+    Visual Studio Team System: Overview of Authoring and Running Tests    
+==========================================================================
+
+This overview describes the features for authoring and running tests in 
+Visual Studio Team System and Visual Studio Team Edition for Software Testers.
+
+Opening Tests
+-------------
+To open a test, open a test project or a test metadata file (a file with
+extension .vsmdi) that contains the definition of the test. You can find
+test projects and metadata files in Solution Explorer.
+
+Viewing Tests
+-------------
+To see which tests are available to you, open the Test View window. Or,
+if you have installed Team Edition for Software Testers, you can also open
+the Test List Editor window to view tests.
+
+To open the Test View window, click the Test menu, point to Windows, and
+then click Test View. To open the Test List Editor window (if you have
+installed Team Edition for Software Testers), click Test, point to Windows,
+and then click Test List Editor.
+
+Running Tests
+-------------
+You can run tests from the Test View window and the Test List Editor window.
+See Viewing Tests to learn how to open these windows. To run one or more
+tests displayed in the Test View window, first select the tests in that
+window; to select multiple tests, hold either the Shift or CTRL key while
+clicking tests. Then click the Run Tests button in the Test View window
+toolbar.
+
+If you have installed Visual Studio Team Edition for Software Testers, you can
+also use the Test List Editor window to run tests. To run tests in Test List Editor,
+select the check box next to each test that you want to run. Then click the
+Run Tests button in the Test List Editor window toolbar.
+
+Viewing Test Results
+--------------------
+When you run a test or a series of tests, the results of the test run will be
+shown in the Test Results window. Each individual test in the run is shown on
+a separate line so that you can see its status. The window contains an
+embedded status bar in the top half of the window that provides you with
+summary details of the complete test run.
+
+To see more detailed results for a particular test result, double-click it in
+the Test Results window. This opens a window that provides more information
+about the particular test result, such as any specific error messages returned
+by the test.
+
+Changing the way that tests are run
+-----------------------------------
+Each time you run one or more tests, a collection of settings is used to
+determine how those tests are run. These settings are contained in a “test
+run configuration” file.
+
+Here is a partial list of the changes you can make with a test run 
+configuration file:
+
+ - Change the naming scheme for each test run.
+ - Change the test controller that the tests are run on so that you can run
+   tests remotely.
+ - Gather code coverage data for the code being tested so that you can see
+   which lines of code are covered by your tests.
+ - Enable and disable test deployment. 
+ - Specify additional files to deploy before tests are run.
+ - Select a different host, ASP.NET, for running ASP.NET unit tests.
+ - Select a different host, the smart device test host, for running smart device unit tests.
+ - Set various properties for the test agents that run your tests.
+ - Run custom scripts at the start and end of each test run so that you can
+   set up the test environment exactly as required each time tests are run.
+ - Set time limits for tests and test runs.
+ - Set the browser mix and the number of times to repeat Web tests in the
+   test run.
+
+By default, a test run configuration file is created whenever you create a
+new test project. You make changes to this file by double-clicking it in 
+Solution Explorer and then changing its settings. (Test run configuration
+files have the extension .testrunconfig.)
+
+A solution can contain multiple test run configuration files. Only one of
+those files, known as the “Active” test run configuration file, is used to
+determine the settings that are currently used for test runs. You select
+the active test run configuration by clicking Select Active Test Run 
+Configuration on the Test menu.
+
+-------------------------------------------------------------------------------
+
+Test Types
+----------
+Using Visual Studio Team Edition for Software Testers, you can create a number
+of different test types:
+
+Unit test: Use a unit test to create a programmatic test in C++, Visual C# or
+Visual Basic that exercises source code. A unit test calls the methods of a
+class, passing suitable parameters, and verifies that the returned value is
+what you expect.
+There are three specialized variants of unit tests:
+ - Data-driven unit tests are created when you configure a unit test to be
+   called repeatedly for each row of a data source. The data from each row
+   is used by the unit test as input data.
+ - ASP.NET unit tests are unit tests that exercise code in an ASP.NET Web
+   application.
+ - Smart device unit tests are unit tests that are deployed to a smart device
+   or emulator and then executed by the smart device test host.  
+
+Web Test: Web tests consist of an ordered series of HTTP requests that you
+record in a browser session using Microsoft Internet Explorer. You can have
+the test report specific details about the pages or sites it requests, such
+as whether a particular page contains a specified string.
+
+Load Test: You use a load test to encapsulate non-manual tests, such as
+unit, Web, and generic tests, and then run them simultaneously by using
+virtual users. Running these tests under load generates test results,
+including performance and other counters, in tables and in graphs.
+
+Generic test: A generic test is an existing program wrapped to function as a
+test in Visual Studio. The following are examples of tests or programs that
+you can turn into generic tests:
+ - An existing test that uses process exit codes to communicate whether the
+   test passed or failed. 0 indicates passing and any other value indicates
+   a failure.
+ - A general program to obtain specific functionality during a test scenario.
+ - A test or program that uses a special XML file (called a “summary results
+   file”), to communicate detailed results.
+
+Manual test: The manual test type is used when the test tasks are to be
+completed by a test engineer as opposed to an automated script.
+
+Ordered test: Use an ordered test to execute a set of tests in an order you
+specify.
+
+-------------------------------------------------------------------------------
+
+
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/Auxiliary.cs
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/Auxiliary.cs	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/Auxiliary.cs	(revision 2836)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Permutation.Tests {
+  public static class Auxiliary {
+    public static bool PermutationIsEqualByPosition(Permutation p1, Permutation p2) {
+      bool equal = (p1.Length == p2.Length);
+      if (equal) {
+        for (int i = 0; i < p1.Length; i++) {
+          if (p1[i] != p2[i]) {
+            equal = false;
+            break;
+          }
+        }
+      }
+      return equal;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj	(revision 2836)
@@ -0,0 +1,101 @@
+﻿<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4D59BEC9-A69E-4686-B8C9-0E6C073B093E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Permutation.Tests</RootNamespace>
+    <AssemblyName>HeuristicLab.Permutation-3.3.Tests</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Auxiliary.cs" />
+    <Compile Include="OrderCrossoverTest.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Random.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="AuthoringTests.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
+      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
+      <Name>HeuristicLab.Common-3.2</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Permutation-3.3.csproj">
+      <Project>{00282156-589D-424F-9CE4-A8038636C926}</Project>
+      <Name>HeuristicLab.Permutation-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Shadow Include="Test References\HeuristicLab.Permutation-3.3.accessor" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/OrderCrossoverTest.cs
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/OrderCrossoverTest.cs	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/OrderCrossoverTest.cs	(revision 2836)
@@ -0,0 +1,222 @@
+﻿using HeuristicLab.Permutation;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation.Tests
+{
+    
+    
+    /// <summary>
+    ///This is a test class for OrderCrossoverTest and is intended
+    ///to contain all OrderCrossoverTest Unit Tests
+    ///</summary>
+  [TestClass()]
+  public class OrderCrossoverTest {
+
+
+    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 Cross
+    ///</summary>
+    [TestMethod()]
+    [DeploymentItem("HeuristicLab.Permutation-3.3.dll")]
+    public void OrderCrossoverCrossTest() {
+      TestRandom random = new TestRandom();
+      Permutation parent1, parent2, expected, actual;
+      ItemArray<Permutation> parents;
+      OrderCrossover_Accessor target = new OrderCrossover_Accessor(new PrivateObject(typeof(OrderCrossover)));
+      // The following test is based on an example from Eiben, A.E. and Smith, J.E. 2003. Introduction to Evolutionary Computation. Natural Computing Series, Springer-Verlag Berlin Heidelberg, pp. 55-56
+      random.Reset();
+      random.IntNumbers = new int[] { 3, 6 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 8, 2, 6, 7, 1, 5, 4, 0, 3 });
+      Assert.IsTrue(parent2.Validate());
+      parents = new ItemArray<Permutation>(new Permutation[] { parent1, parent2 });
+      expected = new Permutation(new int[] { 2, 7, 1, 3, 4, 5, 6, 0, 8 });
+      Assert.IsTrue(expected.Validate());
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is based on an example from Larranaga, P. et al. 1999. Genetic Algorithms for the Travelling Salesman Problem: A Review of Representations and Operators. Artificial Intelligence Review, 13, pp. 129-170.
+      random.Reset();
+      random.IntNumbers = new int[] { 2, 4 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 1, 3, 5, 7, 6, 4, 2, 0 });
+      Assert.IsTrue(parent2.Validate());
+      parents = new ItemArray<Permutation>(new Permutation[] { parent1, parent2 });
+      expected = new Permutation(new int[] { 7, 6, 2, 3, 4, 0, 1, 5 });
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is based on an example from Talbi, E.G. 2009. Metaheuristics - From Design to Implementation. Wiley, p. 218.
+      random.Reset();
+      random.IntNumbers = new int[] { 2, 5 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 7, 3, 0, 4, 8, 2, 5, 1, 6 });
+      Assert.IsTrue(parent2.Validate());
+      parents = new ItemArray<Permutation>(new Permutation[] { parent1, parent2 });
+      expected = new Permutation(new int[] { 0, 8, 2, 3, 4, 5, 1, 6, 7 });
+      Assert.IsTrue(expected.Validate());
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is not based on published examples
+      random.Reset();
+      random.IntNumbers = new int[] { 0, 5 };
+      parent1 = new Permutation(new int[] { 2, 1, 4, 3, 7, 8, 6, 0, 5, 9 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 5, 3, 4, 0, 9, 8, 2, 7, 1, 6 });
+      Assert.IsTrue(parent2.Validate());
+      parents = new ItemArray<Permutation>(new Permutation[] { parent1, parent2 });
+      expected = new Permutation(new int[] { 2, 1, 4, 3, 7, 8, 6, 5, 0, 9 });
+      Assert.IsTrue(expected.Validate());
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // based on the previous with changed breakpoints
+      random.Reset();
+      random.IntNumbers = new int[] { 4, 4 };
+      expected = new Permutation(new int[] { 3, 4, 0, 9, 7, 8, 2, 1, 6, 5 });
+      Assert.IsTrue(expected.Validate());
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // another one based on the previous with changed breakpoints
+      random.Reset();
+      random.IntNumbers = new int[] { 9, 9 };
+      expected = new Permutation(new int[] { 5, 3, 4, 0, 8, 2, 7, 1, 6, 9 });
+      Assert.IsTrue(expected.Validate());
+      actual = target.Cross(random, parents);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+    }
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void OrderCrossoverApplyTest() {
+      TestRandom random = new TestRandom();
+      Permutation parent1, parent2, expected, actual;
+      // The following test is based on an example from Eiben, A.E. and Smith, J.E. 2003. Introduction to Evolutionary Computation. Natural Computing Series, Springer-Verlag Berlin Heidelberg, pp. 55-56
+      random.Reset();
+      random.IntNumbers = new int[] { 3, 6 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 8, 2, 6, 7, 1, 5, 4, 0, 3 });
+      Assert.IsTrue(parent2.Validate());
+      expected = new Permutation(new int[] { 2, 7, 1, 3, 4, 5, 6, 0, 8 });
+      Assert.IsTrue(expected.Validate());
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is based on an example from Larranaga, P. et al. 1999. Genetic Algorithms for the Travelling Salesman Problem: A Review of Representations and Operators. Artificial Intelligence Review, 13, pp. 129-170.
+      random.Reset();
+      random.IntNumbers = new int[] { 2, 4 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 1, 3, 5, 7, 6, 4, 2, 0 });
+      Assert.IsTrue(parent2.Validate());
+      expected = new Permutation(new int[] { 7, 6, 2, 3, 4, 0, 1, 5 });
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is based on an example from Talbi, E.G. 2009. Metaheuristics - From Design to Implementation. Wiley, p. 218.
+      random.Reset();
+      random.IntNumbers = new int[] { 2, 5 };
+      parent1 = new Permutation(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 7, 3, 0, 4, 8, 2, 5, 1, 6 });
+      Assert.IsTrue(parent2.Validate());
+      expected = new Permutation(new int[] { 0, 8, 2, 3, 4, 5, 1, 6, 7 });
+      Assert.IsTrue(expected.Validate());
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // The following test is not based on published examples
+      random.Reset();
+      random.IntNumbers = new int[] { 0, 5 };
+      parent1 = new Permutation(new int[] { 2, 1, 4, 3, 7, 8, 6, 0, 5, 9 });
+      Assert.IsTrue(parent1.Validate());
+      parent2 = new Permutation(new int[] { 5, 3, 4, 0, 9, 8, 2, 7, 1, 6 });
+      Assert.IsTrue(parent2.Validate());
+      expected = new Permutation(new int[] { 2, 1, 4, 3, 7, 8, 6, 5, 0, 9 });
+      Assert.IsTrue(expected.Validate());
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // based on the previous with changed breakpoints
+      random.Reset();
+      random.IntNumbers = new int[] { 4, 4 };
+      expected = new Permutation(new int[] { 3, 4, 0, 9, 7, 8, 2, 1, 6, 5 });
+      Assert.IsTrue(expected.Validate());
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+      // another one based on the previous with changed breakpoints
+      random.Reset();
+      random.IntNumbers = new int[] { 9, 9 };
+      expected = new Permutation(new int[] { 5, 3, 4, 0, 8, 2, 7, 1, 6, 9 });
+      Assert.IsTrue(expected.Validate());
+      actual = OrderCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Validate());
+      Assert.IsTrue(Auxiliary.PermutationIsEqualByPosition(expected, actual));
+    }
+
+    /// <summary>
+    ///A test for OrderCrossover Constructor
+    ///</summary>
+    [TestMethod()]
+    public void OrderCrossoverConstructorTest() {
+      OrderCrossover target = new OrderCrossover();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/Properties/AssemblyInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/Properties/AssemblyInfo.cs	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/Properties/AssemblyInfo.cs	(revision 2836)
@@ -0,0 +1,35 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Permutation-3.3.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.Permutation-3.3.Tests")]
+[assembly: AssemblyCopyright("Copyright © HEAL 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM componenets.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c4934ec5-3305-4b68-beea-514a623afee1")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/Random.cs
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/Random.cs	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/Random.cs	(revision 2836)
@@ -0,0 +1,113 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation.Tests {
+  public class TestRandom : IRandom {
+    #region Variables and Properties
+    private int[] intNumbers;
+    public int[] IntNumbers {
+      get { return intNumbers; }
+      set {
+        if (value == null) intNumbers = new int[0];
+        else intNumbers = value;
+      }
+    }
+    private int nextIntIndex;
+    private double[] doubleNumbers;
+    public double[] DoubleNumbers {
+      get { return doubleNumbers; }
+      set {
+        if (value == null) doubleNumbers = new double[0];
+        else doubleNumbers = value;
+      }
+    }
+    private int nextDoubleIndex;
+    #endregion
+
+    public TestRandom() {
+      intNumbers = new int[0];
+      doubleNumbers = new double[0];
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    public TestRandom(int[] intNumbers, double[] doubleNumbers) {
+      if (intNumbers == null) intNumbers = new int[0];
+      else this.intNumbers = intNumbers;
+      if (doubleNumbers == null) doubleNumbers = new double[0];
+      else this.doubleNumbers = doubleNumbers;
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    #region IRandom Members
+
+    public void Reset() {
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    public void Reset(int seed) {
+      throw new NotImplementedException();
+    }
+
+    public int Next() {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      return intNumbers[nextIntIndex++];
+    }
+
+    public int Next(int maxVal) {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      return intNumbers[nextIntIndex++];
+    }
+
+    public int Next(int minVal, int maxVal) {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      return intNumbers[nextIntIndex++];
+    }
+
+    public double NextDouble() {
+      if (nextDoubleIndex >= doubleNumbers.Length) throw new InvalidOperationException("Random: No more double random numbers available");
+      return doubleNumbers[nextDoubleIndex++];
+    }
+
+    #endregion
+
+    #region IItem Members
+
+    public string ItemName {
+      get { throw new NotImplementedException(); }
+    }
+
+    public string ItemDescription {
+      get { throw new NotImplementedException(); }
+    }
+
+    public System.Drawing.Image ItemImage {
+      get { throw new NotImplementedException(); }
+    }
+
+    public event ChangedEventHandler Changed;
+
+    #endregion
+
+    #region IDeepCloneable Members
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+
+    #region ICloneable Members
+
+    public object Clone() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Permutation/3.3/Tests/Test References/HeuristicLab.Permutation-3.3.accessor
===================================================================
--- trunk/sources/HeuristicLab.Permutation/3.3/Tests/Test References/HeuristicLab.Permutation-3.3.accessor	(revision 2836)
+++ trunk/sources/HeuristicLab.Permutation/3.3/Tests/Test References/HeuristicLab.Permutation-3.3.accessor	(revision 2836)
@@ -0,0 +1,2 @@
+HeuristicLab.Permutation-3.3.dll
+Desktop
