public void CanCompareCollections() { var ints = new[] { 1, 2, 3 }; var otherInts = new[] { 4, 5, 6 }; var longerInts = new[] { 1, 2, 3, 4 }; var strings = new[] { "hello", "bonjour", "guten tag", "你好", "aloha" }; var otherStrings = new[] { "good bye", "au revoir", "auf wiedersehen", "再見", "aloha" }; var intComparer = new ModelComparer <int[]>(); var stringComparer = new ModelComparer <string[]>(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. // Also, we use deep copies for some comparisons to make sure the ModelComparer isn't falling back on reference equality. Assert.True(intComparer.Equals(ints, ints)); Assert.True(stringComparer.Equals(strings, strings)); Assert.True(intComparer.Equals(ints, (int[])ints.Clone())); Assert.True(stringComparer.Equals((string[])strings.Clone(), strings)); Assert.False(intComparer.Equals(ints, otherInts)); Assert.False(stringComparer.Equals(otherStrings, strings)); Assert.False(intComparer.Equals(ints, new[] { 7 })); Assert.False(stringComparer.Equals(new[] { "who?" }, strings)); // Test collections of varying lengths. Assert.False(intComparer.Equals(ints, longerInts)); Assert.False(intComparer.Equals(longerInts, ints)); }
MarketRecommendation CompareModels(IEnumerable <MarketModel> models) { SampleUtilities.DoCpuIntensiveOperation(2.0 * speedFactor, cts.Token); if (cts.Token.IsCancellationRequested) { return(null); } else { return(ModelComparer.Run(models.ToArray())); } }
public void CanCompareComplexModels() { var homeAddress = new USAddress() { Street = "308 Negra Arroyo Lane", City = "Albuquerque", State = "New Mexico", ZipCode = 87104 }; var alternateAddress = new USAddress() { Street = "Los Pollos Hermanos, 123 Central Ave Southeast", City = "Albuquerque", State = "New Mexico", ZipCode = 87108 }; var theOneWhoKnocks = new Customer() { FirstName = "Walter", LastName = "White", Aliases = new[] { "Heisenberg", "The One Who Knocks" }, Age = 51, Address = homeAddress, Directions = new List <Direction?>() { null, Direction.Left, null, Direction.Right }, Occupations = new Dictionary <string, Address>() { { "Husband and father", homeAddress }, { "Career criminal", alternateAddress } } }; var walterWhite = theOneWhoKnocks.Clone(); var gustavoFring = new Customer() { FirstName = "Gustavo", LastName = "Fring", Age = 49, Address = alternateAddress }; var comparer = new ModelComparer <Customer>(); Assert.Equal(theOneWhoKnocks, theOneWhoKnocks, comparer); Assert.Equal(walterWhite, theOneWhoKnocks, comparer); Assert.NotEqual(gustavoFring, theOneWhoKnocks, comparer); }
public void CanCompareDifferentEnumerableTypes() { var intArray = new[] { 1, 2, 3 }; var intList = new List <int>() { 1, 2, 3 }; var intComparer = new ModelComparer <IEnumerable <int> >(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. Assert.True(intComparer.Equals(intArray, intList)); }
public void NullEqualsEmptyCollection() { IEnumerable <int> nullCollection = null; var emptyArray = new int[0]; var emptyList = new List <int>(); var comparer = new ModelComparer <IEnumerable <int> >(); Assert.True(comparer.Equals(nullCollection, emptyArray)); Assert.True(comparer.Equals(emptyArray, nullCollection)); Assert.True(comparer.Equals(nullCollection, emptyList)); Assert.True(comparer.Equals(emptyList, nullCollection)); }
private int?GetSortedIndex(IView view) { if (_views.Count == 0) { return(null); } if (ViewComparer != null) { for (var i = 0; i < _views.Count; i++) { if (ViewComparer.Compare(view, _views[i]) < 0) { return(i); } } return(null); } if (ViewModelComparer != null) { for (var i = 0; i < _views.Count; i++) { if (ViewModelComparer.Compare(view.ViewModel, _views[i].ViewModel) < 0) { return(i); } } return(null); } if (ModelComparer != null) { for (var i = 0; i < _views.Count; i++) { if (ModelComparer.Compare(view.ViewModel?.Model, _views[i].ViewModel?.Model) < 0) { return(i); } } } return(null); }
public void CanCompareDtos() { var model = new Model() { Name = "Magical Trevor", Age = 11 }; var sameModel = new Model(model); var differentModel = new Model() { Name = "Mr. Stabby", Age = 35 }; var comparer = new ModelComparer <Model>(); Assert.Equal(model, model, comparer); Assert.Equal(model, sameModel, comparer); Assert.NotEqual(model, differentModel, comparer); }
public void CanComparePolymorphicObjects() { var cat = new Cat("Gizmo"); var otherCat = new Cat("Ness"); var dog = new Dog("Mara"); var otherDog = new Dog("Daisy"); var comparer = new ModelComparer <Animal>(); Assert.Equal(dog, dog, comparer); Assert.Equal(dog, new Dog(dog), comparer); Assert.Equal(cat, cat, comparer); Assert.Equal(cat, new Cat(cat), comparer); Assert.NotEqual(dog, otherDog, comparer); Assert.NotEqual(cat, otherCat, comparer); Assert.NotEqual(dog, cat, comparer); }
public void IEquatableTakesPrecedenceOverIEnumerable() { var ints = new BiasedList(1, 2, 3); var odds = new BiasedList(1, 3, 5); var evens = new BiasedList(2, 4, 6); var comparer = new ModelComparer <BiasedList>(); Assert.True(comparer.Equals(ints, ints)); Assert.True(comparer.Equals(ints, new BiasedList(ints))); // ints and odds should compare as equal because BiasedList only looks at the first element. Assert.True(comparer.Equals(odds, ints)); Assert.True(comparer.Equals(new BiasedList(odds), ints)); Assert.False(comparer.Equals(ints, evens)); Assert.False(comparer.Equals(ints, new BiasedList(evens))); }
public void CanCompareDictionaries() { var x = new Dictionary <string, double>() { { "pi", 3.14 }, { "e", 2.718 } }; var notX = new Dictionary <string, double>() { { "m", 13.3 }, { "v", 77 } }; var y = new Dictionary <string, object>() { { "a", "test" }, { "b", "test2" } }; var notY = new Dictionary <string, object>() { { "w", "other" }, { "u", "side" } }; var doubleComparer = new ModelComparer <Dictionary <string, double> >(); var stringComparer = new ModelComparer <Dictionary <string, object> >(); // We have to use Assert.True/False instead of .Equal/.NotEqual or we won't actually exercise the ModelComparer's collection handling. // Also, we use deep copies for some comparisons to make sure the ModelComparer isn't falling back on reference equality. Assert.True(doubleComparer.Equals(x, x)); Assert.True(stringComparer.Equals(y, y)); Assert.True(doubleComparer.Equals(x, new Dictionary <string, double>(x))); Assert.True(stringComparer.Equals(new Dictionary <string, object>(y), y)); Assert.False(doubleComparer.Equals(x, notX)); Assert.False(stringComparer.Equals(notY, y)); Assert.False(doubleComparer.Equals(x, new Dictionary <string, double>() { { "r", 12.0 } })); Assert.False(stringComparer.Equals(new Dictionary <string, object>() { { "c", "other" } }, y)); }
protected override void ProcessRecord() { LogInitializer.Initialize(); var sf = new FileInfo(Output); string folderForSource = Path.Combine(sf.Directory.FullName, Path.GetFileNameWithoutExtension(sf.Name), Path.GetFileNameWithoutExtension(Source.Name)); string folderForTarget = Path.Combine(sf.Directory.FullName, Path.GetFileNameWithoutExtension(sf.Name), Path.GetFileNameWithoutExtension(Target.Name)); ModelComparer comparer = new ModelComparer(); DifferenceModels diff = new DifferenceModels(folderForSource, folderForTarget, c => Trace.WriteLine(c)); comparer.CompareModels(Source, Target, diff, new CompareContext() { }); base.WriteObject(diff); base.ProcessRecord(); }
public void IntegerComparisonsUseWidestType() { byte b = 10; short s = 10; int i = 10; long l = 10; var comparer = new ModelComparer <object>(); Assert.Equal(b, s, comparer); Assert.Equal(b, i, comparer); Assert.Equal(b, l, comparer); Assert.Equal(s, b, comparer); Assert.Equal(s, i, comparer); Assert.Equal(s, l, comparer); Assert.Equal(i, b, comparer); Assert.Equal(i, s, comparer); Assert.Equal(i, l, comparer); Assert.Equal(l, b, comparer); Assert.Equal(l, s, comparer); Assert.Equal(l, i, comparer); }
private static async Task UpdateApp(DesignHub ctx, AppPackage from, ApplicationModel localAppModel) { //TODO:考虑删除本地已签出的所有变更 //TODO:1.签出本地对应App的所有节点,包括模型根节点 var local = new AppPackage(); await ModelStore.LoadToAppPackage(localAppModel.Id, localAppModel.Name, local); var publish = new PublishPackage(); //----比对文件夹---- var folderComparer = new FolderComparer(); var newFolders = from.Folders.Except(local.Folders, folderComparer); foreach (var newFolder in newFolders) { newFolder.Import(); publish.Folders.Add(newFolder); } //var removedFolders = local.Folders.Except(from.Folders, folderComparer); //foreach (var removedFolder in removedFolders) //{ // removedFolder.Remove(); // publish.Folders.Add(removedFolder); //} var otherFolders = local.Folders.Intersect(from.Folders, folderComparer); foreach (var folder in otherFolders) { if (folder.UpdateFrom(from.Folders.Single(t => t.TargetModelType == folder.TargetModelType && t.Id == folder.Id))) { publish.Folders.Add(folder); } } //----比对模型---- var modelComparer = new ModelComparer(); var newModels = from.Models.Except(local.Models, modelComparer); foreach (var newModel in newModels) { newModel.Import(); publish.Models.Add(newModel); //导入相关代码及Assembly if (newModel.ModelType == ModelType.Service) { publish.SourceCodes.Add(newModel.Id, from.SourceCodes[newModel.Id]); var key = $"{from.Application.Name}.{newModel.Name}"; publish.ServiceAssemblies.Add(key, from.ServiceAssemblies[key]); } else if (newModel.ModelType == ModelType.View) { publish.SourceCodes.Add(newModel.Id, from.SourceCodes[newModel.Id]); var key = $"{from.Application.Name}.{newModel.Name}"; publish.ViewAssemblies.Add(key, from.ViewAssemblies[key]); } } //if (localAppModel.ID != SysGlobal.SysString) //注意:系统应用包不移除仅本地有的模型 //{ var removedModles = local.Models.Except(from.Models, modelComparer); foreach (var removedModel in removedModles) { removedModel.MarkDeleted(); publish.Models.Add(removedModel); //删除模型的相关代码组件等由PublishService处理,不用再加入 } //} var otherModels = local.Models.Intersect(from.Models, modelComparer); foreach (var model in otherModels) { if (model.UpdateFrom(from.Models.Single(t => t.ModelType == model.ModelType && t.Id == model.Id))) { publish.Models.Add(model); } if (model.ModelType == ModelType.Service) { publish.SourceCodes.Add(model.Id, from.SourceCodes[model.Id]); var key = $"{from.Application.Name}.{model.Name}"; publish.ServiceAssemblies.Add(key, from.ServiceAssemblies[key]); } else if (model.ModelType == ModelType.View) { publish.SourceCodes.Add(model.Id, from.SourceCodes[model.Id]); var key = $"{from.Application.Name}.{model.Name}"; publish.ViewAssemblies.Add(key, from.ViewAssemblies[key]); } } //发布变更的包 await PublishService.PublishAsync(ctx, publish, "Import"); }