@Test(dataProvider = "flags")
 public void setXAndGetConfigurationBehaveAsExpeced(List<Boolean> flags) {
   // builder with no template
   XId linkConfigId = XId.newId();
   Builder builder = LinkConfiguration.builder(linkConfigId);
   for (Fragment fragment : Fragment.values()) {
     setConfigParameter(flags, builder, fragment);
   }
   LinkConfiguration linkConfig = builder.newInstance();
   assertThat(
       "", //
       linkConfig.getId(),
       isEqualTo(linkConfigId));
   for (Fragment fragment : Fragment.values()) {
     testConfigsParameter(flags, linkConfig, fragment, LinkConfiguration.DEFAULT_CONFIGURATION);
   }
   // builder with template
   linkConfigId = XId.newId();
   builder = LinkConfiguration.builder(linkConfigId).setTemplate(TEMPLATE);
   for (Fragment fragment : Fragment.values()) {
     setConfigParameter(flags, builder, fragment);
   }
   linkConfig = builder.newInstance();
   assertThat(
       "", //
       linkConfig.getId(),
       isEqualTo(linkConfigId));
   for (Fragment fragment : Fragment.values()) {
     testConfigsParameter(flags, linkConfig, fragment, TEMPLATE);
   }
 }
 public void constructorSucceeds() {
   assertThat(
       "", //
       LinkConfiguration.builder(),
       isNotNull());
   assertThat(
       "", //
       LinkConfiguration.builder(XId.newId()),
       isNotNull());
 }
 static {
   List<Boolean> addFlags = new ArrayList<Boolean>();
   for (int i = 0; i < Fragment.values().length; i++) {
     addFlags.add(RandomUtil.nextBoolean());
   }
   List<List<Boolean>> testFlags = new ArrayList<List<Boolean>>();
   for (int i = 0; i < Fragment.values().length; i++) {
     Collections.rotate(addFlags, 1);
     testFlags.add(new ArrayList<Boolean>(addFlags));
   }
   FLAGS = TestUtils.createData(testFlags.toArray());
   List<Range<?>> ranges = new ArrayList<Range<?>>();
   for (Fragment fragment : Fragment.values()) {
     switch (fragment) {
       case IS_INHIBITORY:
         ranges.add(Range.getInstance(false, true));
         ranges.add(Range.getInstance(false, true));
         break;
       default:
         ranges.add(Range.getInstance(RandomUtils.nextFloat()));
         ranges.add(Range.getInstance(RandomUtils.nextFloat()));
         break;
     }
   }
   RANGES = ranges.toArray(new Range<?>[0]);
   TEMPLATE =
       LinkConfiguration //
           .builder() //
           .setCapacity(Range.<Float>openRange(), null) //
           .setCapacityAttack(Range.<Float>openRange(), null) //
           .setCapacityDecay(Range.<Float>openRange(), null) //
           .setStrength(Range.<Float>openRange(), null) //
           .setStrengthAttack(Range.<Float>openRange(), null) //
           .setStrengthDecay(Range.<Float>openRange(), null) //
           .setInhibitoryFlag(Range.<Boolean>openRange(), null) //
           .newInstance();
 }
 private void testConfigsParameter(
     List<Boolean> flags,
     LinkConfiguration linkConfig,
     Fragment fragment,
     LinkConfiguration template) {
   if (!Fragment.OUTPUT_ENERGY.equals(fragment)) {
     int index = fragment.ordinal();
     if (flags.get(index)) {
       assertThat(
           fragment.getParameterId().toString(), //
           ((RangeXParameter<?>) linkConfig.getParameter(fragment.getParameterId()))
               .getLifetimeRange(), //
           isEqualTo(RANGES[2 * index]));
       assertThat(
           fragment.getParameterId().toString(), //
           ((RangeXParameter<?>) linkConfig.getParameter(fragment.getParameterId()))
               .getInitialRange(), //
           isEqualTo(RANGES[2 * index + 1]));
     } else {
       assertThat(
           fragment.getParameterId().toString(), //
           ((RangeXParameter<?>) linkConfig.getParameter(fragment.getParameterId()))
               .getLifetimeRange(), //
           isEqualTo(
               ((RangeXParameter<?>) template.getParameter(fragment.getParameterId()))
                   .getLifetimeRange()));
       assertThat(
           fragment.getParameterId().toString(), //
           ((RangeXParameter<?>) linkConfig.getParameter(fragment.getParameterId()))
               .getInitialRange(), //
           isEqualTo(
               ((RangeXParameter<?>) template.getParameter(fragment.getParameterId()))
                   .getInitialRange()));
     }
   }
 }