{"id":2185,"date":"2013-11-22T14:49:29","date_gmt":"2013-11-22T02:49:29","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=2185"},"modified":"2013-11-22T14:49:29","modified_gmt":"2013-11-22T02:49:29","slug":"smoketest-performance-case-visualisations","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/2185\/","title":{"rendered":"Smoketest &#8211; Performance Case Visualisations"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>This post is a peek behind the curtain of the next major update to <strong>Smoketest<\/strong> which I hope to have completed shortly: <strong>Performance Case visualisations<\/strong>.<\/p>\n<p><!--more--><\/p>\n<p><strong>Smoketest<\/strong> has always had two types of test case that you could implement by deriving from two distinct base classes:<\/p>\n<p><strong>TTestCase<\/strong> is the base class for correctness testing.<\/p>\n<p><strong>TPerformanceCase<\/strong> is the base class for performance testing.<\/p>\n<p>The performance cases were what I used some years ago to <a href=\"https:\/\/www.deltics.co.nz\/blog\/posts\/375\" target=\"_blank\">compare the string handling performance of the RTL in different versions of Delphi<\/a> around the time that the switch was made to Unicode.<\/p>\n<p>I noted at the time that I was compiling the results manually to obtain the comparison data, but the raw data for those comparisons was coming from a <strong>Smoketest<\/strong> project that I put together to perform the actual tests.<\/p>\n<p>I had always intended to implement improved data capture and visualisations and I am now finally getting around to it.<\/p>\n<p>It is still very much a work in progress at this stage, but I have capture and comparisons implemented for running the same test project compiled with different Delphi versions and comparing the results in the <strong>Smoketest<\/strong> GUI itself:<\/p>\n<figure id=\"attachment_2186\" aria-describedby=\"caption-attachment-2186\" style=\"width: 368px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.29.37.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.29.37.png?resize=368%2C553&#038;ssl=1\" alt=\"Preliminary Performance Data Visualisation\" width=\"368\" height=\"553\" class=\"size-full wp-image-2186\" srcset=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.29.37.png?w=368&amp;ssl=1 368w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.29.37.png?resize=199%2C300&amp;ssl=1 199w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a><figcaption id=\"caption-attachment-2186\" class=\"wp-caption-text\">Preliminary Performance Data Visualisation<\/figcaption><\/figure>\n<p>You can&#8217;t run all the different Delphi versions of a set of tests from within the same EXE of course, so there are some mechanics behind this which will need to be explained later on.<\/p>\n<p>There is also the facility to compare results between two different test cases in the same project:<\/p>\n<figure id=\"attachment_2187\" aria-describedby=\"caption-attachment-2187\" style=\"width: 457px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.57.52.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.57.52.png?resize=457%2C341&#038;ssl=1\" alt=\"Case Comparison\" width=\"457\" height=\"341\" class=\"size-full wp-image-2187\" srcset=\"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.57.52.png?w=457&amp;ssl=1 457w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.57.52.png?resize=300%2C223&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Screen-Shot-2013-11-22-at-09.57.52.png?resize=402%2C300&amp;ssl=1 402w\" sizes=\"auto, (max-width: 457px) 100vw, 457px\" \/><\/a><figcaption id=\"caption-attachment-2187\" class=\"wp-caption-text\">Case Comparison<\/figcaption><\/figure>\n<p>As might be more noticeable in this example, currently all test results are &#8220;normalised&#8221; against the worst result <em>in each case<\/em>.  i.e. the fact that the bars for the first three WIDE results (blue) in the above test are the exact same length as each other and as the green ANSI bars in the remaining five tests, does not mean that the performance is equal.<\/p>\n<p>What it does tell us is that in the first three cases the WIDE test yielded the worst result but in the remaining cases it was the ANSI test that did least well.<\/p>\n<p>I also have some other comparisons in mind but these may come later.  It&#8217;s still early days yet and I shall blog about how performance cases and visualisations work in <strong>Smoketest<\/strong> in more detail when this work is nearer completion.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span>This post is a peek behind the curtain of the next major update to Smoketest which I hope to have completed shortly: Performance Case visualisations.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[4],"tags":[292,262,51],"class_list":["post-2185","post","type-post","status-publish","format-standard","hentry","category-delphi","tag-delphi","tag-performance-testing","tag-smoketest"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-zf","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/2185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/comments?post=2185"}],"version-history":[{"count":4,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/2185\/revisions"}],"predecessor-version":[{"id":2192,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/2185\/revisions\/2192"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=2185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=2185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=2185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}