Advertisement
UniQuet0p1

Untitled

Feb 24th, 2022
688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.46 KB | None | 0 0
  1. package oo.hide;
  2.  
  3. import org.junit.Test;
  4.  
  5. import java.lang.reflect.Field;
  6. import java.util.Arrays;
  7. import java.util.List;
  8.  
  9. import static junit.framework.TestCase.assertTrue;
  10. import static org.junit.Assert.assertFalse;
  11. import static org.hamcrest.MatcherAssert.assertThat;
  12. import static org.hamcrest.Matchers.*;
  13. import static org.junit.Assert.fail;
  14.  
  15. public class PointSetTests {
  16.  
  17.     @Test
  18.     public void pointSetKeepsTrackOfPoints() {
  19.         PointSet set = new PointSet();
  20.  
  21.         set.add(new Point(1, 1));
  22.         set.add(new Point(2, 1));
  23.         set.add(new Point(1, 2));
  24.  
  25.         assertThat(set.size(), is(3));
  26.  
  27.         set.add(new Point(2, 1));
  28.  
  29.         assertThat(set.size(), is(3));
  30.  
  31.         assertTrue(set.contains(new Point(1, 1)));
  32.         assertTrue(set.contains(new Point(1, 2)));
  33.         assertFalse(set.contains(new Point(1, 3)));
  34.  
  35.         assertThat(set.toString(), is("(1, 1), (2, 1), (1, 2)"));
  36.     }
  37.  
  38.     @Test
  39.     public void pointSetSupportsEqualityTesting() {
  40.         assertThat(getSet(), is(getSet()));
  41.  
  42.         assertThat(getSet(new Point(1, 1)), is(not(getSet())));
  43.  
  44.         assertThat(getSet(new Point(1, 1)),
  45.                 is(not(getSet(new Point(1, 2)))));
  46.  
  47.         assertThat(getSet(new Point(1, 1), new Point(1, 2)),
  48.                 is(getSet(new Point(1, 2), new Point(1, 1))));
  49.     }
  50.  
  51.     @Test
  52.     public void pointSetSupportsSubtractingAnotherSet() {
  53.         PointSet a = getSet(new Point(1, 1), new Point(1, 2));
  54.         PointSet b = getSet(new Point(1, 1), new Point(1, 3));
  55.  
  56.         PointSet remainder = a.subtract(b);
  57.  
  58.         assertThat(a, is(getSet(new Point(1, 1), new Point(1, 2))));
  59.  
  60.         assertThat(remainder, is(getSet(new Point(1, 2))));
  61.     }
  62.  
  63.     @Test
  64.     public void pointSetSupportsIntersectionOperation() {
  65.         PointSet a = getSet(new Point(1, 1), new Point(1, 2));
  66.         PointSet b = getSet(new Point(1, 1), new Point(1, 3));
  67.  
  68.         PointSet intersection = a.intersect(b);
  69.  
  70.         assertThat(a, is(getSet(new Point(1, 1), new Point(1, 2))));
  71.  
  72.         assertThat(intersection, is(getSet(new Point(1, 1))));
  73.     }
  74.  
  75.     @Test
  76.     public void setGrowsWhenThereIsNoMoreRoom() {
  77.         PointSet set = new PointSet(2);
  78.  
  79.         set.add(new Point(1, 1));
  80.         set.add(new Point(2, 1));
  81.  
  82.         assertThat(getInternalArray(set).length, is(2));
  83.  
  84.         set.add(new Point(3, 1));
  85.  
  86.         assertThat(getInternalArray(set).length, is(4));
  87.     }
  88.  
  89.     private PointSet getSet(Point... points) {
  90.         PointSet set = new PointSet();
  91.         for (Point point : points) {
  92.             set.add(point);
  93.         }
  94.  
  95.         return set;
  96.     }
  97.  
  98.     @SuppressWarnings("PMD")
  99.     private Point[] getInternalArray(PointSet set) {
  100.  
  101.         Field[] fields = set.getClass().getDeclaredFields();
  102.  
  103.         List<Field> integerArrayFields = Arrays.stream(fields)
  104.                 .filter(field -> field.getType()
  105.                         .equals(Point[].class))
  106.                 .toList();
  107.  
  108.         if (integerArrayFields.isEmpty()) {
  109.             fail("PointSet should have a field of type Point[]");
  110.         }
  111.  
  112.         if (integerArrayFields.size() > 1) {
  113.             fail("PointSet should have just one field of type Point[]");
  114.         }
  115.  
  116.         integerArrayFields.get(0).setAccessible(true);
  117.  
  118.         try {
  119.             return (Point[]) integerArrayFields.get(0).get(set);
  120.         } catch (IllegalAccessException e) {
  121.             throw new RuntimeException(e);
  122.         }
  123.     }
  124.  
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement