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 12 namespace Antmicro.Renode.UnitTests.SymbolLookupTests 13 { 14 [TestFixture] 15 public class SymbolTests 16 { 17 [Test] ShouldOverlap()18 public void ShouldOverlap() 19 { 20 var symbol = new List<Symbol> { 21 new Symbol(0, 10, "一"), 22 new Symbol(5, 15, "二"), 23 new Symbol(5, 30, "三"), 24 new Symbol(15, 30, "四"), 25 new Symbol(15, 15, "五"), 26 }; 27 Assert.True(symbol[0].Overlaps(symbol[1])); 28 Assert.True(symbol[1].Overlaps(symbol[0])); 29 Assert.True(symbol[2].Overlaps(symbol[1])); 30 Assert.True(symbol[1].Overlaps(symbol[2])); 31 Assert.True(symbol[2].Overlaps(symbol[3])); 32 Assert.True(symbol[3].Overlaps(symbol[2])); 33 Assert.True(symbol[3].Overlaps(symbol[4])); 34 Assert.True(symbol[4].Overlaps(symbol[3])); 35 } 36 37 [Test] ShouldNotOverlap()38 public void ShouldNotOverlap() 39 { 40 var symbol = new List<Symbol> { 41 new Symbol(0, 10, "一"), 42 new Symbol(5, 15, "二"), 43 new Symbol(5, 30, "三"), 44 new Symbol(15, 30, "四"), 45 new Symbol(10, 20, "五"), 46 }; 47 Assert.False(symbol[0].Overlaps(symbol[4])); 48 Assert.False(symbol[4].Overlaps(symbol[0])); 49 Assert.False(symbol[0].Overlaps(symbol[3])); 50 Assert.False(symbol[3].Overlaps(symbol[0])); 51 Assert.False(symbol[1].Overlaps(symbol[3])); 52 Assert.False(symbol[3].Overlaps(symbol[1])); 53 } 54 55 [Test] ShouldContain()56 public void ShouldContain() 57 { 58 var symbol = new List<Symbol> { 59 new Symbol(5, 30, "三"), 60 new Symbol(5, 15, "二"), 61 new Symbol(15, 30, "四"), 62 new Symbol(10, 20, "五"), 63 new Symbol(15, 15, "一"), 64 }; 65 Assert.True(symbol[0].Contains(symbol[0])); 66 Assert.True(symbol[0].Contains(symbol[1])); 67 Assert.True(symbol[0].Contains(symbol[2])); 68 Assert.True(symbol[0].Contains(symbol[3])); 69 Assert.True(symbol[2].Contains(symbol[4])); 70 } 71 72 [Test] ShouldNotContain()73 public void ShouldNotContain() 74 { 75 var symbol = new List<Symbol> { 76 new Symbol(5, 30, "三"), 77 new Symbol(5, 15, "二"), 78 new Symbol(15, 30, "四"), 79 new Symbol(10, 20, "五"), 80 new Symbol(15, 15, "一"), 81 }; 82 Assert.False(symbol[1].Contains(symbol[0])); 83 Assert.False(symbol[2].Contains(symbol[0])); 84 Assert.False(symbol[3].Contains(symbol[0])); 85 Assert.False(symbol[1].Contains(symbol[2])); 86 Assert.False(symbol[2].Contains(symbol[1])); 87 Assert.False(symbol[1].Contains(symbol[3])); 88 Assert.False(symbol[3].Contains(symbol[1])); 89 Assert.False(symbol[1].Contains(symbol[4])); 90 } 91 92 [Test] ShouldDemangle()93 public void ShouldDemangle() 94 { 95 var symbol = new List<Symbol> { 96 new Symbol(0,0, "_ZN2cl2pl4consC1ERKSs"), 97 new Symbol(0,0, "_Z1hic"), 98 new Symbol(0,0, "?h@@YAXHD@Z" ), 99 new Symbol(0,0, "_ZN4Test6Ne$ted12staticMemberE3abc" ), 100 new Symbol(0,0, "_ZNSt8ios_base4InitC1Ev@plt"), 101 new Symbol(0,0, "_ZN6tflite12_GLOBAL__N_14EvalEP13TfLiteContextP10TfLiteNode") 102 }; 103 Assert.AreEqual("cl::pl::cons::complete object constructor", symbol[0].Name); 104 Assert.AreEqual("h", symbol[1].Name); 105 Assert.AreEqual("?h@@YAXHD@Z", symbol[2].Name); 106 Assert.AreEqual("Test::Ne$ted::staticMember", symbol[3].Name); 107 Assert.AreEqual("std::ios_base::Init::complete object constructor", symbol[4].Name); 108 Assert.AreEqual("tflite::(anonymous namespace)::Eval", symbol[5].Name); 109 } 110 } 111 } 112 113