diff --git a/jsprit-core/src/main/java/jsprit/core/util/RandomUtils.java b/jsprit-core/src/main/java/jsprit/core/util/RandomUtils.java index 5dfa66d8..4d0b3316 100644 --- a/jsprit-core/src/main/java/jsprit/core/util/RandomUtils.java +++ b/jsprit-core/src/main/java/jsprit/core/util/RandomUtils.java @@ -12,20 +12,18 @@ import java.util.Random; public class RandomUtils { public static VehicleRoute nextRoute(Collection routes, Random random){ - int randomIndex = random.nextInt(routes.size()); - int count = 0; - for(VehicleRoute route : routes){ - if(count <= randomIndex) return route; - count++; - } - return null; + return nextItem(routes,random); } public static Job nextJob(Collection jobs, Random random){ - int randomIndex = random.nextInt(jobs.size()); + return nextItem(jobs,random); + } + + public static T nextItem(Collection items, Random random){ + int randomIndex = random.nextInt(items.size()); int count = 0; - for(Job job : jobs){ - if(count <= randomIndex) return job; + for(T item : items){ + if(count == randomIndex) return item; count++; } return null; diff --git a/jsprit-core/src/test/java/jsprit/core/util/RandomUtilsTest.java b/jsprit-core/src/test/java/jsprit/core/util/RandomUtilsTest.java new file mode 100644 index 00000000..9e7f1eb7 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/util/RandomUtilsTest.java @@ -0,0 +1,44 @@ +package jsprit.core.util; + +import jsprit.core.problem.job.Job; +import junit.framework.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Random; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * Created by schroeder on 14/01/15. + */ +public class RandomUtilsTest { + + @Test + public void shouldReturnSingleJob(){ + Job job = mock(Job.class); + Collection jobs = Arrays.asList(job); + Assert.assertEquals(job, RandomUtils.nextItem(jobs, RandomNumberGeneration.getRandom())); + } + + @Test + public void shouldReturnSingleJob_(){ + Job job = mock(Job.class); + Collection jobs = Arrays.asList(job); + Assert.assertEquals(job, RandomUtils.nextJob(jobs, RandomNumberGeneration.getRandom())); + } + + @Test + public void shouldReturnJob3(){ + Job job3 = mock(Job.class); + List jobs = Arrays.asList(mock(Job.class),mock(Job.class),job3); + Random random = mock(Random.class); + when(random.nextInt(jobs.size())).thenReturn(2); + Assert.assertEquals(job3,RandomUtils.nextJob(jobs,random)); + } + + +}