{"id":332,"date":"2010-06-16T14:59:12","date_gmt":"2010-06-16T14:59:12","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/2010\/06\/16\/matlab-xunit-new-version-available\/"},"modified":"2016-08-03T08:18:33","modified_gmt":"2016-08-03T12:18:33","slug":"matlab-xunit-new-version-available","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2010\/06\/16\/matlab-xunit-new-version-available\/","title":{"rendered":"MATLAB xUnit: new version available"},"content":{"rendered":"<p>\r\n<em>03-Aug-2016 update: MATLAB xUnit is now in a <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/47302-xunit4\">different location<\/a>. It is currently maintained by <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/profile\/authors\/1380672-paul-sexton\">Paul Sexton<\/a>.<\/em>\r\n<\/p>\r\n\r\n<div xmlns:mwsh=\"https:\/\/www.mathworks.com\/namespace\/mcode\/v1\/syntaxhighlight.dtd\" class=\"content\">\r\n   <p>In February 2009 I posted <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/47302-xunit4\">MATLAB xUnit<\/a>, a unit testing framework, to the MATLAB Central File Exchange. I blogged about it on <a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/02\/03\/mtest-a-unit-test-harness-for-matlab-code\/\">Feb 3, 2009<\/a>, and later I wrote an <a href=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/Automated%20Software%20Testing%20for%20MATLAB%20(2009).pdf\">article<\/a> about it for the <i>IEEE Computing in Science and Engineering<\/i> journal.\r\n   <\/p>\r\n   <p>I just posted an <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/47302-xunit4\">update<\/a> (version 3) to the File Exchange. The update contains some changes that several people have been asking me about, including:\r\n   <\/p>\r\n   <div>\r\n      <ul>\r\n         <li>Running tests stored in packages<\/li>\r\n         <li>A verbose option for runtests (displays name and running time for each individual test case)<\/li>\r\n         <li>Test-case files and functions can be named with \"test\" at the end in addition to the beginning<\/li>\r\n         <li>Larger default floor tolerance in \"almost-equal\" assertion functions (makes relative floating-point comparisons a bit more\r\n            forgiving for two values very close to zero)\r\n         <\/li>\r\n         <li>Fixed handling of message strings in assert functions<\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <p>If you use MATLAB xUnit you might want to grab the <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/47302-xunit4\">new version<\/a>.\r\n   <\/p>\r\n   <p>Here's a comparison of the default output and the new verbose output from <tt>runtests<\/tt> when running MATLAB xUnit's own test suite.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">runtests <span style=\"color: #A020F0\">c:\\Work\\matlab_xunit\\tests<\/span><\/pre><pre style=\"font-style:oblique\">Starting test run with 147 test cases.\r\n....................\r\n....................\r\n....................\r\n....................\r\n....................\r\n....................\r\n....................\r\n.......\r\nPASSED in 4.208 seconds.\r\n<\/pre><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">runtests <span style=\"color: #A020F0\">-verbose<\/span> <span style=\"color: #A020F0\">c:\\Work\\matlab_xunit\\tests<\/span><\/pre><pre style=\"font-style:oblique; word-wrap:normal; white-space:pre; font-size:x-small\">\r\ntests\r\n\r\n   RuntestsTest\r\n      test_optionStringsIgnored ............................. passed in     0.179229 seconds\r\n      test_noTestCasesFound ................................. passed in     0.030545 seconds\r\n      test_packageName ...................................... passed in     0.069988 seconds\r\n      test_twoDirnames ...................................... passed in     0.086871 seconds\r\n      test_oneDirname ....................................... passed in     0.086698 seconds\r\n      test_oneInputArgWithFilter_failing .................... passed in     0.047178 seconds\r\n      test_oneInputArgWithFilter_passing .................... passed in     0.075055 seconds\r\n      test_testNameThenVerbose .............................. passed in     0.171836 seconds\r\n      test_verboseThenTestName .............................. passed in     0.172276 seconds\r\n      test_oneInputArg ...................................... passed in     0.066722 seconds\r\n      test_Verbose .......................................... passed in     0.098546 seconds\r\n      test_noInputArgs ...................................... passed in     0.119439 seconds\r\n   RuntestsTest ............................................. passed in     1.231721 seconds\r\n\r\n\r\n   TestCaseTest\r\n      testTestError ......................................... passed in     0.069214 seconds\r\n      testTestFailure ....................................... passed in     0.072357 seconds\r\n      testFixtureCalls ...................................... passed in     0.060515 seconds\r\n      testPassingTests ...................................... passed in     0.066578 seconds\r\n      testConstructor ....................................... passed in     0.049125 seconds\r\n   TestCaseTest ............................................. passed in     0.337303 seconds\r\n\r\n\r\n   TestCaseWithAddPathTest\r\n      testRunTestOnPath ..................................... passed in     0.054453 seconds\r\n      testPath .............................................. passed in     0.021226 seconds\r\n   TestCaseWithAddPathTest .................................. passed in     0.081960 seconds\r\n\r\n\r\n   TestFuncHandleTests\r\n      testTeardownFcnButNoSetupFcn .......................... passed in     0.045909 seconds\r\n      testFailingTest ....................................... passed in     0.039228 seconds\r\n      testFixtureNoTestData ................................. passed in     0.035223 seconds\r\n      testTestFixtureError .................................. passed in     0.045860 seconds\r\n      testTestFixture ....................................... passed in     0.036676 seconds\r\n      testPassingTests ...................................... passed in     0.033212 seconds\r\n      testCaseLocation ...................................... passed in     0.029351 seconds\r\n      testCaseNames ......................................... passed in     0.028664 seconds\r\n      testOutputs ........................................... passed in     0.030963 seconds\r\n      testSuiteNameAndLocation .............................. passed in     0.030237 seconds\r\n   TestFuncHandleTests ...................................... passed in     0.361527 seconds\r\n\r\n\r\n   TestRunLoggerTest\r\n      testFailingTestCase ................................... passed in     0.061540 seconds\r\n      testTwoPassingTests ................................... passed in     0.074688 seconds\r\n   TestRunLoggerTest ........................................ passed in     0.144972 seconds\r\n\r\n\r\n   TestSuiteTest\r\n      test_fromPwd .......................................... passed in     0.230802 seconds\r\n      test_fromName_with_dirname ............................ passed in     0.108591 seconds\r\n      test_fromName_with_nonmatching_filter_string .......... passed in     0.052603 seconds\r\n      test_fromName_with_filter_string ...................... passed in     0.035147 seconds\r\n      test_fromName_bogus_name .............................. passed in     0.026466 seconds\r\n      test_fromName_subfunctions ............................ passed in     0.032150 seconds\r\n      test_fromName_simpleTest .............................. passed in     0.032005 seconds\r\n      test_fromName_notTestCaseSubclass ..................... passed in     0.026601 seconds\r\n      test_fromName_TestCaseSubclass ........................ passed in     0.042280 seconds\r\n      test_fromTestCaseClassName_badclass ................... passed in     0.037137 seconds\r\n      test_fromTestCaseClassName ............................ passed in     0.077249 seconds\r\n      testNoTestMethods ..................................... passed in     0.060819 seconds\r\n      testCurrentDirectory .................................. passed in     0.037616 seconds\r\n      testClassNameIn ....................................... passed in     0.050326 seconds\r\n   TestSuiteTest ............................................ passed in     0.875839 seconds\r\n\r\n\r\n   ThrowsExceptionTest\r\n      testWrongExceptionTest ................................ passed in     0.071667 seconds\r\n      testNoExceptionTest ................................... passed in     0.072957 seconds\r\n      testPassingTest ....................................... passed in     0.069514 seconds\r\n   ThrowsExceptionTest ...................................... passed in     0.228000 seconds\r\n\r\n\r\n   testAssertEqual\r\n      testAssertEqualHappyCase .............................. passed in     0.001714 seconds\r\n      testAssertEqualWithThreeInputs ........................ passed in     0.001191 seconds\r\n      testAssertEqualHappyCaseString ........................ passed in     0.001191 seconds\r\n      testAssertEqualHappyCaseMatrix ........................ passed in     0.009695 seconds\r\n      testInfAndInf ......................................... passed in     0.000768 seconds\r\n      testMinusInfAndMinusInf ............................... passed in     0.000881 seconds\r\n      testOppositeSignInfs .................................. passed in     0.005263 seconds\r\n      testFiniteAndInf ...................................... passed in     0.002530 seconds\r\n      testFiniteAndNaN ...................................... passed in     0.002448 seconds\r\n      testInfiniteAndNaN .................................... passed in     0.002447 seconds\r\n      testAssertEqualNotEqual ............................... passed in     0.002487 seconds\r\n      testAssertEqualSparsity ............................... passed in     0.003061 seconds\r\n      testAssertEqualNans ................................... passed in     0.000814 seconds\r\n      testAssertEqualClass .................................. passed in     0.003871 seconds\r\n   testAssertEqual .......................................... passed in     0.046598 seconds\r\n\r\n\r\n   testAssertExceptionThrown\r\n      test_happyCase ........................................ passed in     0.001343 seconds\r\n      test_wrongException ................................... passed in     0.002399 seconds\r\n      test_noException ...................................... passed in     0.002300 seconds\r\n   testAssertExceptionThrown ................................ passed in     0.007276 seconds\r\n\r\n\r\n   testAssertFalse\r\n      testAssertFalseHappyCase .............................. passed in     0.001098 seconds\r\n      testAssertFalseHappyCaseWithTwoArgs ................... passed in     0.001255 seconds\r\n      testAssertFalseFailed ................................. passed in     0.001569 seconds\r\n      testAssertFalseNonscalar .............................. passed in     0.001777 seconds\r\n      testAssertFalseNonlogical ............................. passed in     0.001815 seconds\r\n   testAssertFalse .......................................... passed in     0.009098 seconds\r\n\r\n\r\n   testAssertTrue\r\n      testAssertTrueHappyCase ............................... passed in     0.001224 seconds\r\n      testAssertTrueHappyCaseWithTwoArgs .................... passed in     0.001010 seconds\r\n      testAssertTrueFailed .................................. passed in     0.001635 seconds\r\n      testAssertTrueNonscalar ............................... passed in     0.001855 seconds\r\n      testAssertTrueNonlogical .............................. passed in     0.001821 seconds\r\n   testAssertTrue ........................................... passed in     0.009276 seconds\r\n\r\n\r\n   testContainsRegexp\r\n      testOneStringContains ................................. passed in     0.000726 seconds\r\n      testOneStringDoesntContain ............................ passed in     0.000651 seconds\r\n      testCellArray ......................................... passed in     0.002125 seconds\r\n   testContainsRegexp ....................................... passed in     0.004720 seconds\r\n\r\n\r\n   testIsSetUpString\r\n      testOneStringIs ....................................... passed in     0.000966 seconds\r\n      testOneStringIsNot .................................... passed in     0.000711 seconds\r\n      testCellArray ......................................... passed in     0.000957 seconds\r\n   testIsSetUpString ........................................ passed in     0.003831 seconds\r\n\r\n\r\n   testIsTearDownString\r\n      testOneStringIs ....................................... passed in     0.000860 seconds\r\n      testOneStringIsNot .................................... passed in     0.000734 seconds\r\n      testCellArray ......................................... passed in     0.000971 seconds\r\n   testIsTearDownString ..................................... passed in     0.003920 seconds\r\n\r\n\r\n   testIsTestCaseSubclass\r\n      testTestCase .......................................... passed in     0.001117 seconds\r\n      testSubclass .......................................... passed in     0.001433 seconds\r\n      testNotASubclass ...................................... passed in     0.000704 seconds\r\n   testIsTestCaseSubclass ................................... passed in     0.004479 seconds\r\n\r\n\r\n   testIsTestString\r\n      testOneStringIs ....................................... passed in     0.001043 seconds\r\n      testOneStringIsNot .................................... passed in     0.000722 seconds\r\n      testCellArray ......................................... passed in     0.001105 seconds\r\n   testIsTestString ......................................... passed in     0.004039 seconds\r\n\r\n\r\n   testRuntestsWithDirectoryName\r\n      testDirName ........................................... passed in     0.186239 seconds\r\n   testRuntestsWithDirectoryName ............................ passed in     0.189451 seconds\r\n\r\n\r\n   test_TestSuiteInDir\r\n      test_constructor ...................................... passed in     0.021166 seconds\r\n      test_gatherTestCases .................................. passed in     0.078672 seconds\r\n   test_TestSuiteInDir ...................................... passed in     0.107688 seconds\r\n\r\n\r\n   test_arrayToString\r\n      test_smallInput ....................................... passed in     0.004122 seconds\r\n      test_largeInput ....................................... passed in     0.012194 seconds\r\n      test_emptyInput ....................................... passed in     0.002702 seconds\r\n   test_arrayToString ....................................... passed in     0.024989 seconds\r\n\r\n\r\n   test_assertElementsAlmostEqual\r\n      test_happyCase ........................................ passed in     0.012472 seconds\r\n      test_failedAssertion .................................. passed in     0.005771 seconds\r\n      test_nonFloatInputs ................................... passed in     0.004278 seconds\r\n      test_sizeMismatch ..................................... passed in     0.004909 seconds\r\n      test_finiteAndInfinite ................................ passed in     0.004088 seconds\r\n      test_infiniteAndInfinite .............................. passed in     0.002276 seconds\r\n      test_finiteAndNaN ..................................... passed in     0.004087 seconds\r\n      test_nanAndNaN ........................................ passed in     0.001614 seconds\r\n      test_plusMinusInfinity ................................ passed in     0.003298 seconds\r\n      test_infiniteAndNaN ................................... passed in     0.003342 seconds\r\n   test_assertElementsAlmostEqual ........................... passed in     0.048904 seconds\r\n\r\n\r\n   test_assertFilesEqual\r\n      test_equal ............................................ passed in     0.011540 seconds\r\n      test_differentSize .................................... passed in     0.004074 seconds\r\n      test_sameSizeButDifferent ............................. passed in     0.010435 seconds\r\n      test_oneFileEmpty ..................................... passed in     0.003349 seconds\r\n      test_bothFilesEmpty ................................... passed in     0.002264 seconds\r\n      test_cannotReadFirstFile .............................. passed in     0.001903 seconds\r\n      test_cannotReadSecondFile ............................. passed in     0.002844 seconds\r\n   test_assertFilesEqual .................................... passed in     0.038591 seconds\r\n\r\n\r\n   test_assertVectorsAlmostEqual\r\n      test_happyCase ........................................ passed in     0.011034 seconds\r\n      test_failedAssertion .................................. passed in     0.004597 seconds\r\n      test_failedAssertionWithCustomMessage ................. passed in     0.004030 seconds\r\n      test_nonFloatInputs ................................... passed in     0.002827 seconds\r\n      test_sizeMismatch ..................................... passed in     0.002661 seconds\r\n      test_finiteAndInfinite ................................ passed in     0.003378 seconds\r\n      test_infiniteAndInfinite .............................. passed in     0.003427 seconds\r\n      test_finiteAndNaN ..................................... passed in     0.003343 seconds\r\n      test_NanAndNan ........................................ passed in     0.003311 seconds\r\n      test_oppositeSignInfs ................................. passed in     0.003317 seconds\r\n   test_assertVectorsAlmostEqual ............................ passed in     0.044592 seconds\r\n\r\n\r\n   test_compareFloats\r\n      test_elementwiseRelativeTolerance ..................... passed in     0.004797 seconds\r\n      test_elementwiseAbsoluteTolerance ..................... passed in     0.005753 seconds\r\n      test_vectorRelativeTolerance .......................... passed in     0.002094 seconds\r\n      test_vectorAbsoluteTolerance .......................... passed in     0.001898 seconds\r\n      test_NaNs ............................................. passed in     0.004481 seconds\r\n      test_Infs ............................................. passed in     0.004494 seconds\r\n      test_complexInput ..................................... passed in     0.006239 seconds\r\n      test_comparisonTypeSpecified .......................... passed in     0.002089 seconds\r\n   test_compareFloats ....................................... passed in     0.034187 seconds\r\n\r\n\r\n   test_comparisonMessage\r\n      test_happyCase ........................................ passed in     0.003328 seconds\r\n   test_comparisonMessage ................................... passed in     0.004423 seconds\r\n\r\n\r\n   test_packageName\r\n      test_happyCase ........................................ passed in     0.038309 seconds\r\n      test_badPackageName ................................... passed in     0.001387 seconds\r\n   test_packageName ......................................... passed in     0.040861 seconds\r\n\r\n\r\n   test_parseFloatAssertInputs\r\n      test_tooFewInputs ..................................... passed in     0.001230 seconds\r\n      test_tooManyInputs .................................... passed in     0.001139 seconds\r\n      test_twoInputs ........................................ passed in     0.001647 seconds\r\n      test_threeInputs ...................................... passed in     0.002824 seconds\r\n      test_fourInputs ....................................... passed in     0.006563 seconds\r\n      test_fiveInputs ....................................... passed in     0.004510 seconds\r\n      test_sixInputs ........................................ passed in     0.003339 seconds\r\n      test_twoSingleInputs .................................. passed in     0.002287 seconds\r\n      test_twoSingleAndDoubleInputs ......................... passed in     0.002257 seconds\r\n   test_parseFloatAssertInputs .............................. passed in     0.028289 seconds\r\n\r\n\r\n   test_stringToCellArray\r\n      test_happyCase ........................................ passed in     0.000890 seconds\r\n      test_emptyInput ....................................... passed in     0.000639 seconds\r\n      test_spacesInFront .................................... passed in     0.000856 seconds\r\n      test_spacesAtEnd ...................................... passed in     0.000833 seconds\r\n   test_stringToCellArray ................................... passed in     0.004602 seconds\r\n\r\ntests ....................................................... passed in     4.180996 seconds\r\n\r\n<\/pre><script language=\"JavaScript\">\r\n<!--\r\n\r\n    function grabCode_7d36d9777ed94af58ce9e16b14bc5179() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='7d36d9777ed94af58ce9e16b14bc5179 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 7d36d9777ed94af58ce9e16b14bc5179';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        author = 'Steve Eddins';\r\n        copyright = 'Copyright 2010 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add author and copyright lines at the bottom if specified.\r\n        if ((author.length > 0) || (copyright.length > 0)) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (author.length > 0) {\r\n                d.writeln('% _' + author + '_');\r\n            }\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n      \r\n      d.title = title + ' (MATLAB code)';\r\n      d.close();\r\n      }   \r\n      \r\n-->\r\n<\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_7d36d9777ed94af58ce9e16b14bc5179()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n            the MATLAB code \r\n            <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; 7.10<br><\/p>\r\n<\/div>\r\n<!--\r\n7d36d9777ed94af58ce9e16b14bc5179 ##### SOURCE BEGIN #####\r\n%%\r\n% In February 2009 I posted <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/22846-matlab-xunit-test-framework \r\n% MATLAB xUnit>, a unit testing framework, to the\r\n% MATLAB Central File Exchange. I blogged about it on \r\n% <https:\/\/blogs.mathworks.com\/steve\/2009\/02\/03\/mtest-a-unit-test-harness-for-matlab-code\/ \r\n% Feb 3, 2009>, and later I\r\n% wrote an \r\n% <https:\/\/blogs.mathworks.com\/images\/steve\/2010\/Automated%20Software%20Testing%20for%20MATLAB%20(2009).pdf \r\n% article> about it for the _IEEE Computing in Science and Engineering_\r\n% journal.\r\n%\r\n% I just posted an \r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/22846-matlab-xunit-test-framework \r\n% update> (version 3) to the File Exchange. The update contains\r\n% some changes that several people have been asking me about, including:\r\n%\r\n% * Running tests stored in packages\r\n% * A verbose option for runtests (displays name and running time for each\r\n% individual test case) \r\n% * Test-case files and functions can be named with \"test\" at the end in\r\n% addition to the beginning\r\n% * Larger default floor tolerance in \"almost-equal\" assertion functions (makes\r\n% relative floating-point comparisons a bit more forgiving for two values very\r\n% close to zero) \r\n% * Fixed handling of message strings in assert functions\r\n%\r\n% If you use MATLAB xUnit you might want to grab the \r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/22846-matlab-xunit-test-framework \r\n% new version>.\r\n%\r\n% Here's a comparison of the default output and the new verbose output from |runtests| when\r\n% running MATLAB xUnit's own test suite.\r\n\r\nruntests c:\\Work\\matlab_xunit\\tests\r\n\r\n%%\r\n\r\nruntests -verbose c:\\Work\\matlab_xunit\\tests\r\n\r\n##### SOURCE END ##### 7d36d9777ed94af58ce9e16b14bc5179\r\n-->","protected":false},"excerpt":{"rendered":"<p>\r\n03-Aug-2016 update: MATLAB xUnit is now in a different location. It is currently maintained by Paul Sexton.\r\n\r\n\r\n\r\n   In February 2009 I posted MATLAB xUnit, a unit testing framework, to the MATLAB... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2010\/06\/16\/matlab-xunit-new-version-available\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/332"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/comments?post=332"}],"version-history":[{"count":3,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/332\/revisions"}],"predecessor-version":[{"id":2086,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/332\/revisions\/2086"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}