import static org.junit.jupiter.api.Assertions.*;

import java.util.Arrays;

import org.junit.jupiter.api.Test;

public class OneTest
{
    @Test
    public void testFindFreeBlockAgainstExamples()
    {
        AppointmentBook book = new AppointmentBook();
        
        book.reserveBlock(2, 0, 10);
        book.reserveBlock(2, 15, 15);
        book.reserveBlock(2, 45, 5);
        
        assertEquals(30, book.findFreeBlock(2, 15));
        assertEquals(30, book.findFreeBlock(2, 9));
        assertEquals(-1, book.findFreeBlock(2, 20));
    }
    
    @Test
    public void testMakeAppointmentAgainstExamples()
    {
        AppointmentBook book = new AppointmentBook();
        
        book.reserveBlock(2, 0, 25);
        book.reserveBlock(2, 30, 30);
        book.reserveBlock(3, 15, 26);
        book.reserveBlock(4, 0, 5);
        book.reserveBlock(4, 30, 14);
        
        AppointmentBook expectedBook = new AppointmentBook();
        
        expectedBook.reserveBlock(2, 0, 25);
        expectedBook.reserveBlock(2, 30, 30);
        expectedBook.reserveBlock(3, 15, 26);
        expectedBook.reserveBlock(4, 0, 5);
        expectedBook.reserveBlock(4, 30, 14);
        
        expectedBook.reserveBlock(4, 5, 22);
        
        assertTrue(book.makeAppointment(2, 4, 22));
        assertTrue(Arrays.deepEquals(expectedBook.freeMinutes, book.freeMinutes));
        
        expectedBook.reserveBlock(3, 0, 3);
        
        assertTrue(book.makeAppointment(3, 4, 3));
        assertTrue(Arrays.deepEquals(expectedBook.freeMinutes, book.freeMinutes));
        
        assertTrue( ! book.makeAppointment(2, 4, 30) );
        assertTrue(Arrays.deepEquals(expectedBook.freeMinutes, book.freeMinutes));
    }
}
