content: package rabbitescape.engine.util;
  
  import static org.hamcrest.CoreMatchers.equalTo;
  import static org.hamcrest.MatcherAssert.assertThat;
  
  import java.util.Collections;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Set;
  
  import org.junit.Test;
  
  public class TestMathUtil
  {
      @Test
      public void sum_a_set()
      {
          Set<Integer> set = new HashSet<>();
          set.add( -2 );
          set.add( 8 );
          set.add( 3 );
          assertThat( MathUtil.sum( set ), equalTo( 9 ) );
      }
  
      @Test
      public void sum_empty_list()
      {
          List<Integer> emptyList = Collections.emptyList();
          assertThat( MathUtil.sum( emptyList ), equalTo( 0 ) );
      }
  
      @Test
      public void min_works()
      {
          assertThat( MathUtil.min( 1, 8 ), equalTo( 1 ) );
          assertThat( MathUtil.min( 2, -4 ), equalTo( -4 ) );
          assertThat( MathUtil.min( 5, 5 ), equalTo( 5 ) );
      }
  
      @Test
      public void max_works()
      {
          assertThat( MathUtil.max( 1, 8 ), equalTo( 8 ) );
          assertThat( MathUtil.max( 2, -4 ), equalTo( 2 ) );
          assertThat( MathUtil.max( 5, 5 ), equalTo( 5 ) );
      }
  
      @Test
      public void constrain_works()
      {
          assertThat( MathUtil.constrain( 1, 0, 2 ), equalTo( 1 ) );
          assertThat( MathUtil.constrain( -1, 0, 2 ), equalTo( 0 ) );
          assertThat( MathUtil.constrain( 3, 0, 2 ), equalTo( 2 ) );
      }
  
      /**
       * If {@link MathUtil#constrain} is called with min larger than max the
       * output is undefined. Since this is such a low level utility it seems
       * wrong to validate that the min is not more than the max, so here we
       * confirm the current behaviour. If new behaviour is desired in the future
       * this test can be updated.
       */
      @Test
      public void constrain_with_min_and_max_wrong()
      {
          assertThat( MathUtil.constrain( 3, 4, 2 ), equalTo( 4 ) );
      }
  }
  