The Vector.cross_product function returns the opposite vector of the expected result
The member function of class Vector returns the opposite vector of the expected result. The function calculates the resulting vector as if the cross_product is v X self instead of self X v. Just to be sure I tried running the exact example from the 2.1.0 documentation, where is specified:
Vector[1, 0, 0].cross_product Vector[0, 1, 0] => Vector[0, 0, 1]
The documentation is right, but running the example produces Vector[0, 0, -1].
The fix is just to swap the two arguments of the '-' operator.
The implementation is in matrix.rb line:1764