source: branches/2817-BinPackingSpeedup/HeuristicLab.Tests/HeuristicLab.Problems.Bin-Packing-3.3/3D/Algorithms/ExtremePointAlgorithmTest.cs @ 15554

Last change on this file since 15554 was 15554, checked in by rhanghof, 2 years ago

#2817:

  • Unittests
  • Bugfixes on the line projection based extreme point creation method
File size: 4.9 KB
Line 
1using System;
2using Microsoft.VisualStudio.TestTools.UnitTesting;
3using HeuristicLab.Problems.BinPacking3D;
4using System.Collections.Generic;
5
6using HeuristicLab.Problems.BinPacking._3D.Utils.Tests;
7using System.Threading;
8using System.Linq;
9
10namespace HeuristicLab.Problems.BinPacking._3D.Algorithms.Tests {
11  [TestClass]
12  public class ExtremePointAlgorithmTest {
13
14    private PackingShape _packingShape1;
15    private PackingShape _packingShape2;
16    private PackingShape _packingShape3;
17    private IList<PackingItem> _items;
18    private ExtremePointAlgorithm _extremPointAlgorithm;
19
20    [TestInitialize]
21    public void Initializes() {
22      _packingShape1 = new PackingShape(19, 19, 19);
23      _packingShape2 = new PackingShape(18, 18, 18);
24      _packingShape3 = new PackingShape(20, 20, 20);
25      _items = new List<PackingItem>();
26
27      _items.Add(new PackingItem(8, 10, 10, _packingShape1, 1000, 1)); // 0,  V = 800,  A =  80, h = 10
28      _items.Add(new PackingItem(10, 8, 10, _packingShape1, 1000, 2)); // 1,  V = 800,  A = 100, h =  8
29      _items.Add(new PackingItem(10, 10, 8, _packingShape1, 1000, 3)); // 2,  V = 800,  A =  80, h = 10
30      _items.Add(new PackingItem(8, 8, 10, _packingShape1, 1000, 4)); // 3,   V = 640,  A =  80, h =  8
31      _items.Add(new PackingItem(10, 8, 8, _packingShape1, 1000, 0)); // 4,   V = 640,  A =  80, h =  8
32      _items.Add(new PackingItem(8, 10, 8, _packingShape1, 1000, 1)); // 5,   V = 640,  A =  64, h = 10 
33      _items.Add(new PackingItem(8, 8, 8, _packingShape1, 1000, 2)); // 6,    V = 512,  A =  64, h =  8
34
35      _items.Add(new PackingItem(10, 10, 10, _packingShape1, 1000, 3)); // 7, V = 1000, A = 100, h = 10
36
37      _items.Add(new PackingItem(9, 10, 10, _packingShape1, 1000, 4)); // 8,  V = 900,  A =  90, h = 10
38      _items.Add(new PackingItem(10, 9, 10, _packingShape1, 1000, 0)); // 9,  V = 900,  A = 100, h =  9
39      _items.Add(new PackingItem(10, 10, 9, _packingShape1, 1000, 1)); // 10, V = 900,  A =  90, h = 10
40      _items.Add(new PackingItem(9, 9, 10, _packingShape1, 1000, 2)); // 11,  V = 810,  A =  90, h =  9
41      _items.Add(new PackingItem(10, 9, 9, _packingShape1, 1000, 3)); // 12,  V = 810,  A =  90, h =  9
42      _items.Add(new PackingItem(9, 10, 9, _packingShape1, 1000, 4)); // 13,  V = 810,  A =  81, h = 10
43      _items.Add(new PackingItem(9, 9, 9, _packingShape1, 1000, 0)); // 14,   V = 729,  A =  81, h =  9
44
45      _extremPointAlgorithm = new ExtremePointAlgorithm();
46    }
47
48
49
50    [TestMethod]
51    [TestCategory("Problems.BinPacking.3D")]
52    [TestProperty("Time", "long")]
53    public void TestExtremePointAlgorithm() {
54       
55      IList<BinPacking3D.PackingPosition> positionsBin0 = new List<BinPacking3D.PackingPosition>() {
56        new BinPacking3D.PackingPosition(0, 0,0,0),
57        new BinPacking3D.PackingPosition(0, 8,0,0),
58        new BinPacking3D.PackingPosition(0, 0,0,10),
59        new BinPacking3D.PackingPosition(0, 10,0,10),
60        new BinPacking3D.PackingPosition(0, 8,8,0),
61        new BinPacking3D.PackingPosition(0, 0,10,0),
62        new BinPacking3D.PackingPosition(0, 0,10,8),
63        new BinPacking3D.PackingPosition(0, 8,10,8),
64      };
65
66      IList<BinPacking3D.PackingPosition> positionsBin1 = new List<BinPacking3D.PackingPosition>() {
67        new BinPacking3D.PackingPosition(1, 0,0,0),
68        new BinPacking3D.PackingPosition(1, 9,0,0),
69        new BinPacking3D.PackingPosition(1, 0,0,10),
70        new BinPacking3D.PackingPosition(1, 10,0,10),
71        new BinPacking3D.PackingPosition(1, 9,9,0),
72        new BinPacking3D.PackingPosition(1, 0,10,0),
73        new BinPacking3D.PackingPosition(1, 0,10,9)
74      };
75
76      object[] parameters = new object[] { _packingShape3, _items, new SortingMethod[] { SortingMethod.Given }, new FittingMethod[] { FittingMethod.FirstFit }, new CancellationToken() };
77      _extremPointAlgorithm.SortingMethodParameter.Value.Value = SortingMethod.Given;
78      _extremPointAlgorithm.FittingMethodParameter.Value.Value = FittingMethod.FirstFit;
79      _extremPointAlgorithm.ExtremePointCreationMethodParameter.Value.Value = ExtremePointCreationMethod.PointProjection;
80      _extremPointAlgorithm.SortByMaterialParameter.Value.Value = false;
81      var result = TestUtils.InvokeMethod(typeof(ExtremePointAlgorithm), _extremPointAlgorithm, "GetBest", parameters) as Tuple<Solution, double, SortingMethod?, FittingMethod?>;
82
83      int i = 0;
84      foreach (var item in result.Item1.Bins[0].Positions.Values) {
85        Assert.AreEqual(positionsBin0[i].X, item.X);
86        Assert.AreEqual(positionsBin0[i].Y, item.Y);
87        Assert.AreEqual(positionsBin0[i].Z, item.Z);
88        i++;
89      }
90
91      i = 0;
92      foreach (var item in result.Item1.Bins[1].Positions.Values) {
93        Assert.AreEqual(positionsBin1[i].X, item.X);
94        Assert.AreEqual(positionsBin1[i].Y, item.Y);
95        Assert.AreEqual(positionsBin1[i].Z, item.Z);
96        i++;
97      }
98    }
99  }
100}
Note: See TracBrowser for help on using the repository browser.