private static boolean testConvexPolygonArch() {
    boolean pass = true;
    int test = 1;
    int cnt;
    ConvexPolygon poly;
    Class cl;
    Class[] temp;

    System.out.println("ConvexPolygon architecture tests...");

    Point a = new Point(7, 7);
    Point b = new Point(0, 9);
    Point c = new Point(-3, -5);
    Point d = new Point(2, -6);
    Point e = new Point(12, 0);
    Point[] vertices = new Point[5];
    vertices[0] = new Point(a);
    vertices[1] = new Point(b);
    vertices[2] = new Point(c);
    vertices[3] = new Point(d);
    vertices[4] = new Point(e);

    poly = new ConvexPolygon(vertices, Color.cyan, false);

    cl = poly.getClass();

    pass &= test(cl.getConstructors().length == 1, test++);
    pass &= test((temp = cl.getInterfaces()).length == 1, test++);
    pass &= test(temp[0].getName().equals("Shape"), test++);
    pass &= test(verifyEqualsMethodSignature(cl), test++);

    cnt = countModifiers(cl.getDeclaredMethods(), Modifier.PUBLIC);
    pass &= test(cnt == 9, test++);

    cnt = cl.getFields().length;
    pass &= test(cnt == 0, test++);

    cnt = countModifiers(cl.getDeclaredFields(), Modifier.PROTECTED);
    pass &= test(cnt == 0, test++);

    cnt = countModifiers(cl.getDeclaredFields(), Modifier.PRIVATE);
    pass &= test(cnt == 3, test++);

    // Count and test number of of PACKAGE fields
    cnt =
        cl.getDeclaredFields().length
            - countModifiers(cl.getDeclaredFields(), Modifier.PRIVATE)
            - countModifiers(cl.getDeclaredFields(), Modifier.PROTECTED)
            - countModifiers(cl.getDeclaredFields(), Modifier.PUBLIC);
    pass &= test(cnt == 0, test++);

    return pass;
  }
  private static boolean testConvexPolygon() {
    boolean pass = true;
    int test = 1;
    ConvexPolygon poly;
    Point a = new Point(7, 7);
    Point b = new Point(0, 9);
    Point c = new Point(-3, -5);
    Point d = new Point(2, -6);
    Point e = new Point(12, 0);
    Point[] vertices = new Point[5];
    vertices[0] = new Point(a);
    vertices[1] = new Point(b);
    vertices[2] = new Point(c);
    vertices[3] = new Point(d);
    vertices[4] = new Point(e);

    System.out.println("ConvexPolygon tests...");

    poly = new ConvexPolygon(deepCopy(vertices), Color.cyan, false);

    pass &= test(approx(poly.getArea(), 137.0, 0.000001), test++);
    pass &= test(poly.getColor().equals(Color.cyan), test++);

    poly.setColor(Color.black);

    pass &= test(poly.getColor().equals(Color.black), test++);
    pass &= test(!poly.getFilled(), test++);

    poly.setFilled(true);

    pass &= test(poly.getFilled(), test++);
    pass &= test(poly.getVertex(0).equals(a), test++);
    pass &= test(poly.getVertex(1).equals(b), test++);
    pass &= test(poly.getVertex(2).equals(c), test++);
    pass &= test(poly.getVertex(3).equals(d), test++);
    pass &= test(poly.getVertex(4).equals(e), test++);

    poly.setVertex(0, new Point(8, 9));

    pass &= test(poly.getVertex(0).equals(new Point(8, 9)), test++);

    poly.setVertex(1, new Point(1, 11));

    pass &= test(poly.getVertex(1).equals(new Point(1, 11)), test++);

    poly.setVertex(2, new Point(-2, -3));

    pass &= test(poly.getVertex(2).equals(new Point(-2, -3)), test++);

    poly.setVertex(3, new Point(3, -4));

    pass &= test(poly.getVertex(3).equals(new Point(3, -4)), test++);

    poly.setVertex(4, new Point(13, 2));

    pass &= test(poly.getVertex(4).equals(new Point(13, 2)), test++);

    poly.move(new Point(-1, -2));

    pass &= test(poly.getVertex(0).equals(new Point(7, 7)), test++);
    pass &= test(poly.getVertex(1).equals(new Point(0, 9)), test++);
    pass &= test(poly.getVertex(2).equals(new Point(-3, -5)), test++);
    pass &= test(poly.getVertex(3).equals(new Point(2, -6)), test++);
    pass &= test(poly.getVertex(4).equals(new Point(12, 0)), test++);

    ConvexPolygon poly2 = new ConvexPolygon(deepCopy(vertices), Color.black, false);

    pass &= test(!poly.equals(poly2), test++);

    poly2.setFilled(true);
    pass &= test(poly.equals(poly2), test++);

    ConvexPolygon poly3 = new ConvexPolygon(deepCopy(vertices), Color.black, false);
    poly3.setFilled(true);
    poly3.setVertex(0, new Point(7, 8));

    pass &= test(!poly2.equals(poly3), test++);

    poly3 = new ConvexPolygon(deepCopy(vertices), Color.black, false);
    poly3.setVertex(1, new Point(1, 9));

    pass &= test(!poly2.equals(poly3), test++);

    poly3 = new ConvexPolygon(deepCopy(vertices), Color.black, false);
    poly3.setVertex(4, new Point(13, 1));

    pass &= test(!poly2.equals(poly3), test++);

    poly3 = new ConvexPolygon(deepCopy(vertices), Color.red, false);

    pass &= test(!poly2.equals(poly3), test++);
    pass &= test(!poly2.equals(null), test++);
    pass &= test(!poly2.equals(new String("Whatever")), test++);

    return pass;
  }