2016-08-02 34 views
0

我正在開發一個模塊,該模塊將在嵌入式ARM芯片上運行,以運行用C語言編寫的姿態控制器。我們有一個MATLAB仿真,其中包含一系列低級函數我希望能夠對MATLAB程序生成的數據進行單元測試。將測試數據解析爲C程序

每個函數都相當複雜,我想計算Matlab輸出和C輸出之間用於驗證目的的錯誤。每個功能在兩個實現之間具有相同的輸入和輸出,因此它們應該匹配(達到允許的容差)。

是否有任何可能有用的良好現有文件格式?測試數據的類型爲:

<Test Input 1> <Test Input 2> <Test input 3> <Expected Output 1> <Expected output 2> 

其中輸入和輸出是任意的單浮點,數組或矩陣。我考慮過XML,因爲有一些很好的解析器,但是關於我所知道的全部內容。

任何建議或指示?

回答

0

由於每個函數都有相同的輸入,所以沒有理由不以最簡單的形式創建輸入文件 - 只需數字!

你知道你想要閱讀的數字完全相同的類型和數量,因此,使用fscanf

該文件可能看起來就像閱讀:

12.3 100 200.3 

1 2 3 
4 5 6 
7 8 9 

第一行任意浮點數,你將每一個讀入一個變量。

接下來的9是一個矩陣,讓你在一個循環中成3x3矩陣閱讀,等等

0

有一個在你的問題一個位這是一種眉毛提升器: 「輸入輸出是任意單浮點,數組或矩陣「。這會增加一些複雜性,但也許沒有辦法。

.Xml文件格式是一個不錯的選擇,因爲它給了你很大的靈活性,你可以在編輯器中導入/導出你的測試,以幫助你理解它。

但也許一個更好的選擇是.JSON文件格式。它提供了與xml文件相同的靈活性,但重量並不重。有些開源庫可以在C中與它們一起工作,我相信matlab也可以以這種格式導出數據。

3

一個簡單的方法是使用CSV文件格式:

  1. 很容易從C處理see here
  2. 使用OpenOffice/Excel更高只需更改文件後綴爲* .CSV

查看更多here關於CSV文件

1

這聽起來像你想從C運行這些單元測試?你有沒有考慮在MATLAB中運行它們?如果是這樣,那麼你將能夠利用MATLAB Unit Test Frameworkparameterized testing來編碼實際值和期望值(在你的MATLAB測試中使用「sequential」ParameterCombination屬性。這將要求你爲你的C代碼創建MEX包裝,以便你可以調用他們從MATLAB,但除此之外,額外的步驟,這可能是相當無縫的同時,讓你看着使用MATLAB Coder

的MATLAB單元測試會是這個樣子:?

classdef Times2Test < matlab.unittest.TestCase 

    properties(TestParameter) 
     input = {1,2,3}; 
     expectedResult = {2,4,6}; 
    end 

    methods(Test, ParameterCombination='sequential') 
     function testMATLABSimulation(testCase, input, expectedResult) 
      actualResult = times2(input); 
      testCase.verifyEqual(actualResult, expectedResult, ... 
       'RelTol', 1e-6); 
     end 
     function testCAlgorithm(testCase, input, expectedResult) 
      % Must expose to MATLAB by compiling C code to Mex 
      actualResult = times2Mex(input); 
      testCase.verifyEqual(actualResult, expectedResult, ... 
       'RelTol', 1e-6); 
     end 
    end 
end