added all tests and IEquatable