ipxact-ruby 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.0
1
+ 0.12.1
@@ -38,6 +38,9 @@ class IPXACT::Component < Hash
38
38
 
39
39
  # @return [Array<Hash>] the list of ports
40
40
  attr_accessor :ports
41
+
42
+ # @return [Array<Hash>] the list of cpus
43
+ attr_accessor :cpus
41
44
 
42
45
  # Creates a new {IPXACT::Component} instance
43
46
  #
@@ -59,6 +62,14 @@ class IPXACT::Component < Hash
59
62
  :name => name})
60
63
  end
61
64
 
65
+ # Returns true if the component has one or more cpus
66
+ #
67
+ # @return [Boolean]
68
+ #
69
+ def has_cpu?
70
+ !(self.cpus.nil? || self.cpus.empty?)
71
+ end
72
+
62
73
  # Calculates an optimal path in the subcomponent graph between
63
74
  # +subcomponent_start+ and +subcomponent_end+. This computation takes into
64
75
  # account hierarchical subcomponents, and identifies optimal sub-paths in
@@ -186,6 +197,23 @@ class IPXACT::Component < Hash
186
197
  end
187
198
  end
188
199
 
200
+ # Commodity method for recursively getting all the subcomponents of the
201
+ # current component (except complex components, i.e. components that
202
+ # themselves have subcomponents).
203
+ #
204
+ # @return [Array<Component>] the current component's subcomponents
205
+ #
206
+ def rec_get_subcomponents(current_list = [])
207
+ subcomponents.each do |s|
208
+ if s[1].subcomponents.empty?
209
+ current_list << s
210
+ else
211
+ s[1].rec_get_subcomponents(current_list)
212
+ end
213
+ end
214
+ current_list
215
+ end
216
+
189
217
  # Prepares the connection structure for the {IPXACT::GraphPathFinder} class.
190
218
  # Traverses the hierarchy of subcomponents in order to create a flattened
191
219
  # representation of the subcomponents graph. In particular, the method
@@ -82,11 +82,16 @@ module IPXACT::Parser::ComponentData
82
82
  IPXACT::Parser::BusData.parse_bus(a_bus_interface, root_component, variables)
83
83
  end
84
84
 
85
+ cpus = root_component.xpath(".//spirit:cpu").collect do |a_cpu|
86
+ { :name => a_cpu.xpath("./spirit:name").first.text }
87
+ end
88
+
85
89
  component = IPXACT::Component.new(instance_name, component_name, component_vendor, component_version)
86
90
  component.interconnections = interconnections
87
91
  component.hierconnections = hierconnections
88
92
  component.subcomponents = instances
89
93
  component.ports = ports
94
+ component.cpus = cpus
90
95
  component
91
96
  end
92
97
 
@@ -149,4 +149,51 @@ describe IPXACT::Component do
149
149
  (dma[:name] + '/' + dma[:vendor] + '/x/y').should == 'dma/spiritconsortium.org/x/y'
150
150
 
151
151
  end
152
+
153
+ it "should be able to detect that a dma has no cpu" do
154
+ components = IPXACT::load_components(PLATFORM_PATH)
155
+ designs = IPXACT::load_designs(PLATFORM_PATH)
156
+ platform = IPXACT::Parser::PlatformData.parse_platform(["Leon2Platform", "1.1"], components, designs)
157
+
158
+ dma = platform.components['i_dma']
159
+ dma.should_not have_cpu
160
+ end
161
+
162
+ it "should be able to detect that a Leon2 processor is in fact a cpu" do
163
+ components = IPXACT::load_components(PLATFORM_PATH)
164
+ designs = IPXACT::load_designs(PLATFORM_PATH)
165
+ platform = IPXACT::Parser::PlatformData.parse_platform(["Leon2Platform", "1.1"], components, designs)
166
+
167
+ leon2 = platform.components['i_proc']
168
+ leon2.should have_cpu
169
+ leon2.cpus.should have(1).cpu
170
+ leon2.cpus.first[:name].should == "processor"
171
+ end
172
+
173
+ it "should return an empty list getting the recursive list of dma subcomponents" do
174
+ components = IPXACT::load_components(PLATFORM_PATH)
175
+ designs = IPXACT::load_designs(PLATFORM_PATH)
176
+ platform = IPXACT::Parser::PlatformData.parse_platform(["Leon2Platform", "1.1"], components, designs)
177
+
178
+ dma = platform.components['i_dma']
179
+ dma.rec_get_subcomponents.should be_empty
180
+ end
181
+
182
+ it "should return an array with 4 elements when considering the recursive list of the apb subsystem subcomponents" do
183
+ components = IPXACT::load_components(PLATFORM_PATH)
184
+ designs = IPXACT::load_designs(PLATFORM_PATH)
185
+ platform = IPXACT::Parser::PlatformData.parse_platform(["Leon2Platform", "1.1"], components, designs)
186
+
187
+ sub = platform.components['i_sub']
188
+ sub.rec_get_subcomponents.size.should == 4
189
+ end
190
+
191
+ it "should return an array with 10 elements when considering the recursive list of the platform components" do
192
+ components = IPXACT::load_components(PLATFORM_PATH)
193
+ designs = IPXACT::load_designs(PLATFORM_PATH)
194
+ platform = IPXACT::Parser::PlatformData.parse_platform(["Leon2Platform", "1.1"], components, designs)
195
+
196
+ platform.rec_get_subcomponents.size.should == 10
197
+ end
198
+
152
199
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 12
8
- - 0
9
- version: 0.12.0
8
+ - 1
9
+ version: 0.12.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Guillaume Godet-Bar
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-13 00:00:00 +01:00
17
+ date: 2010-12-06 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency