1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using NUnit.Framework; 9 using Antmicro.Renode.Core; 10 using System.Collections.Generic; 11 using System.Linq; 12 13 namespace Antmicro.Renode.UnitTests.SymbolLookupTests 14 { 15 [TestFixture] 16 public class DeduplicationTests 17 { 18 [Test] ShouldDedupliacteIdenticalSymbols()19 public void ShouldDedupliacteIdenticalSymbols() 20 { 21 var symbols = new List<Symbol> 22 { 23 new Symbol(0, 100, "一"), 24 new Symbol(1, 85, "四"), 25 new Symbol(2, 70, "国"), 26 new Symbol(80, 85, "猫"), 27 new Symbol(3, 60, "中"), 28 new Symbol(70, 75, "私"), 29 new Symbol(4, 15, "五"), 30 new Symbol(20, 35, "三"), 31 }; 32 var symbolCopies = new List<Symbol> 33 { 34 new Symbol(0, 100, "一"), 35 new Symbol(1, 85, "四"), 36 new Symbol(2, 70, "国"), 37 new Symbol(80, 85, "猫"), 38 new Symbol(3, 60, "中"), 39 new Symbol(70, 75, "私"), 40 new Symbol(4, 15, "五"), 41 new Symbol(20, 35, "三"), 42 }; 43 var lookup1 = new SymbolLookup(); 44 var lookup2 = new SymbolLookup(); 45 lookup1.InsertSymbols(symbols); 46 lookup2.InsertSymbols(symbolCopies); 47 48 for(int i = 0; i < symbols.Count; ++i) 49 { 50 Assert.AreSame( 51 lookup1.GetSymbolsByName(symbols[i].Name).First(), 52 lookup2.GetSymbolsByName(symbolCopies[i].Name).First(), 53 string.Format("Symbol {0}, has not been deduplicated.", i) 54 ); 55 } 56 } 57 58 [Test] ShouldNotDedupliacteIfThereAreTwoDifferentSymbolsWithSameNameAndInterval()59 public void ShouldNotDedupliacteIfThereAreTwoDifferentSymbolsWithSameNameAndInterval() 60 { 61 var symbols1 = new List<Symbol> 62 { 63 new Symbol(0, 100, "一"), 64 new Symbol(20, 35, "三"), 65 }; 66 var symbols2 = new List<Symbol> 67 { 68 new Symbol(20, 35, "一"), 69 }; 70 var lookup1 = new SymbolLookup(); 71 var lookup2 = new SymbolLookup(); 72 lookup1.InsertSymbols(symbols1); 73 lookup2.InsertSymbols(symbols2); 74 75 var symbol = symbols1[0]; 76 Assert.AreNotSame( 77 lookup1.GetSymbolsByName(symbol.Name).First(), 78 lookup2.GetSymbolsByName(symbol.Name).First(), 79 string.Format("Symbol {0} has been deduplicated while it shouldn't.", symbol) 80 ); 81 symbol = symbols1[1]; 82 Assert.AreNotSame( 83 lookup1.GetSymbolByAddress(symbol.Start), 84 lookup2.GetSymbolByAddress(symbol.Start), 85 string.Format("Symbol {0} has been deduplicated while it shouldn't.", symbol) 86 ); 87 } 88 89 [Test] ShouldDedupliacteAfterMerge()90 public void ShouldDedupliacteAfterMerge() 91 { 92 var symbols1 = new List<Symbol> 93 { 94 new Symbol(0, 100, "一"), 95 new Symbol(20, 35, "三"), 96 new Symbol(100, 105, "猫"), 97 }; 98 var symbols2 = new List<Symbol> 99 { 100 new Symbol(15, 25, "私"), 101 }; 102 var lookup1 = new SymbolLookup(); 103 var lookup2 = new SymbolLookup(); 104 lookup1.InsertSymbols(symbols1); 105 lookup2.InsertSymbols(symbols1); 106 lookup1.InsertSymbols(symbols2); 107 108 var symbol = symbols1[2]; 109 Assert.AreSame( 110 lookup1.GetSymbolsByName(symbol.Name).First(), 111 lookup2.GetSymbolsByName(symbol.Name).First(), 112 string.Format("Symbol {0} has NOT been deduplicated.", symbol) 113 ); 114 115 symbol = symbols1[1]; 116 Assert.AreNotSame( 117 lookup1.GetSymbolsByName(symbol.Name).First(), 118 lookup2.GetSymbolsByName(symbol.Name).First(), 119 string.Format("Symbol {0} has been deduplicated while it shouldn't.", symbol) 120 ); 121 } 122 } 123 } 124 125