@Test
public void testSelectFair() {

  FeatureOption f = FeatureOption.newBuilder()
      .setKey("false").setValue("false").setWeight(5_000).build();
  FeatureOption t = FeatureOption.newBuilder()
      .setKey("true").setValue("true").setWeight(5_000).build();
  OptionCollection collection = OptionCollection.newBuilder()
      .setOption(OptionType.bool)
      .addItems(t)
      .addItems(f)
      .buildPartial();
  final Feature feature1 = Feature.newBuilder()
      .setOptions(collection).setStatus(Status.on)
      .build();
  OptionSelectorBool oe = new OptionSelectorBool();
  oe.selectBooleanOptions(
      feature1.getOptions(),
      feature1.getStatus(),
      new OptionSelectorWeighted(feature1.getOptions().getItemsList())
  );
  final int[] fCount = {0};
  final int[] tCount = {0};
  final int runs = 10000;
  IntStream.range(0, runs).forEach(
      i -> {
        @SuppressWarnings("unused")
        int noop = oe.selectBooleanOptions(
            feature1.getOptions(),
            feature1.getStatus(),
            new OptionSelectorWeighted(feature1.getOptions().getItemsList())
        ) ? tCount[0]++ : fCount[0]++;
      }
  );
  int tC = tCount[0];
  int fC = fCount[0];
  int nearestNth = runs / 10;
  int nearestRoundUp = nearestNth / 2;
  final int tr = (int) (nearestNth * Math.floor((tC + nearestRoundUp) / nearestNth));
  final int fr = (int) (nearestNth * Math.floor((fC + nearestRoundUp) / nearestNth));
  assertTrue(tr == fr && (tr + fr == runs));
}