The support cutting example is wrong. In the case given, both supports are cut and neither unit should move. The case that is wrong, afaik, is when a unit attacks a unit that is supporting an attack on it. The official rules are that in that case, the supporting unit must be dislodged for support to be cut. Examples:
A -> X, B support A -> X
X -> B
phpdip does this right. The support is not cut, X is dislodged.
A -> X, B support A -> X
X -> B, Y support X -> B
Z -> X
phpdip does this right too. B is dislodged, support is cut, X moves to B, and Z and A bounce at X.
A -> X, B support A -> X, C support hold at B
X -> B, Y support X -> B
phpdip does this WRONG. B is not dislodged, so the support should not be cut and A should move to B, dislodging B. phpdip currently adjudicates this: support from B is cut, everyone bounces.
This is due to a simplification in the current adjudicator that says if an attack on a territory that is supporting an attack on itself is supported, the support from the target nation is cut. This is easier to code as it doesn't require some dislodges to be determined before all of the support cuts and isn't often wrong, so it's understandable why this bug currently exists, but it's an important difference to note, nonetheless.