blob: 0fd74a4752686444c938a28921bbe212ef42b37f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Ignite.Tests.Linq;
using System.Linq;
using Ignite.Sql;
using Internal.Linq;
using Internal.Sql;
using NUnit.Framework;
/// <summary>
/// Tests for <see cref="ResultSelectorCacheKey{T}"/>.
/// </summary>
public class ResultSelectorCacheKeyTests
{
[Test]
public void TestKeysWithSameColumnsAreEqual()
{
var target = new object();
var columns = GetColumns();
var key1 = new ResultSelectorCacheKey<object>(target, columns);
var key2 = new ResultSelectorCacheKey<object>(target, columns);
Assert.AreEqual(key1, key2);
Assert.AreEqual(key1.GetHashCode(), key2.GetHashCode());
Assert.IsTrue(key1 == key2);
}
[Test]
public void TestKeysWithSameColumnTypeAndScaleAreEqual()
{
var target = new object();
var columns = GetColumns();
var columns2 = GetColumns();
// Change everything except type and scale.
columns2[0] = columns2[0] with { Name = "foo", Origin = new ColumnOrigin("a", "b", "c"), Precision = 123 };
var key1 = new ResultSelectorCacheKey<object>(target, columns);
var key2 = new ResultSelectorCacheKey<object>(target, columns2);
Assert.AreEqual(key1, key2);
Assert.AreEqual(key1.GetHashCode(), key2.GetHashCode());
Assert.IsTrue(key1 == key2);
}
[Test]
public void TestKeysWithDifferentColumnTypesAreNotEqual()
{
var target = new object();
var columns = GetColumns();
var columns2 = GetColumns();
columns2[0] = columns2[0] with { Type = ColumnType.String };
var key1 = new ResultSelectorCacheKey<object>(target, columns);
var key2 = new ResultSelectorCacheKey<object>(target, columns2);
Assert.AreNotEqual(key1, key2);
Assert.AreNotEqual(key1.GetHashCode(), key2.GetHashCode());
Assert.IsFalse(key1 == key2);
}
[Test]
public void TestKeysWithDifferentColumnScalesAreNotEqual()
{
var target = new object();
var columns = GetColumns();
var columns2 = GetColumns();
columns2[0] = columns2[0] with { Scale = -1 };
var key1 = new ResultSelectorCacheKey<object>(target, columns);
var key2 = new ResultSelectorCacheKey<object>(target, columns2);
Assert.AreNotEqual(key1, key2);
Assert.AreNotEqual(key1.GetHashCode(), key2.GetHashCode());
Assert.IsFalse(key1 == key2);
}
[Test]
public void TestKeysWithSameColumnsDifferentOrderAreNotEqual()
{
var target = new object();
var columns = GetColumns();
var key1 = new ResultSelectorCacheKey<object>(target, columns);
var key2 = new ResultSelectorCacheKey<object>(target, columns.Reverse().ToList());
Assert.AreNotEqual(key1, key2);
Assert.AreNotEqual(key1.GetHashCode(), key2.GetHashCode());
Assert.IsFalse(key1 == key2);
}
private static ColumnMetadata[] GetColumns()
{
return new[]
{
new ColumnMetadata(
Name: "c1",
Type: ColumnType.Date,
Precision: 1,
Scale: 2,
Nullable: true,
Origin: null),
new ColumnMetadata(
Name: "c2",
Type: ColumnType.Float,
Precision: 4,
Scale: 6,
Nullable: false,
Origin: null)
};
}
}