docs: public static Occurred compare(VectorClock v1, VectorClock v2) {
          if(v1 == null || v2 == null)
              throw new IllegalArgumentException("Can't compare null vector clocks!");
          // We do two checks: v1 <= v2 and v2 <= v1 if both are true then
          boolean v1Bigger = false;
          boolean v2Bigger = false;
  
          SortedSet<Short> v1Nodes = v1.getVersionMap().navigableKeySet();
          SortedSet<Short> v2Nodes = v2.getVersionMap().navigableKeySet();
          // get clocks(nodeIds) that both v1 and v2 has
          SortedSet<Short> commonNodes = Sets.newTreeSet(v1Nodes);
          commonNodes.retainAll(v2Nodes);
          // if v1 has more nodes than common nodes
          // v1 has clocks that v2 does not
          if(v1Nodes.size() > commonNodes.size()) {
              v1Bigger = true;
          }
          // if v2 has more nodes than common nodes
          // v2 has clocks that v1 does not
          if(v2Nodes.size() > commonNodes.size()) {
              v2Bigger = true;
          }
          // compare the common parts
          for(Short nodeId: commonNodes) {
              // no need to compare more
              if(v1Bigger && v2Bigger) {
                  break;
              }
              long v1Version = v1.getVersionMap().get(nodeId);
              long v2Version = v2.getVersionMap().get(nodeId);
              if(v1Version > v2Version) {
                  v1Bigger = true;
              } else if(v1Version < v2Version) {
                  v2Bigger = true;
              }
          }
  
          /*
           * This is the case where they are equal. Consciously return BEFORE, so
           * that the we would throw back an ObsoleteVersionException for online
           * writes with the same clock.
           */
          if(!v1Bigger && !v2Bigger)
              return Occurred.BEFORE;
          /* This is the case where v1 is a successor clock to v2 */
          else if(v1Bigger && !v2Bigger)
              return Occurred.AFTER;
          /* This is the case where v2 is a successor clock to v1 */
          else if(!v1Bigger && v2Bigger)
              return Occurred.BEFORE;
          /* This is the case where both clocks are parallel to one another */
          else
              return Occurred.CONCURRENTLY;
      }