code: @SuppressWarnings("squid:S3346")
      private void fixPoint() throws ContradictionException {
          boolean noFixPoint = true;
          while (noFixPoint) {
              for (int d = 0; d < nbDims; d++) {
                  if (sumISizes[d] > sumLoadSup[d].get() || sumISizes[d] < sumLoadInf[d].get()) {
                      fails();
                  }
              }
              noFixPoint = false;
  
              for (int d = 0; d < nbDims; d++) {
                  for (int b = 0; b < nbBins; b++) {
                      assert (loads[d][b].getLB() >= assignedLoad[d][b].get() && loads[d][b].getUB() <= potentialLoad[d][b].get());
                      noFixPoint |= filterLoadInf(d, b, (int) sumISizes[d] - sumLoadSup[d].get() + loads[d][b].getUB());
                      noFixPoint |= filterLoadSup(d, b, (int) sumISizes[d] - sumLoadInf[d].get() + loads[d][b].getLB());
                  }
              }
          }
      }
docs: the fix point procedure without heap, on each dimension:
  - check rule 1.0: if sumItemSizes < sumBinLoadInf or sumItemSizes > sumBinLoadSups then fail
  - filter according to rule 1.1, for each bin: sumItemSizes - (sumBinLoadSup - sup(binLoad)) <= binLoad <= sumItemSizes - (sumBinLoadInf - inf(binLoad))
  
  @throws ContradictionException if a contradiction (rules 1) is raised