TestTaskContext.java 3.41 KB
Newer Older
1
package mvd.jester.simulator.dynamicforkjoin;
2 3 4 5 6 7 8 9 10 11 12

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import mvd.jester.model.Segment;
13
import mvd.jester.model.SynchronousTask;
14 15 16
import mvd.jester.simulator.internals.JobContextInterface;
import mvd.jester.simulator.internals.ProcessorContext;
import mvd.jester.simulator.internals.TaskContextInterface;
17
import mvd.jester.simulator.internals.dynamicforkjoin.TaskContext;
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

/**
 * TestTaskContext
 */
public class TestTaskContext {
    @Test
    @DisplayName("Check if TaskContext accepts its notification correctly.")
    public void testAcceptNotification() {
        for (int run = 0; run < 100; ++run) {
            long numberOfJobs = ThreadLocalRandom.current().nextLong(1, 10);
            long numberOfSegments = ThreadLocalRandom.current().nextLong(3, 10);
            ArrayList<Segment> segments = new ArrayList<>();

            for (int i = 0; i < numberOfSegments; ++i) {
                long numJobs = i % 2 == 0 ? 1 : numberOfJobs;
                segments.add(new Segment(10, numJobs));
            }

36
            SynchronousTask t = new SynchronousTask(new LinkedHashSet<>(segments), 100, 8);
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
            TaskContext tc = new TaskContext(t, 1, 0);

            for (int i = 0; i < segments.size() - 1; ++i) {
                Segment s = segments.get(i);
            }


            Optional<TaskContextInterface> tci = tc.acceptNotification(0);

            assertTrue(tci.isPresent());
            assertTrue(tci.get().equals(tc));
        }
    }

    @Test
    @DisplayName("Check if the next job is returned correctly.")
    public void testGetNextJob() {
        for (int run = 0; run < 100; ++run) {
Michael Schmid committed
55
            long numberOfProcessors = ThreadLocalRandom.current().nextLong(2, 10);
56 57 58 59 60

            Set<Segment> segments = new LinkedHashSet<>();
            segments.add(new Segment(5, 1));
            segments.add(new Segment(10, 10));
            segments.add(new Segment(15, 1));
61
            SynchronousTask t = new SynchronousTask(segments, 100, 8);
62

Michael Schmid committed
63
            TaskContext tc = new TaskContext(t, numberOfProcessors, 0);
64 65 66 67 68 69 70 71

            Optional<JobContextInterface> job = tc.getNextJob();
            assertTrue(job.isPresent());
            job.get().setCurrentProcessor(new ProcessorContext(0));
            assertFalse(tc.getNextJob().isPresent());

            tc.acceptNotification(0);

Michael Schmid committed
72
            for (int i = 0; i < numberOfProcessors - 1; ++i) {
73 74 75 76
                job = tc.getNextJob();
                assertTrue(job.isPresent());
                job.get().setCurrentProcessor(new ProcessorContext(i));
            }
Michael Schmid committed
77

78 79
            job = tc.getNextJob();
            assertTrue(job.isPresent());
Michael Schmid committed
80
            job.get().setCurrentProcessor(new ProcessorContext(10));
81

Michael Schmid committed
82 83 84 85 86
            assertFalse(tc.getNextJob().isPresent());
            job.get().setCurrentProcessor(null);
            assertTrue(tc.getNextJob().isPresent());
            job.get().setCurrentProcessor(new ProcessorContext(10));
            assertFalse(tc.getNextJob().isPresent());
87

Michael Schmid committed
88 89 90
            for (int i = 0; i < 10; ++i) {
                tc.acceptNotification(0);
            }
91 92 93 94 95
            assertTrue(tc.getNextJob().isPresent());
        }
    }

}