[15017] | 1 | // ReSharper disable AccessToDisposedClosure
|
---|
| 2 | namespace HeuristicLab.Tests.Problem {
|
---|
| 3 | using System;
|
---|
| 4 | using System.Diagnostics;
|
---|
| 5 | using System.Linq;
|
---|
| 6 |
|
---|
| 7 | using HeuristicLab.Core;
|
---|
| 8 | using HeuristicLab.Encodings.IntegerVectorEncoding;
|
---|
| 9 | using HeuristicLab.Problems.ProgramSynthesis.Base.Erc;
|
---|
| 10 | using HeuristicLab.Problems.ProgramSynthesis.Base.Erc.Integer;
|
---|
| 11 | using HeuristicLab.Problems.ProgramSynthesis.Push.Configuration;
|
---|
| 12 | using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
|
---|
[15189] | 13 | using HeuristicLab.Problems.ProgramSynthesis.Push.Individual;
|
---|
[15017] | 14 | using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
|
---|
| 15 | using HeuristicLab.Problems.ProgramSynthesis.Push.Problem;
|
---|
| 16 | using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
|
---|
| 17 | using HeuristicLab.Random;
|
---|
| 18 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
---|
| 19 |
|
---|
| 20 | [TestClass]
|
---|
| 21 | public class IndividualMapperTests {
|
---|
| 22 |
|
---|
| 23 | [TestMethod]
|
---|
| 24 | [TestProperty("Time", "Short")]
|
---|
| 25 | [TestCategory("Individual")]
|
---|
| 26 | public void TestRandomReset() {
|
---|
| 27 | var random = new MersenneTwister(1337);
|
---|
| 28 | var config = new PushConfiguration {
|
---|
| 29 | ErcOptions = new ErcOptions {
|
---|
| 30 | ErcProbability = 0.05,
|
---|
| 31 | IntegerErcOptions = new IntegerErcOptions(
|
---|
| 32 | new IntegerConstantErc(0),
|
---|
| 33 | new IntegerRangeErc(-1000, 100))
|
---|
| 34 | }
|
---|
| 35 | };
|
---|
| 36 |
|
---|
| 37 | var vector = new IntegerVector(10000, random, 0, config.EnabledExpressions.Count);
|
---|
| 38 | var randomPool = new ObjectPool<IRandom>(() => new MersenneTwister());
|
---|
| 39 | var pool = new PushInterpreterPool(config);
|
---|
| 40 |
|
---|
| 41 | var programs = Enumerable.Range(0, Environment.ProcessorCount)
|
---|
| 42 | .AsParallel()
|
---|
| 43 | .Select(i => vector.ToPushProgram(config, randomPool))
|
---|
| 44 | .ToArray();
|
---|
| 45 |
|
---|
| 46 | var referenceProgram = vector.ToPushProgram(config, randomPool);
|
---|
| 47 | Assert.IsTrue(programs.All(p => p.Equals(referenceProgram)));
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | [TestMethod]
|
---|
| 51 | [TestProperty("Time", "Short")]
|
---|
| 52 | [TestCategory("Individual")]
|
---|
| 53 | public void TestPlushToProgram() {
|
---|
| 54 | var random = new MersenneTwister();
|
---|
| 55 | var config = new PushConfiguration {
|
---|
| 56 | ParenthesesCloseBiasLevel = 4
|
---|
| 57 | };
|
---|
| 58 |
|
---|
| 59 | config.DisableStack(StackTypes.Name);
|
---|
| 60 | config.DisableStack(StackTypes.Float);
|
---|
| 61 | config.DisableStack(StackTypes.Code);
|
---|
| 62 | config.DisableStack(StackTypes.Boolean);
|
---|
| 63 | config.DisableStack(StackTypes.IntegerVector);
|
---|
| 64 | config.DisableStack(StackTypes.FloatVector);
|
---|
| 65 | config.DisableStack(StackTypes.StringVector);
|
---|
| 66 | config.DisableStack(StackTypes.BooleanVector);
|
---|
| 67 |
|
---|
| 68 | var sw = new Stopwatch();
|
---|
| 69 | var vector = new IntegerVector(100, random, 0, config.EnabledExpressions.Count);
|
---|
| 70 |
|
---|
| 71 | sw.Start();
|
---|
| 72 | var program = vector.ToPushProgram(config, random);
|
---|
| 73 | sw.Stop();
|
---|
| 74 |
|
---|
| 75 | Console.WriteLine(@"Duration: {0}ms", sw.ElapsedMilliseconds);
|
---|
| 76 | Assert.AreEqual(vector.Length, program.TotalExpressionCount);
|
---|
| 77 | }
|
---|
| 78 | }
|
---|
| 79 | }
|
---|