@drozdik.m/comparator-handler
Version:
Class that handles comparators and makes it easy for programmer to compare objects or primitive types inside more complicated classes.
84 lines (83 loc) • 3.89 kB
JavaScript
exports.__esModule = true;
var ComparatorHandler_1 = require("../src/ComparatorHandler");
var unit_test_1 = require("@drozdik.m/unit-test");
//-----TESTING CLASSES-----
var NoIComparable = /** @class */ (function () {
function NoIComparable(n) {
this.someNumber = n;
}
return NoIComparable;
}());
var YesIComparable = /** @class */ (function () {
function YesIComparable(n) {
this.someNumber = n;
}
YesIComparable.prototype.GetComparator = function () {
return function (a, b) {
if (a.someNumber < b.someNumber)
return 1;
if (a.someNumber > b.someNumber)
return -1;
return 0;
};
};
return YesIComparable;
}());
var unitTest = new unit_test_1.UnitTest("Comparator handler");
unitTest.AddTestCase("Default comparator", function () {
var comparatorHandler1 = new ComparatorHandler_1.ComparatorHandler();
unit_test_1.Assert.AreEqual(comparatorHandler1.Compare(1, 2), -1);
unit_test_1.Assert.AreEqual(comparatorHandler1.Compare(2, 1), 1);
unit_test_1.Assert.AreEqual(comparatorHandler1.Compare(1, 1), 0);
});
unitTest.AddTestCase("Explicit comparator", function () {
var comparatorHandler2 = new ComparatorHandler_1.ComparatorHandler(function (a, b) {
if (a < b)
return 1;
if (a > b)
return -1;
return 0;
});
unit_test_1.Assert.AreEqual(comparatorHandler2.Compare(1, 2), 1);
unit_test_1.Assert.AreEqual(comparatorHandler2.Compare(2, 1), -1);
unit_test_1.Assert.AreEqual(comparatorHandler2.Compare(1, 1), 0);
});
unitTest.AddTestCase("Automatic IComparable recognition", function () {
var comparatorHandler3 = new ComparatorHandler_1.ComparatorHandler();
var object1 = new YesIComparable(1);
var object2 = new YesIComparable(1);
var object3 = new YesIComparable(2);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object3), 1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object3, object1), -1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object2), 0);
comparatorHandler3.SetComparator(function (a, b) {
return 2;
});
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object3), 1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object3, object1), 1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object2), 1);
comparatorHandler3.SetAutomaticIComparableRecognition(true);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object3), 1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object3, object1), -1);
unit_test_1.Assert.AreEqual(comparatorHandler3.Compare(object1, object2), 0);
});
unitTest.AddTestCase("Explicit comparator and automatic IComparable recognition", function () {
var object1 = new YesIComparable(1);
var object2 = new YesIComparable(1);
var object3 = new YesIComparable(2);
var comparatorHandler4 = new ComparatorHandler_1.ComparatorHandler(function (a, b) {
return 2;
});
unit_test_1.Assert.AreEqual(comparatorHandler4.Compare(object1, object3), 1);
unit_test_1.Assert.AreEqual(comparatorHandler4.Compare(object3, object1), 1);
unit_test_1.Assert.AreEqual(comparatorHandler4.Compare(object1, object2), 1);
});
unitTest.AddTestCase("Clone", function () {
var comparatorHandler4 = new ComparatorHandler_1.ComparatorHandler(function (a, b) {
return 2;
});
var comparatorHandler5 = comparatorHandler4.Clone();
comparatorHandler5.SetAutomaticIComparableRecognition(true);
unit_test_1.Assert.AreNotEqual(comparatorHandler5.automaticIComparableRecognition, comparatorHandler4.automaticIComparableRecognition);
});
unitTest.Run();