<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://reviewboard.asterisk.org/r/3476/">https://reviewboard.asterisk.org/r/3476/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On April 24th, 2014, 10:46 p.m. UTC, <b>Mark Michelson</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
<thead>
<tr>
<th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
<a href="https://reviewboard.asterisk.org/r/3476/diff/1/?file=57812#file57812line151" style="color: black; font-weight: bold; text-decoration: underline;">./asterisk/trunk/lib/python/asterisk/memory_test_condition.py</a>
<span style="font-weight: normal;">
(Diff revision 1)
</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">151</font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="k">for</span> <span class="n">dictionary1</span> <span class="ow">in</span> <span class="n">related_test_condition</span><span class="o">.</span><span class="n">memory_info</span><span class="p">:</span></pre></td>
</tr>
<tr>
<th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">152</font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">dictionary2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">memory_info</span><span class="p">[</span><span class="n">i</span><span class="p">]</span></pre></td>
</tr>
<tr>
<th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">153</font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="n">difference</span> <span class="o">=</span> <span class="n">dictionary1</span><span class="p">[</span><span class="s">'memory'</span><span class="p">]</span> <span class="o">-</span> <span class="n">dictionary2</span><span class="p">[</span><span class="s">'memory'</span><span class="p">]</span></pre></td>
</tr>
</tbody>
</table>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This seems like it's not going to work properly. related_test_condition.memory_info and self.memory_info are not guaranteed to have related memory allocations at the same ordinal positions in their lists. Also, it's possible for a requested allocation not to exist in related_test_condition.memory_info but to be present in self.memory_info.
So I have two suggestions here. Change the loop to iterate over self.memory_info instead of related_test_condition.memory_info. Get the precondition's memory information by key.
Something like the following:
for post_cond in self.memory_info:
pre_cond = None
for item in related_test_condition.memory_info:
if post_cond['name'] == item['name']:
pre_cond = item
break
Now you have your correlated pre and post memory counts for any given allocation. There may be some spiffier way of doing the inner loop, but I don't know it.
Note that you may not find a corresponding pre_cond for a given post_cond. In this case, you'll have to assume that 0 bytes of memory had previously been allocated.</pre>
</blockquote>
</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">FWIW, I did find a bit of a slicker way to do the inner loop, but I don't really know if it's more readable:
for post_cond in self.memory_info:
pre_cond = next((item for item in related_test_condition.memory_info if item['name'] == post_cond['name']), {})
That will set pre_cond to be either the corresponding item with the same name or an empty dict if none can be found.</pre>
<br />
<p>- Mark</p>
<br />
<p>On April 24th, 2014, 7:02 p.m. UTC, Benjamin Keith Ford wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for Asterisk Developers.</div>
<div>By Benjamin Keith Ford.</div>
<p style="color: grey;"><i>Updated April 24, 2014, 7:02 p.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18429">ASTERISK-18429</a>
</div>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
testsuite
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This testcondition can be enabled for any test using the keyword 'memory' under testconditions. The purpose of this testcondition is to check the memory allocated before and after the test, and make sure they are within a certain range. If the test wants to look at something specific (such as channel.c), then each allocation that you want to look at can also be specified in under 'allocations'. If both the global memory and individual allocations are to be checked by the test, that option can be enabled by setting 'both' to value True.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>./asterisk/trunk/test-config.yaml <span style="color: grey">(4944)</span></li>
<li>./asterisk/trunk/lib/python/asterisk/test_conditions.py <span style="color: grey">(4944)</span></li>
<li>./asterisk/trunk/lib/python/asterisk/test_case.py <span style="color: grey">(4944)</span></li>
<li>./asterisk/trunk/lib/python/asterisk/memory_test_condition.py <span style="color: grey">(PRE-CREATION)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/3476/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>