1+ package com .thealgorithms .greedyalgorithms ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+ import org .junit .jupiter .api .Test ;
5+ import org .junit .jupiter .params .ParameterizedTest ;
6+ import org .junit .jupiter .params .provider .CsvSource ;
7+
8+ class RobotsCollisionTest {
9+
10+ // basic example — two pairs colliding, find the earliest
11+ @ Test
12+ void testBasicCollision () {
13+ int [] positions = {3 , 5 , 8 , 10 };
14+ String directions = "RLRL" ;
15+ assertEquals (1 , RobotsCollision .earliestCollisionTime (4 , positions , directions ));
16+ }
17+
18+ // no collision at all — all moving in same direction
19+ @ Test
20+ void testNoCollision () {
21+ int [] positions = {1 , 3 , 5 , 7 };
22+ String directions = "RRRR" ;
23+ assertEquals (-1 , RobotsCollision .earliestCollisionTime (4 , positions , directions ));
24+ }
25+
26+ // all moving left — no one to crash into
27+ @ Test
28+ void testAllMovingLeft () {
29+ int [] positions = {2 , 5 , 8 };
30+ String directions = "LLL" ;
31+ assertEquals (-1 , RobotsCollision .earliestCollisionTime (3 , positions , directions ));
32+ }
33+
34+ // just two robots heading toward each other
35+ @ Test
36+ void testTwoRobotsCollide () {
37+ int [] positions = {1 , 5 };
38+ String directions = "RL" ;
39+ // gap is 4, time = 4/2 = 2
40+ assertEquals (2 , RobotsCollision .earliestCollisionTime (2 , positions , directions ));
41+ }
42+
43+ // only one robot — can't collide with anyone
44+ @ Test
45+ void testSingleRobot () {
46+ int [] positions = {4 };
47+ String directions = "R" ;
48+ assertEquals (-1 , RobotsCollision .earliestCollisionTime (1 , positions , directions ));
49+ }
50+
51+ // multiple cases in one shot using parameterized test
52+ @ ParameterizedTest
53+ @ CsvSource ({
54+ "2, '1,3', 'RL', 1" , // gap of 2 → time 1
55+ "2, '0,10', 'RL', 5" , // gap of 10 → time 5
56+ "2, '5,5', 'RL', 0" // same spot → already colliding
57+ })
58+ void testVariousCollisionTimes (int n , String posStr , String directions , int expected ) {
59+ // parse the position string into an int array
60+ String [] parts = posStr .split ("," );
61+ int [] positions = new int [parts .length ];
62+ for (int i = 0 ; i < parts .length ; i ++) {
63+ positions [i ] = Integer .parseInt (parts [i ].trim ());
64+ }
65+ assertEquals (expected , RobotsCollision .earliestCollisionTime (n , positions , directions ));
66+ }
67+ }
0 commit comments