{"id":196246,"date":"2025-02-20T15:37:39","date_gmt":"2025-02-20T15:37:39","guid":{"rendered":"https:\/\/innovationspace.ansys.com\/knowledge\/?post_type=topic&#038;p=196246"},"modified":"2025-04-04T16:53:22","modified_gmt":"2025-04-04T16:53:22","slug":"test-harness-a-new-approach-to-testing-in-scade-one","status":"publish","type":"topic","link":"https:\/\/innovationspace.ansys.com\/knowledge\/forums\/topic\/test-harness-a-new-approach-to-testing-in-scade-one\/","title":{"rendered":"Test harness \u2013 A new approach to testing in Scade One"},"content":{"rendered":"<h3  id=\"INTRODUCTION\">Introduction<\/h3>\n<p>As we release Ansys Scade One 2025 R1, we would like to tell you about testing in Scade One, which is one of the highlights of this version. In this blog, we&#8217;ll explore the concept of <em>test harness<\/em>, where tests are models leveraging the full power of the Swan language enabling significantly more efficient and streamlined testing workflow.<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-banner-1.jpg\" style=\"max-height: 700px !important\" \/><br \/>\n    <em>Photo credit: Panumas Nikhomkhai @ <a href=\"https:\/\/www.pexels.com\/photo\/box-server-illuminated-on-blue-17489160\/\">Pexels<\/a><\/em>\n<\/p>\n<h3  id=\"TESTING-SIMULATION-WORKFLOWS-IN-SCADE-ONE\">Testing &amp; Simulation Workflows in Scade One<\/h3>\n<p>Before we talk about the concept of test harness, let&#8217;s take a step back and consider the various ways that you can execute a model in Scade One.<\/p>\n<h5  id=\"RUN\">Run<\/h5>\n<p>In Scade One, you can execute a scenario and observe the traces of the model inputs and outputs as plots, as you would in any simulation tool. A rich trace viewer allows to stack multiple plots and supports the various types defined in Swan like integers, floats, Booleans or enums.<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-run-1.png\" style=\"max-height: 600px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<h5  id=\"DEBUG\">Debug<\/h5>\n<p>Executing a model in debug mode gives more possibilities:<\/p>\n<ul>\n<li>The model can be executed step-by-step or in continuous mode<\/li>\n<li>All local flows inside the model are observable, as well as the active states and transitions. <\/li>\n<\/ul>\n<p>Scade One 2025 R1 brings many improvements to debug capabilities, focused on navigation in the model during debug and more observability of the model, including for instance the iterations of a forward block:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-debug-forward-1.gif\" style=\"max-height: 450px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<h5  id=\"GRAPHICAL-SIMULATION-PANELS\">Graphical simulation panels<\/h5>\n<p>SCADE Rapid Prototyper is bundled with Scade One Studio. It allows to create graphical panels to set the inputs and visualize the outputs of a simulation, by assembling predefined and custom widgets. Graphical panels can be used in run and debug mode, but also in standalone executables that can be used by stakeholders that are not Scade One users to validate the behavior of the software.<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-rapid-prototyper.gif\" style=\"max-height: 600px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<h5  id=\"EXPORT-FOR-SYSTEM-LEVEL-SIMULATION\">Export for system-level simulation<\/h5>\n<p>Another way to simulate a Swan model is to embed it inside a system-level simulation, including models of the physical system and its environment as well as other software components. This can be achieved by exporting the model as a <a href=\"https:\/\/fmi-standard.org\/\">Functional Mock-up Unit<\/a> (FMU), which is a standard for exchange of simulation models. This is also a new feature in Scade One 2025 R1.<\/p>\n<h5  id=\"TEST\">Test<\/h5>\n<p>A test case not only defines a scenario, but also checks that the model complies with the excepted behavior, typically defined in high-level requirements. Executing a test procedure consists in executing each test case and checking if it is passed or failed. <\/p>\n<p>In Scade One 2025 R1, tests can be executed on host and generate test results (as a JSON file), that can be read using a dedicated Python library, for instance to generate a custom report. <\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-workflow-1.png\" style=\"max-height: 600px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<h3  id=\"WHAT-IS-A-TEST-HARNESS\">What is a test harness?<\/h3>\n<p>The concept of test harness is a new approach in Scade One for scenarios and test cases. A test harness describes stimuli and checks using a Swan model:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-harness-1.png\" style=\"max-height: 500px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Test harnesses are used for defining scenarios for run and debug modes, as well as for defining test cases. The test harness contains one (or more) operator under test (highlighted in purple) and defines its inputs using a library of pre-defined stimuli (like a ramp, a sine wave, etc.), using data read from a file or user-defined stimuli, using any construct in the Swan language. Similarly, the checks for a test case can be defined using pre-defined checks, by comparing with a file or using a Swan model. <\/p>\n<p>A test harness can also include specific constructs, that can only be used inside a test harness: <\/p>\n<table>\n<tr>\n<td style=\"text-align: center\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-construct-current-cycle-1.png\" style=\"max-height: 45px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td>\n<p>Read the current cycle index<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-construct-stop-condition-1.png\" style=\"max-height: 48px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td>\n<p>End the simulation\/test when the condition is true<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-construct-data-source-1.png\" style=\"max-height: 92px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td>\n<p><em>Data source<\/em>: Read data from a file<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-construct-assert-1.png\" style=\"max-height: 58px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td>\n<p><em>Assert<\/em>: Checks that the Boolean input is always true<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-construct-oracle-1.png\" style=\"max-height: 87px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td>\n<p><em>Oracle<\/em>: Checks that the inputs are always equal to data from a file<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h3  id=\"USING-TEST-HARNESSES-FOR-TESTING\">Using test harnesses for testing <\/h3>\n<p>To illustrate the benefits of this new approach and the features of Scade One 2025 R1, we will take a look at a few examples of test harnesses, using operators from the Swan standard library.<\/p>\n<h4  id=\"CHECKING-PROPERTIES\">Checking properties<\/h4>\n<p>The simplest test case consists in setting an input value and checking that the output is equal to the expected one. We are here considering the <code>Inv3x3<\/code> operator, which inverts a square matrix of size 3:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-inv1-1.png\" style=\"max-height: 271px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Since we can use any construct of the Swan language in a test harness, we are not restricted to checking that the output is an expected value. We can also check a property of the output. For instance, we can check that when a matrix cannot be inverted, the error output is true and that the output matrix is equal to the input one:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-inv2-1.png\" style=\"max-height: 130px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Here is another example considering the <code>NormVector<\/code> operator, which computes a normalized vector of same direction and length\/norm equal to 1. We are checking here that the norm of the output is 1:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-norm-1.png\" style=\"max-height: 104px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<h4  id=\"CHECKING-EQUIVALENCE\">Checking equivalence<\/h4>\n<p>Now let us consider the <code>Sine<\/code> operator from the <code>Math::Trigo::Cordic<\/code> module (with the alias <code>Trigo<\/code> below). This module implements trigonometric functions using the <a href=\"https:\/\/en.wikipedia.org\/wiki\/CORDIC\">CORDIC<\/a> algorithm. To test our implementation, we will compare it with the C standard library implementation (from the <code>Math::Common::StdC<\/code> module, with alias <code>TrigoC<\/code>). <\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-sine-1.png\" style=\"max-height: 241px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>This example shows that the test harness can contain other operators than the operator under test (remember that the operator under test is highlighted in purple). We are also using operators from the standard library to create the inputs (here a ramp) and to check the outputs (here a comparison on floats with absolute tolerance). This standard library simplifies the creation of a test harness.<\/p>\n<h4  id=\"USING-SIMULATION-DATA-FILES\">Using simulation data files<\/h4>\n<p>Another way to build a test harness is to read data from a <em>simulation data<\/em> file. Such a file contains the values of flows, as a list of values, and can be used as input for the operator under test (with a data source) or as a reference for checks (with an oracle). <\/p>\n<p>For instance, let us consider the <code>Implies<\/code> operator. The truth table of the operator defines the expected values for any input:<\/p>\n<table width=\"250\">\n<tr>\n<td style=\"text-align: center\">\n<p>$p$<\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p>$q$<\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p>$p \\Rightarrow q$<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>false<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>false<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p><code>false<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">\n<p><code>false<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>false<\/code><\/p>\n<\/td>\n<td style=\"text-align: center\">\n<p><code>true<\/code><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p>We can easily create a simulation data file for the inputs, using the dedicated signal editor:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-implies-input-1.png\" style=\"max-height: 113px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>And similarly, another file for the expected output:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-implies-output-1.png\" style=\"max-height: 97px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Finally, we create a test harness using a data source and an oracle, and connect them to an instance of the <code>Implies<\/code> operator:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-implies-harness-1.png\" style=\"max-height: 144px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>It is also possible to use an oracle block but not check the inputs at all cycles. This is done by using a special <em>Don&#8217;t care<\/em> value (DC) for the flow in the simulation data file. If the expected value is DC, then no check is performed:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-delay-output-1.png\" style=\"max-height: 138px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>In this example using the <code>Delay<\/code> operator (equivalent to the <code>fby<\/code> operator in Scade 6), we will not check anything during the first five cycles, and then check that the output flow is equal to 1, then 2, etc.<\/p>\n<h4  id=\"USING-PYTHON-TO-GENERATE-EXPECTED-DATA\">Using Python to generate expected data<\/h4>\n<p>Apart from the signal editor, you can also use a dedicated Python library to generate simulation data. Let us get back to the <code>Sine<\/code> example to illustrate the usage of this Python library. We will now generate the expected values (100 values between 0 and 2\u03c0) using a small Python script:<\/p>\n<p><!-- HTML generated using hilite.me --><\/p>\n<div style=\"background: #ffffff;overflow:auto;width:auto;background:none;border:none;padding:.2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span><\/span>expf <span style=\"font-weight: bold\">=<\/span> sd<span style=\"font-weight: bold\">.<\/span>create_file(<span style=\"color: #bb8844\">&#039;..\/resources\/TestSinExpected.sd&#039;<\/span>)\r\nv <span style=\"font-weight: bold\">=<\/span> expf<span style=\"font-weight: bold\">.<\/span>add_element(<span style=\"color: #bb8844\">&#039;v&#039;<\/span>, sd<span style=\"font-weight: bold\">.<\/span>Float32)\r\nvs <span style=\"font-weight: bold\">=<\/span> [math<span style=\"font-weight: bold\">.<\/span>sin(i<span style=\"font-weight: bold\">\/<\/span><span style=\"color: #009999\">100<\/span> <span style=\"font-weight: bold\">*<\/span> math<span style=\"font-weight: bold\">.<\/span>pi <span style=\"font-weight: bold\">*<\/span> <span style=\"color: #009999\">2<\/span>) <span style=\"font-weight: bold\">for<\/span> i <span style=\"font-weight: bold\">in<\/span> <span style=\"color: #999999\">range<\/span>(<span style=\"color: #009999\">100<\/span>)]\r\nv<span style=\"font-weight: bold\">.<\/span>append_values(vs)\r\nexpf<span style=\"font-weight: bold\">.<\/span>close()\r\n<\/pre>\n<\/div>\n<p>You could also take advantage of the Python ecosystem (with libraries like <a href=\"https:\/\/numpy.org\/\">NumPy<\/a> or <a href=\"https:\/\/scipy.org\/\">SciPy<\/a>) to generate advanced stimuli or import data stored in another format (e.g. read from a CSV file).<\/p>\n<h4  id=\"IMPORTING-SCADE-TEST-TEST-PROCEDURES\">Importing SCADE Test test procedures<\/h4>\n<p><a href=\"https:\/\/www.ansys.com\/products\/embedded-software\/ansys-scade-test\">Ansys SCADE Test<\/a> is the testing environment used with <a href=\"https:\/\/www.ansys.com\/products\/embedded-software\/ansys-scade-suite\">Ansys SCADE Suite<\/a>. Migration from SCADE Suite to Scade One is an important concern for users. That&#8217;s why importing models is possible since the first version. In Scade One 2025 R1, it is now also possible to import test records (in the SSS format) into the corresponding simulation data file. This allows reuse of existing tests.<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-test-import-workflow-1.png\" style=\"max-height: 600px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Note that only the simulation data files are automatically generated for now. Some steps (like the creation of the test harness) are manual, and will be automated in a future release.<\/p>\n<h3  id=\"WHY-USE-TEST-HARNESSES\">Why use test harnesses?<\/h3>\n<p>To conclude this blog, let us summarize the benefits of the test harness approach:<\/p>\n<ul>\n<li>It offers a real expressive language to define the stimuli and checks in a test case. This makes the testing process more efficient and allows for faster bug detection.<\/li>\n<li>Using a more structured definition of test cases makes reviewing and updating them easier. <\/li>\n<li>The editing of test cases benefits from all the features in the <a href=\"https:\/\/innovationspace.ansys.com\/knowledge\/forums\/topic\/scade-one-bridging-the-gap-between-model-based-design-and-traditional-programming\/\">Swan language<\/a> and the <a href=\"https:\/\/innovationspace.ansys.com\/knowledge\/forums\/topic\/scade-one-a-visual-coding-experience\/\">modeler<\/a> (like auto-layout, smart services).<\/li>\n<li>The traditional SCADE Test approach is still possible using simulation data. An automated migration path from SCADE Test into Scade One is available.<\/li>\n<\/ul>\n<h3  id=\"WANT-TO-LEARN-MORE\">Want to learn more?<\/h3>\n<p>You can download the examples from this blog <a href=\"https:\/\/ansys13.ansys.com\/KnowledgeArticles\/SCADE\/BlogTestHarness.zip\">here<\/a>.<\/p>\n<p>If you are a SCADE user, access Scade One Essential with your existing licenses on the <a href=\"https:\/\/download.ansys.com\">Ansys Download Portal<\/a>.<\/p>\n<p>You may also schedule a live demo of Scade One using this <a href=\"https:\/\/www.ansys.com\/products\/embedded-software\/request-assessment-scade-one\">link<\/a>.<\/p>\n<h3  id=\"ABOUT-THE-AUTHOR\">About the author<\/h3>\n<table style=\"border: none !important\">\n<tr>\n<td style=\"border: none !important\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2025\/02\/scade-028-author-1.png\" style=\"max-height: 150px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td style=\"border: none !important\">\n<p><strong>C\u00e9dric Pasteur<\/strong> (<a href=\"https:\/\/www.linkedin.com\/in\/c%C3%A9dric-pasteur-9b430b25\/\">LinkedIn<\/a>) is a Senior Product Manager at Ansys. He has been working on Scade One, Ansys&#8217; latest-generation model-based embedded software development product, since its inception. He specializes in programming language theory and its application to safe embedded systems.<\/p>\n<\/td>\n<\/tr>\n<\/table>\n","protected":false},"template":"","class_list":["post-196246","topic","type-topic","status-publish","hentry","topic-tag-scade-one","topic-tag-test-harness","topic-tag-testing","topic-tag-vv"],"aioseo_notices":[],"acf":[],"custom_fields":[{"0":{"_edit_lock":["1743785571:1769"],"_edit_last":["1769"],"_aioseo_title":[null],"_aioseo_description":[null],"_aioseo_keywords":["a:0:{}"],"_aioseo_og_title":[""],"_aioseo_og_description":[""],"_aioseo_og_article_section":[""],"_aioseo_og_article_tags":["a:0:{}"],"_aioseo_twitter_title":[""],"_aioseo_twitter_description":[""],"filter_by_optics_product":["Lumerical"],"_filter_by_optics_product":["field_64fb192ba3121"],"application_name":[""],"_application_name":["field_64a80903c8e15"],"family":[""],"_family":["field_64a809229a857"],"siebel_km_number":[""],"_siebel_km_number":["field_63ecbffce60db"],"salesforce_km_number":[""],"_salesforce_km_number":["field_63ecc018e60dc"],"km_published_date":[""],"_km_published_date":["field_64c77704499dd"],"product_version":[""],"_product_version":["field_64c776cb4fd2e"],"_bbp_forum_id":["27825"],"_bbp_topic_id":["196496"],"_bbp_author_ip":["20.82.84.9"],"_bbp_last_reply_id":["0"],"_bbp_last_active_id":["196247"],"_bbp_last_active_time":["2025-02-20 15:37:39"],"_bbp_reply_count":["0"],"_bbp_reply_count_hidden":["0"],"_bbp_voice_count":["0"],"_btv_view_count":["2334"],"_bbp_likes_count":["5"]},"test":"solution"}],"_links":{"self":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/196246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics"}],"about":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":6,"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/196246\/revisions"}],"predecessor-version":[{"id":196496,"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/196246\/revisions\/196496"}],"wp:attachment":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/media?parent=196246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}