This check is expensive in that it does an array allocation on every call; at the very least, the array should be allocated and frozen as a constant. 

Though, is there any reason to make this return nil if this test fails? ArgumentError seems more appropriate; part of the contract of the method is that the objects are comparable, so it should raise if the caller violates the contract.