import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

public class RunsWithConsecutiveTest
{
    @Test
    public void testRLI()
    {
        int[] arr = {
                1, 2, 3,
                5, 5, 5,
                4,
                3, 3, 3, 3, 3,
                4,
                6, 6, 6, 6, 6, 6,
                9, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {1, 2, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {1, 2, 3, 4, 4, 4, 1, 2};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {
                1, 2, 3,
                5, 5, 5, 5,
                4,
                3, 3, 3,
                4,
                5, 5, 5, 5, 5, 5,
                9, 3};
        
        assertFalse(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {5, 5, 5, 5};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {
                1, 2, 3,
                5, 5, 5, 5,
                4,
                3, 3, 3, 3,
                4,
                5, 5, 5, 5, 5, 5,
                9, 3};
        
        assertFalse(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {
                1, 2, 3,
                5,
                4, 3,
                6, 6, 6, 6,
                4,
                9, 9, 9, 9, 9,
                4,
                7, 7, 7, 7, 7, 7,
                9, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {
                1, 2, 3,
                5, 5, 5, 5,
                4,
                5,
                4, 3,
                5, 5, 5, 5, 5,
                4,
                5, 5, 5, 5, 5, 5,
                9, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr) );
        
        
        arr = new int[] {4, 3, 5, 3, 5, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr) );
    }
    
    @Test
    public void testRLIEmpty()
    {
        int[] arr = new int[0];
        
        assertTrue(Runs.runLengthIncreasing(arr));
    }
    
    @Test
    public void testRLIShort()
    {
        int[] arr = new int[] {5, 5};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {4, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr));
    }
    
    @Test
    public void testRLIRunAtEnd()
    {
        int[] arr = new int[] {1, 2, 3, 5, 5};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {1, 5, 5, 2, 3, 5, 5, 5};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {1, 5, 5, 5, 2, 3, 5, 5};
        
        assertFalse(Runs.runLengthIncreasing(arr));
    }
    
    @Test
    public void testRLIRunAtBeginning()
    {
        int[] arr = new int[] {5, 5, 1, 2, 3};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {5, 5, 2, 3, 5, 5, 5, 1};
        
        assertTrue(Runs.runLengthIncreasing(arr));
        
        
        arr = new int[] {5, 5, 5, 2, 3, 5, 5, 1};
        
        assertFalse(Runs.runLengthIncreasing(arr));
    }
}
