### Question:
HugeObjectArray extends HugeArray<T[], T, HugeObjectArray<T>> { public static MemoryEstimation memoryEstimation(long objectEstimation) { return memoryEstimation( MemoryEstimations.of("instance", (dimensions, concurrency) -> MemoryRange.of(objectEstimation)) ); }  abstract T get(long index); abstract void set(long index, T value); abstract T putIfAbsent(long index, Supplier<T> supplier); abstract void setAll(LongFunction<T> gen); abstract void fill(T value); @Override abstract long size(); @Override abstract long sizeOf(); @Override abstract long release(); @Override abstract HugeCursor<T[]> newCursor(); @Override abstract void copyTo(final HugeObjectArray<T> dest, final long length); @Override abstract HugeObjectArray<T> copyOf(final long newLength, final AllocationTracker tracker); @Override abstract T[] toArray(); @Override NodeProperties asNodeProperties(); static HugeObjectArray<T> newArray(Class<T> componentClass, long size, AllocationTracker tracker); @SafeVarargs static HugeObjectArray<T> of(final T... values); static MemoryEstimation memoryEstimation(long objectEstimation); static MemoryEstimation memoryEstimation(MemoryEstimation objectEstimation);  }### Answer:
@Test void shouldComputeMemoryEstimation() { var estimation = HugeObjectArray.memoryEstimation(sizeOfLongArray(10)); var dim0 = ImmutableGraphDimensions.builder().nodeCount(0).build(); assertEquals(40, estimation.estimate(dim0, 1).memoryUsage().min); var dim10000 = ImmutableGraphDimensions.builder().nodeCount(10000).build(); assertEquals(1000040, estimation.estimate(dim10000, 1).memoryUsage().min); }