Fixes to ByteString's equality handling.

pull/611/head
Jon Skeet 10 years ago
parent b2ac868493
commit 8d47ec4f3e
  1. 26
      csharp/src/ProtocolBuffers.Test/ByteStringTest.cs
  2. 35
      csharp/src/ProtocolBuffers/ByteString.cs

@ -38,6 +38,32 @@ namespace Google.Protobuf
{ {
public class ByteStringTest public class ByteStringTest
{ {
[Test]
public void Equality()
{
ByteString b1 = ByteString.CopyFrom(1, 2, 3);
ByteString b2 = ByteString.CopyFrom(1, 2, 3);
ByteString b3 = ByteString.CopyFrom(1, 2, 4);
ByteString b4 = ByteString.CopyFrom(1, 2, 3, 4);
EqualityTester.AssertEquality(b1, b1);
EqualityTester.AssertEquality(b1, b2);
EqualityTester.AssertInequality(b1, b3);
EqualityTester.AssertInequality(b1, b4);
EqualityTester.AssertInequality(b1, null);
Assert.IsTrue(b1 == b1);
Assert.IsTrue(b1 == b2);
Assert.IsFalse(b1 == b3);
Assert.IsFalse(b1 == b4);
Assert.IsFalse(b1 == null);
Assert.IsTrue((ByteString) null == null);
Assert.IsFalse(b1 != b1);
Assert.IsFalse(b1 != b2);
Assert.IsTrue(b1 != b3);
Assert.IsTrue(b1 != b4);
Assert.IsTrue(b1 != null);
Assert.IsFalse((ByteString) null != null);
}
[Test] [Test]
public void EmptyByteStringHasZeroSize() public void EmptyByteStringHasZeroSize()
{ {

@ -212,11 +212,22 @@ namespace Google.Protobuf
{ {
return true; return true;
} }
if (ReferenceEquals(lhs, null)) if (ReferenceEquals(lhs, null) || ReferenceEquals(rhs, null))
{ {
return false; return false;
} }
return lhs.Equals(rhs); if (lhs.bytes.Length != rhs.bytes.Length)
{
return false;
}
for (int i = 0; i < lhs.Length; i++)
{
if (rhs.bytes[i] != lhs.bytes[i])
{
return false;
}
}
return true;
} }
public static bool operator !=(ByteString lhs, ByteString rhs) public static bool operator !=(ByteString lhs, ByteString rhs)
@ -228,12 +239,7 @@ namespace Google.Protobuf
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
ByteString other = obj as ByteString; return this == (obj as ByteString);
if (obj == null)
{
return false;
}
return Equals(other);
} }
public override int GetHashCode() public override int GetHashCode()
@ -248,18 +254,7 @@ namespace Google.Protobuf
public bool Equals(ByteString other) public bool Equals(ByteString other)
{ {
if (other.bytes.Length != bytes.Length) return this == other;
{
return false;
}
for (int i = 0; i < bytes.Length; i++)
{
if (other.bytes[i] != bytes[i])
{
return false;
}
}
return true;
} }
/// <summary> /// <summary>

Loading…
Cancel
Save