public void testIntegerParameterBound() {
    try {
      count = new int[dimension][4]; // 4 vaules {0, 1, 2, 3}
      IntegerParameter parameter = new IntegerParameter(new Integer[] {1, 0, 3});
      parameter.setLower(0);
      parameter.setUpper(3);

      State state = new State();
      state.initByName("stateNode", parameter);
      state.initialise();

      UniformOperator uniformOperator = new UniformOperator();
      uniformOperator.initByName("parameter", parameter, "howMany", 3, "weight", 1.0);

      for (int i = 0; i < 400; i++) {
        uniformOperator.proposal();
        Integer[] values = parameter.getValues();
        for (int k = 0; k < values.length; k++) {
          int j = (int) (double) values[k];
          count[k][j] += 1;
        }
      }

      System.out.println("Integer distributions lower = 0, upper = 3");
      for (int j = 0; j < count.length; j++) {
        System.out.println("x[" + j + "] = " + Arrays.toString(count[j]));
      }

      assertTrue(
          "Expected count[0][0-3] > 0",
          count[0][0] > 0 && count[0][1] > 0 && count[0][2] > 0 && count[0][3] > 0);
      assertTrue(
          "Expected count[1][0-3] > 0",
          count[1][0] > 0 && count[1][1] > 0 && count[1][2] > 0 && count[1][3] > 0);
      assertTrue(
          "Expected count[2][0-3] > 0",
          count[2][0] > 0 && count[2][1] > 0 && count[2][2] > 0 && count[2][3] > 0);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }