Skip to content

Commit cd40a07

Browse files
authored
Add tests for ParameterSet equality (#4550)
This commit stabilizes test coverage in ParameterSet.Equals and ParameterSet.ContainsParamValue.
1 parent d306ac8 commit cd40a07

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

test/Microsoft.ML.AutoML.Tests/SweeperTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System;
66
using System.Collections.Generic;
7+
using System.Linq;
78
using Xunit;
89

910
namespace Microsoft.ML.AutoML.Test
@@ -235,5 +236,41 @@ public void TestStringParameterValue()
235236
Assert.Equal(value1.GetHashCode(), value1.GetHashCode());
236237
Assert.Equal(value1.GetHashCode(), duplicateValue1.GetHashCode());
237238
}
239+
240+
[Fact]
241+
public void TestParameterSetEquality()
242+
{
243+
LongParameterValue value1 = new LongParameterValue(nameof(value1), 1);
244+
LongParameterValue value2 = new LongParameterValue(nameof(value2), 2);
245+
StringParameterValue stringValue1 = new StringParameterValue(nameof(value1), "1");
246+
247+
var parameterSet = new ParameterSet(new[] { value1 });
248+
Assert.False(parameterSet.Equals(null));
249+
250+
// Verify Equals for sets with different hash codes
251+
var parameterSetNewHash = new ParameterSet(new IParameterValue[] { value1 }.ToDictionary(x => x.Name), hash: parameterSet.GetHashCode() + 1);
252+
Assert.NotEqual(parameterSet.GetHashCode(), parameterSetNewHash.GetHashCode());
253+
Assert.False(parameterSet.Equals(parameterSetNewHash));
254+
255+
// Verify Equals for sets with the same hash code, but different number of values
256+
var parameterSetMoreValues = new ParameterSet(new IParameterValue[] { value1, value2 }.ToDictionary(x => x.Name), hash: parameterSet.GetHashCode());
257+
Assert.Equal(parameterSet.GetHashCode(), parameterSetMoreValues.GetHashCode());
258+
Assert.False(parameterSet.Equals(parameterSetMoreValues));
259+
260+
// Verify Equals for sets with the same hash and item counts, but one of the items has a different name
261+
var parameterSetDifferentName = new ParameterSet(new IParameterValue[] { value2 }.ToDictionary(x => x.Name), hash: parameterSet.GetHashCode());
262+
Assert.Equal(parameterSet.GetHashCode(), parameterSetDifferentName.GetHashCode());
263+
Assert.False(parameterSet.Equals(parameterSetDifferentName));
264+
265+
// Verify Equals for sets with the same hash and item names, but one of the items has a different value
266+
var parameterSetDifferentValue = new ParameterSet(new IParameterValue[] { stringValue1 }.ToDictionary(x => x.Name), hash: parameterSet.GetHashCode());
267+
Assert.Equal(parameterSet.GetHashCode(), parameterSetDifferentValue.GetHashCode());
268+
Assert.False(parameterSet.Equals(parameterSetDifferentValue));
269+
270+
// Verify Equals for sets with the same hash and items
271+
var parameterSetSameHash = new ParameterSet(new IParameterValue[] { value1 }.ToDictionary(x => x.Name), hash: parameterSet.GetHashCode());
272+
Assert.Equal(parameterSet.GetHashCode(), parameterSetSameHash.GetHashCode());
273+
Assert.True(parameterSet.Equals(parameterSetSameHash));
274+
}
238275
}
239276
}

0 commit comments

Comments
 (0)