Advertisement
IvetValcheva

Test #8 - 04. Airlines - Performance

Dec 13th, 2022
628
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.60 KB | None | 0 0
  1. import org.softuni.exam.structures.*;
  2.  
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. import org.softuni.exam.entities.Airline;
  6. import org.softuni.exam.entities.Flight;
  7.  
  8. import java.util.Arrays;
  9. import java.util.List;
  10. import java.util.Set;
  11. import java.util.UUID;
  12. import java.util.stream.Collectors;
  13. import java.util.stream.StreamSupport;
  14.  
  15. import static org.junit.Assert.*;
  16.  
  17. public class AirlinesManagerTests8 {
  18.     private interface InternalTest {
  19.         void execute();
  20.     }
  21.  
  22.     private AirlinesManager airlinesManager;
  23.  
  24.     private Airline getRandomAirline() {
  25.         return new Airline(
  26.                 UUID.randomUUID().toString(),
  27.                 UUID.randomUUID().toString(),
  28.                 Math.min(1, Math.random() * 1_000_000_000));
  29.     }
  30.  
  31.     private Flight getRandomFlight() {
  32.         return new Flight(
  33.                 UUID.randomUUID().toString(),
  34.                 UUID.randomUUID().toString(),
  35.                 UUID.randomUUID().toString(),
  36.                 UUID.randomUUID().toString(),
  37.                 ((Math.random() * 1_000) < 500));
  38.     }
  39.  
  40.     @Before
  41.     public void setup() {
  42.         this.airlinesManager = new AirlinesManagerImpl();
  43.     }
  44.  
  45.     public void performCorrectnessTesting(InternalTest[] methods) {
  46.         Arrays.stream(methods)
  47.                 .forEach(method -> {
  48.                     this.airlinesManager = new AirlinesManagerImpl();
  49.  
  50.                     try {
  51.                         method.execute();
  52.                     } catch (IllegalArgumentException ignored) { }
  53.                 });
  54.  
  55.         this.airlinesManager = new AirlinesManagerImpl();
  56.     }
  57.  
  58.     // Correctness Tests
  59.  
  60.     private void testAddAirline_ShouldSuccessfullyAddAirline() {
  61.         this.airlinesManager.addAirline(getRandomAirline());
  62.         this.airlinesManager.addAirline(getRandomAirline());
  63.         this.airlinesManager.addAirline(getRandomAirline());
  64.  
  65.         assertTrue(true);
  66.     }
  67.  
  68.     private void testAddFlights_ShouldSuccessfullyAddFlight() {
  69.         Airline airline = getRandomAirline();
  70.         this.airlinesManager.addAirline(airline);
  71.         this.airlinesManager.addFlight(airline, getRandomFlight());
  72.         this.airlinesManager.addFlight(airline, getRandomFlight());
  73.         this.airlinesManager.addFlight(airline, getRandomFlight());
  74.  
  75.         assertTrue(true);
  76.     }
  77.  
  78.     private void testContains_WithExistentAirline_ShouldReturnTrue() {
  79.         Airline airline = getRandomAirline();
  80.         this.airlinesManager.addAirline(airline);
  81.  
  82.         assertTrue(this.airlinesManager.contains(airline));
  83.     }
  84.  
  85.     private void testContains_WithNonExistentAirline_ShouldReturnFalse() {
  86.         Airline airline = getRandomAirline();
  87.         this.airlinesManager.addAirline(airline);
  88.  
  89.         assertFalse(this.airlinesManager.contains(getRandomAirline()));
  90.     }
  91.  
  92.     private void testContains_WithExistentFlight_ShouldReturnTrue() {
  93.         Airline airline = getRandomAirline();
  94.         Flight flight = getRandomFlight();
  95.         this.airlinesManager.addAirline(airline);
  96.         this.airlinesManager.addFlight(airline, flight);
  97.  
  98.         assertTrue(this.airlinesManager.contains(flight));
  99.     }
  100.  
  101.     private void testContains_WithNonExistentFlight_ShouldReturnFalse() {
  102.         Airline airline = getRandomAirline();
  103.         Flight flight = getRandomFlight();
  104.         this.airlinesManager.addAirline(airline);
  105.         this.airlinesManager.addFlight(airline, flight);
  106.  
  107.         assertFalse(this.airlinesManager.contains(getRandomFlight()));
  108.     }
  109.  
  110.     private void testDeleteAirline_WithCorrectData_ShouldProduceCorrectResults() {
  111.         Airline airline = getRandomAirline();
  112.         this.airlinesManager.addAirline(airline);
  113.         this.airlinesManager.deleteAirline(airline);
  114.     }
  115.  
  116.     private void testDeleteAirline_WithFlights_ShouldProduceCorrectResults() {
  117.         Airline airline = getRandomAirline();
  118.         Flight flight = getRandomFlight();
  119.         this.airlinesManager.addAirline(airline);
  120.         this.airlinesManager.addFlight(airline, flight);
  121.         this.airlinesManager.deleteAirline(airline);
  122.         assertFalse(this.airlinesManager.contains(flight));
  123.     }
  124.  
  125.     private void testDeleteAirline_WithNoData_ShouldProduceCorrectResults() {
  126.         Airline airline = getRandomAirline();
  127.         this.airlinesManager.addAirline(getRandomAirline());
  128.  
  129.         // Little bit of hacks
  130.         try {
  131.             this.airlinesManager.deleteAirline(airline);
  132.         } catch (IllegalArgumentException e) {
  133.             assertTrue(true);
  134.             return;
  135.         }
  136.  
  137.         assertTrue(false);
  138.     }
  139.  
  140.     private void testAllFlights_WithData_ShouldReturnCorrectResults() {
  141.         Airline airline = getRandomAirline();
  142.  
  143.         Flight flight1 = getRandomFlight();
  144.         Flight flight2 = getRandomFlight();
  145.         Flight flight3 = getRandomFlight();
  146.  
  147.         this.airlinesManager.addAirline(airline);
  148.         this.airlinesManager.addFlight(airline, flight1);
  149.         this.airlinesManager.addFlight(airline, flight2);
  150.         this.airlinesManager.addFlight(airline, flight3);
  151.  
  152.         Set<Flight> set =
  153.                 StreamSupport.stream(this.airlinesManager.getAllFlights().spliterator(), false)
  154.                         .collect(Collectors.toSet());
  155.  
  156.         assertEquals(set.size(), 3);
  157.         assertTrue(set.contains(flight1));
  158.         assertTrue(set.contains(flight2));
  159.         assertTrue(set.contains(flight3));
  160.     }
  161.  
  162.     private void testAllFlights_WithNoData_ShouldReturnCorrectResults() {
  163.         Set<Flight> set =
  164.                 StreamSupport.stream(this.airlinesManager.getAllFlights().spliterator(), false)
  165.                         .collect(Collectors.toSet());
  166.  
  167.         assertEquals(set.size(), 0);
  168.     }
  169.  
  170.     private void testPerformFlight_WithCorrectData_ShouldReturnCorrectResults() {
  171.         Airline airline = getRandomAirline();
  172.  
  173.         Flight flight1 = getRandomFlight();
  174.  
  175.         this.airlinesManager.addAirline(airline);
  176.         this.airlinesManager.addFlight(airline, flight1);
  177.  
  178.         Flight flightPerformed = this.airlinesManager.performFlight(airline, flight1);
  179.  
  180.         assertEquals(flight1.getId(), flightPerformed.getId());
  181.         assertTrue(flight1.isCompleted());
  182.     }
  183.  
  184.     private void testPerformFlight_WithNoAirline_ShouldReturnCorrectResults() {
  185.         Airline airline = getRandomAirline();
  186.  
  187.         Flight flight1 = getRandomFlight();
  188.  
  189.         this.airlinesManager.addAirline(airline);
  190.         this.airlinesManager.addFlight(airline, flight1);
  191.  
  192.         // Little bit of hacks
  193.         try {
  194.             this.airlinesManager.performFlight(getRandomAirline(), flight1);
  195.         } catch (IllegalArgumentException e) {
  196.             assertTrue(true);
  197.             return;
  198.         }
  199.  
  200.         assertTrue(false);
  201.     }
  202.  
  203.     private void testPerformFlight_WithNoAirFlight_ShouldReturnCorrectResults() {
  204.         Airline airline = getRandomAirline();
  205.  
  206.         Flight flight1 = getRandomFlight();
  207.  
  208.         this.airlinesManager.addAirline(airline);
  209.         this.airlinesManager.addFlight(airline, flight1);
  210.  
  211.         // Little bit of hacks
  212.         try {
  213.             this.airlinesManager.performFlight(airline, getRandomFlight());
  214.         } catch (IllegalArgumentException e) {
  215.             assertTrue(true);
  216.             return;
  217.         }
  218.  
  219.         assertTrue(false);
  220.     }
  221.  
  222.     private void testCompletedFlights_WithData_ShouldReturnCorrectResults() {
  223.         Airline airline = getRandomAirline();
  224.         Airline airline2 = getRandomAirline();
  225.  
  226.         Flight flight1 = new Flight("a1", "a", "a", "b", false);
  227.         Flight flight2 = new Flight("a2", "a", "a", "b", false);
  228.         Flight flight3 = new Flight("a3", "a", "a", "b", true);
  229.  
  230.         this.airlinesManager.addAirline(airline);
  231.         this.airlinesManager.addAirline(airline2);
  232.         this.airlinesManager.addFlight(airline, flight1);
  233.         this.airlinesManager.addFlight(airline, flight2);
  234.         this.airlinesManager.addFlight(airline2, flight3);
  235.         this.airlinesManager.performFlight(airline, flight1);
  236.  
  237.         Set<Flight> set =
  238.                 StreamSupport.stream(this.airlinesManager.getCompletedFlights().spliterator(), false)
  239.                         .collect(Collectors.toSet());
  240.  
  241.         assertEquals(set.size(), 2);
  242.         assertTrue(set.contains(flight1));
  243.         assertTrue(set.contains(flight3));
  244.     }
  245.  
  246.     private void testCompletedFlights_WithNoData_ShouldReturnCorrectResults() {
  247.         Set<Flight> set =
  248.                 StreamSupport.stream(this.airlinesManager.getCompletedFlights().spliterator(), false)
  249.                         .collect(Collectors.toSet());
  250.  
  251.         assertEquals(set.size(), 0);
  252.     }
  253.  
  254.     private void testFlightsOrdered_WithData_ShouldReturnCorrectResults() {
  255.         Airline airline = getRandomAirline();
  256.         Airline airline2 = getRandomAirline();
  257.  
  258.         Flight flight1 = new Flight("a1", "d", "a", "b", false);
  259.         Flight flight2 = new Flight("a2", "c", "a", "b", true);
  260.         Flight flight3 = new Flight("a3", "b", "a", "b", true);
  261.         Flight flight4 = new Flight("a4", "a", "a", "b", false);
  262.  
  263.         this.airlinesManager.addAirline(airline);
  264.         this.airlinesManager.addAirline(airline2);
  265.         this.airlinesManager.addFlight(airline, flight1);
  266.         this.airlinesManager.addFlight(airline, flight2);
  267.         this.airlinesManager.addFlight(airline2, flight3);
  268.         this.airlinesManager.addFlight(airline2, flight4);
  269.  
  270.         List<Flight> list =
  271.                 StreamSupport.stream(this.airlinesManager.getFlightsOrderedByNumberThenByCompletion().spliterator(), false)
  272.                         .collect(Collectors.toList());
  273.  
  274.         assertEquals(list.size(), 4);
  275.         assertEquals(flight4, list.get(0));
  276.         assertEquals(flight1, list.get(1));
  277.         assertEquals(flight3, list.get(2));
  278.         assertEquals(flight2, list.get(3));
  279.     }
  280.  
  281.     private void testFlightsOrdered_WithNoData_ShouldReturnCorrectResults() {
  282.         List<Flight> list =
  283.                 StreamSupport.stream(this.airlinesManager.getFlightsOrderedByNumberThenByCompletion().spliterator(), false)
  284.                         .collect(Collectors.toList());
  285.  
  286.         assertEquals(list.size(), 0);
  287.     }
  288.  
  289.     private void testAirlinesOrdered_WithData_ShouldReturnCorrectResults() {
  290.         Airline airline = new Airline("a1", "a2", 4);
  291.         Airline airline2 = new Airline("a2", "a1", 4);
  292.         Airline airline3 = new Airline("a3", "a3", 4);
  293.         Airline airline4 = new Airline("a4", "a4", 10);
  294.         Airline airline5 = new Airline("a5", "a5", 7);
  295.  
  296.         Flight flight1 = new Flight("a1", "d", "a", "b", false);
  297.         Flight flight2 = new Flight("a2", "c", "a", "b", true);
  298.         Flight flight3 = new Flight("a3", "b", "a", "b", true);
  299.         Flight flight4 = new Flight("a4", "a", "a", "b", false);
  300.  
  301.         this.airlinesManager.addAirline(airline);
  302.         this.airlinesManager.addAirline(airline2);
  303.         this.airlinesManager.addAirline(airline3);
  304.         this.airlinesManager.addAirline(airline4);
  305.         this.airlinesManager.addAirline(airline5);
  306.         this.airlinesManager.addFlight(airline, flight1);
  307.         this.airlinesManager.addFlight(airline, flight2);
  308.         this.airlinesManager.addFlight(airline2, flight3);
  309.         this.airlinesManager.addFlight(airline2, flight4);
  310.  
  311.         List<Airline> list =
  312.                 StreamSupport.stream(this.airlinesManager.getAirlinesOrderedByRatingThenByCountOfFlightsThenByName().spliterator(), false)
  313.                         .collect(Collectors.toList());
  314.  
  315.         assertEquals(list.size(), 5);
  316.         assertEquals(airline4, list.get(0));
  317.         assertEquals(airline5, list.get(1));
  318.         assertEquals(airline2, list.get(2));
  319.         assertEquals(airline, list.get(3));
  320.         assertEquals(airline3, list.get(4));
  321.     }
  322.  
  323.     private void testAirlinesOrdered_WithNoData_ShouldReturnCorrectResults() {
  324.         List<Airline> list =
  325.                 StreamSupport.stream(this.airlinesManager.getAirlinesOrderedByRatingThenByCountOfFlightsThenByName().spliterator(), false)
  326.                         .collect(Collectors.toList());
  327.  
  328.         assertEquals(list.size(), 0);
  329.     }
  330.  
  331.     private void testAirlinesFiltered_WithData_ShouldReturnCorrectResults() {
  332.         Airline airline = new Airline("a1", "a2", 4);
  333.         Airline airline2 = new Airline("a2", "a1", 4);
  334.         Airline airline3 = new Airline("a3", "a3", 4);
  335.         Airline airline4 = new Airline("a4", "a4", 10);
  336.         Airline airline5 = new Airline("a5", "a5", 7);
  337.  
  338.         Flight flight1 = new Flight("a1", "d", "a1", "b1", false);
  339.         Flight flight2 = new Flight("a2", "c", "a2", "b2", true);
  340.         Flight flight3 = new Flight("a3", "b", "a3", "b2", true);
  341.         Flight flight4 = new Flight("a4", "a", "a2", "b4", false);
  342.         Flight flight5 = new Flight("a5", "F", "a2", "b2", false);
  343.  
  344.         this.airlinesManager.addAirline(airline);
  345.         this.airlinesManager.addAirline(airline2);
  346.         this.airlinesManager.addAirline(airline3);
  347.         this.airlinesManager.addAirline(airline4);
  348.         this.airlinesManager.addAirline(airline5);
  349.         this.airlinesManager.addFlight(airline, flight1);
  350.         this.airlinesManager.addFlight(airline, flight2);
  351.         this.airlinesManager.addFlight(airline2, flight3);
  352.         this.airlinesManager.addFlight(airline2, flight4);
  353.         this.airlinesManager.addFlight(airline3, flight5);
  354.  
  355.         Set<Airline> set =
  356.                 StreamSupport.stream(this.airlinesManager.getAirlinesWithFlightsFromOriginToDestination("a2", "b2").spliterator(), false)
  357.                         .collect(Collectors.toSet());
  358.  
  359.         assertEquals(set.size(), 1);
  360.         assertTrue(set.contains(airline3));
  361.     }
  362.  
  363.     private void testAirlinesFiltered_WithNoData_ShouldReturnCorrectResults() {
  364.         Airline airline = new Airline("a1", "a2", 4);
  365.         Airline airline2 = new Airline("a2", "a1", 4);
  366.         Airline airline3 = new Airline("a3", "a3", 4);
  367.         Airline airline4 = new Airline("a4", "a4", 10);
  368.         Airline airline5 = new Airline("a5", "a5", 7);
  369.  
  370.         Flight flight1 = new Flight("a1", "d", "a1", "b1", false);
  371.         Flight flight2 = new Flight("a2", "c", "a2", "b2", true);
  372.         Flight flight3 = new Flight("a3", "b", "a3", "b2", true);
  373.         Flight flight4 = new Flight("a4", "a", "a2", "b4", false);
  374.         Flight flight5 = new Flight("a5", "F", "a2", "b2", true);
  375.  
  376.         this.airlinesManager.addAirline(airline);
  377.         this.airlinesManager.addAirline(airline2);
  378.         this.airlinesManager.addAirline(airline3);
  379.         this.airlinesManager.addAirline(airline4);
  380.         this.airlinesManager.addAirline(airline5);
  381.         this.airlinesManager.addFlight(airline, flight1);
  382.         this.airlinesManager.addFlight(airline, flight2);
  383.         this.airlinesManager.addFlight(airline2, flight3);
  384.         this.airlinesManager.addFlight(airline2, flight4);
  385.         this.airlinesManager.addFlight(airline3, flight5);
  386.  
  387.         List<Airline> list =
  388.                 StreamSupport.stream(this.airlinesManager.getAirlinesWithFlightsFromOriginToDestination("a2", "b2").spliterator(), false)
  389.                         .collect(Collectors.toList());
  390.  
  391.         assertEquals(list.size(), 0);
  392.     }
  393.  
  394.     // Performance Tests
  395.  
  396.     @Test
  397.     public void testCompletedFlight_With100000Results_ShouldPassQuickly() {
  398.         this.performCorrectnessTesting(new InternalTest[] {
  399.                 this::testCompletedFlights_WithData_ShouldReturnCorrectResults,
  400.                 this::testCompletedFlights_WithNoData_ShouldReturnCorrectResults
  401.         });
  402.  
  403.         int count = 100000;
  404.  
  405.         Airline airline = getRandomAirline();
  406.         Airline airline2 = getRandomAirline();
  407.         Airline airline3 = getRandomAirline();
  408.         this.airlinesManager.addAirline(airline);
  409.         this.airlinesManager.addAirline(airline2);
  410.         this.airlinesManager.addAirline(airline3);
  411.  
  412.         for (int i = 0; i < count; i++)
  413.         {
  414.             Flight flightToAdd = new Flight(i + "", i + "number", i + "origin", i + "destination", false);
  415.  
  416.             if(i < 10000) {
  417.                 this.airlinesManager.addFlight(airline, flightToAdd);
  418.             } else if(i < count / 2) {
  419.                 flightToAdd.setCompleted(true);
  420.                 this.airlinesManager.addFlight(airline2, flightToAdd);
  421.             } else {
  422.                 flightToAdd.setCompleted(true);
  423.                 this.airlinesManager.addFlight(airline3, flightToAdd);
  424.             }
  425.         }
  426.  
  427.         long start = System.currentTimeMillis();
  428.  
  429.         this.airlinesManager.getCompletedFlights();
  430.  
  431.         long stop = System.currentTimeMillis();
  432.  
  433.         long elapsedTime = stop - start;
  434.  
  435.         assertTrue(elapsedTime <= 5);
  436.     }
  437. }
  438.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement