auto currentSeed = unpredictableSeed(); static if(vdebug){write("UT: vT, predecessor. "); writeln("seed: ", currentSeed);} rndGenInUse.seed(currentSeed); //initialize the random generator auto uS = uniform(allowedArraySize,testedSize, rndGenInUse); VEBtree vT = new VEBtree(uS); // testing the boundaries now: auto randomElement = uniform(allowedArraySize, uS); assert(vT.predecessor(randomElement).isNull); assert(vT.predecessor!"[]"(randomElement) == 0); size_t n; uint[allowedArraySize] insertedVals; while(n < allowedArraySize) { auto valToInsert = uniform(0U, uS, rndGenInUse); if(vT.insert(valToInsert)) { insertedVals[n] = valToInsert; n++; } } auto sortedInserted = assumeSorted(sort(insertedVals[])); assert(vT.max == sortedInserted.back); assert(vT.min == sortedInserted.front); size_t j = allowedArraySize - 1; size_t i = testedSize + 1; do { --i; const auto el = vT.predecessor(i); if(el.isNull) { assert(i == vT.min); assert(sortedInserted.contains(i)); break; // quit the loop; } else { if(sortedInserted.contains(i)) --j; assert(el == sortedInserted[j]); } }while(i > 0);
this method retrieves the predecessor of the given input.