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