No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DijkstraAlgorithmTest.java 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package org.insa.graphs.algorithm.shortestpath;
  2. import static org.junit.Assert.*;
  3. import org.insa.graphs.*;//voir si on ne peut pas importer launch autrement
  4. import java.io.BufferedInputStream;
  5. import java.io.DataInputStream;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.IOException;
  9. import java.util.Arrays;
  10. import org.insa.graphs.algorithm.ArcInspector;
  11. import org.insa.graphs.algorithm.ArcInspectorFactory;
  12. import org.insa.graphs.model.*;
  13. import org.insa.graphs.model.RoadInformation.RoadType;
  14. import org.insa.graphs.model.io.BinaryGraphReader;
  15. import org.insa.graphs.model.io.BinaryPathReader;
  16. import org.junit.BeforeClass;
  17. import org.junit.Test;
  18. public class DijkstraAlgorithmTest{
  19. //copié sur PathTest.java
  20. // Small graph use for tests
  21. private static Graph graph;
  22. // List of nodes
  23. private static Node[] nodes;
  24. // List of arcs in the graph, a2b is the arc from node A (0) to B (1).
  25. @SuppressWarnings("unused")
  26. private static Arc ab, ac, ad, bf, bd, cd, cg, df, de, de2, dh, ef, eg, eh, fg, gh;
  27. private static ShortestPathData dataal, datacl, dataat, datact, datapt, onenodata, emptydata, invalidata;
  28. // permet de savoir quels arcs autoriser(cf l.187 excel ggdoc)
  29. private static ArcInspector alllen = ArcInspectorFactory.getAllFilters().get(0);
  30. private static ArcInspector carlen = ArcInspectorFactory.getAllFilters().get(1);
  31. private static ArcInspector alltime = ArcInspectorFactory.getAllFilters().get(2);
  32. private static ArcInspector cartime = ArcInspectorFactory.getAllFilters().get(3);
  33. private static ArcInspector pietime = ArcInspectorFactory.getAllFilters().get(4);
  34. private static DijkstraAlgorithm dijkal, dijkcl, dijkat, dijkct, dijkpt, onenodijk, emptydijk, invalidijk;
  35. private static BellmanFordAlgorithm bfaal, bfacl, bfaat, bfact, bfapt;
  36. @BeforeClass
  37. public static void initAll() throws IOException {
  38. RoadInformation speed10 = new RoadInformation(RoadType.MOTORWAY, null, true, 36, ""),
  39. speed20 = new RoadInformation(RoadType.MOTORWAY, null, true, 72, ""),
  40. pietonable = new RoadInformation(RoadType.PEDESTRIAN, null, true, 5, "");
  41. //cyclable = new RoadInformation(RoadType.CYCLEWAY, null, true, 20, ""),
  42. // Create nodes
  43. nodes = new Node[8];
  44. for (int i = 0; i < nodes.length; ++i) {
  45. nodes[i] = new Node(i, null);
  46. }
  47. // définition des arcs
  48. ab = Node.linkNodes(nodes[0], nodes[1], 10, speed10, null);
  49. ac = Node.linkNodes(nodes[0], nodes[2], 50, speed20, null);
  50. ad = Node.linkNodes(nodes[0], nodes[3], 15, speed10, null);
  51. bd = Node.linkNodes(nodes[1], nodes[3], 15, speed20, null);
  52. bf = Node.linkNodes(nodes[1], nodes[5], 20, speed10, null);
  53. cd = Node.linkNodes(nodes[2], nodes[3], 10, speed20, null);
  54. cg = Node.linkNodes(nodes[2], nodes[6], 15, speed10, null);
  55. de = Node.linkNodes(nodes[3], nodes[4], 15, speed20, null);
  56. de2= Node.linkNodes(nodes[3], nodes[4], 25, pietonable, null);
  57. df = Node.linkNodes(nodes[3], nodes[5], 8, pietonable, null);
  58. dh = Node.linkNodes(nodes[3], nodes[7], 12, pietonable, null);
  59. ef = Node.linkNodes(nodes[4], nodes[5], 10, speed10, null);
  60. eg = Node.linkNodes(nodes[4], nodes[6], 10, speed20, null);
  61. eh = Node.linkNodes(nodes[4], nodes[7], 5, pietonable, null);
  62. fg = Node.linkNodes(nodes[5], nodes[6], 10, pietonable, null);
  63. gh = Node.linkNodes(nodes[6], nodes[7], 12, pietonable, null);
  64. graph = new Graph("ID", "", Arrays.asList(nodes), null);
  65. //initialisation des datas
  66. dataal= new ShortestPathData(graph, nodes[0], nodes[4], alllen);//a->e
  67. datacl= new ShortestPathData(graph, nodes[0], nodes[0], carlen);//b->g
  68. dataat= new ShortestPathData(graph, nodes[0], nodes[0], alltime);//h->b
  69. datact= new ShortestPathData(graph, nodes[0], nodes[0], cartime);//c->b
  70. datapt= new ShortestPathData(graph, nodes[5], nodes[0], pietime);//f->e
  71. onenodata=new ShortestPathData(graph, nodes[2], nodes[2], pietime);
  72. emptydata=new ShortestPathData(graph, null, null, pietime);
  73. invalidata=new ShortestPathData(graph, nodes[0], nodes[7], carlen);//h accessible uniquement aux piétons
  74. //initialisation des Dijkstras
  75. dijkal=new DijkstraAlgorithm(dataal);
  76. dijkcl=new DijkstraAlgorithm(datacl);
  77. dijkat=new DijkstraAlgorithm(dataat);
  78. dijkct=new DijkstraAlgorithm(datact);
  79. dijkpt=new DijkstraAlgorithm(datapt);
  80. onenodijk=new DijkstraAlgorithm(onenodata);
  81. emptydijk=new DijkstraAlgorithm(emptydata);
  82. invalidijk=new DijkstraAlgorithm(invalidata);
  83. //initialisation des Bellman-Ford pour comparaison
  84. bfaal=new BellmanFordAlgorithm(dataal);
  85. bfacl=new BellmanFordAlgorithm(datacl);
  86. bfaat=new BellmanFordAlgorithm(dataat);
  87. bfact=new BellmanFordAlgorithm(datact);
  88. bfapt=new BellmanFordAlgorithm(datapt);
  89. }
  90. //créer plus et avec des maps différentes
  91. //faire des test spécifiques pour longs trajets
  92. /*(Test faits directement via la console et DijkstraAlgorithm.java, actuellement commentés:
  93. -coûts croissants
  94. -nbr successeurs cohérents
  95. -tas valide.)*/
  96. @Test
  97. public void cheminValide() {
  98. assertTrue(dijkal.doRun().getPath().isValid());
  99. assertTrue(dijkcl.doRun().getPath().isValid());
  100. assertTrue(dijkat.doRun().getPath().isValid());
  101. assertTrue(dijkct.doRun().getPath().isValid());
  102. assertTrue(dijkpt.doRun().getPath().isValid());
  103. assertTrue(onenodijk.doRun().getPath().isValid());
  104. assertTrue(emptydijk.doRun().getPath().isValid());//pas sûr
  105. assertFalse(invalidijk.doRun().getPath().isValid());
  106. }
  107. @Test
  108. public void faisable() {
  109. assertTrue(dijkal.doRun().isFeasible());
  110. assertTrue(dijkcl.doRun().isFeasible());
  111. assertTrue(dijkat.doRun().isFeasible());
  112. assertTrue(dijkct.doRun().isFeasible());
  113. assertTrue(dijkpt.doRun().isFeasible());
  114. assertTrue(onenodijk.doRun().isFeasible());
  115. assertFalse(emptydijk.doRun().isFeasible());//pas sûr
  116. assertFalse(invalidijk.doRun().isFeasible());
  117. }
  118. //résultat identique à Bellman-Ford (sur les petits scénarios)
  119. @Test
  120. public void sameasBF() {//peut-être faut-il donner directement par exemple à dijkal dijkal.doRun() pour éviter de la surexécution
  121. //voir alors comment gérer les erreurs (pas encore gérées ici)
  122. assertTrue(Float.compare(dijkal.doRun().getPath().getLength(),bfaal.doRun().getPath().getLength())==0);
  123. assertTrue(Float.compare(dijkcl.doRun().getPath().getLength(),bfacl.doRun().getPath().getLength())==0);
  124. assertTrue(Double.compare(dijkat.doRun().getPath().getMinimumTravelTime(),bfaat.doRun().getPath().getMinimumTravelTime())==0);
  125. assertTrue(Double.compare(dijkct.doRun().getPath().getMinimumTravelTime(),bfact.doRun().getPath().getMinimumTravelTime())==0);
  126. assertTrue(Double.compare(dijkpt.doRun().getPath().getMinimumTravelTime(),bfapt.doRun().getPath().getMinimumTravelTime())==0);
  127. }
  128. //grands scénarios:
  129. public void testmap() throws FileNotFoundException, IOException{//A FAIRE
  130. String mapaddr = "/home/favary/Bureau/commetud/3eme Annee MIC/Graphes-et-Algorithmes/Maps/haute-garonne.mapgr";
  131. String pathaddr ="/home/favary/Bureau/commetud/3eme Annee MIC/Graphes-et-Algorithmes/Paths/path_fr31_insa_aeroport_length.path";
  132. Graph graphmap = (new BinaryGraphReader(new DataInputStream(new BufferedInputStream(new FileInputStream(mapaddr))))).read();
  133. Path pathmap = (new BinaryPathReader(new DataInputStream(new BufferedInputStream(new FileInputStream(pathaddr))))).readPath(graphmap);
  134. //quel inspector prendre? Le path est en longueur mais voitures seulement ou tout autorisé?
  135. DijkstraAlgorithm dijkmap = new DijkstraAlgorithm(new ShortestPathData(graphmap, pathmap.getOrigin(), pathmap.getDestination(), alllen));
  136. assertTrue(dijkmap.doRun().getPath().getLength()==pathmap.getLength());
  137. //comparaison de la longueur
  138. }
  139. }