ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

配列を使った断面性能関数のテストの追加

前回secBuildBox関数を配列対応にしたが、1x1のテストしかやらずに配列対応のテストを作っていなかったので、

それを実装する。

とりあえず、縦に並べた場合と横に並べた場合をforループで作ってみる。値は前回作った確認用の配列を流用。

test("SecBuildBox", () => {
  const testCases: [string, number, number][] = [
    ["A", 76100.0, 9],
    ["ZY", 24446708.3333333, 7],
    ["ZZ", 19098293.4166667, 7],
    ["m", 597.385, 12],
    ["iY", 400.777073164208, 12],
    ["iZ", 316.836310923171, 12],
    ["IY", 12223354166.6667, 4],
    ["IZ", 7639317366.66666, 4],
  ];
  testCases.forEach(([input, expected, numDigits]) => {
    expect(secBuildBox([[input]], 1000, 800, 19, 25)[0][0]).toBeCloseTo(expected, numDigits);
  });

  const parameterTypesRow: [string][] = [];
  for (let i = 0; i < testCases.length; i++) {
    parameterTypesRow.push([testCases[i][0]]);
  }
  const resultsRow = secBuildBox(parameterTypesRow, 1000, 800, 19, 25);
  for (let i = 0; i < testCases.length; i++) {
    expect(resultsRow[i][0]).toBeCloseTo(testCases[i][1], testCases[i][2]);
  }

  const parameterTypesColumn = [];
  const line = [];
  for (let i = 0; i < testCases.length; i++) {
    line.push(testCases[i][0]);
  }
  parameterTypesColumn.push(line);
  const resultsColumn = secBuildBox(parameterTypesColumn, 1000, 800, 19, 25);
  for (let i = 0; i < testCases.length; i++) {
    expect(resultsColumn[0][i]).toBeCloseTo(testCases[i][1], testCases[i][2]);
  }
});

とうぜんながらこれでは美しくないので、簡略化を試みる。

ChatGPTさんにヒントをもらうと、前回教えてもらったmapを使ってみるのが良いようだ。

書き直した結果がこちら。

const parameterTypesV = testCases.map(([input]) => [input]);
  const resultsV = secBuildBox(parameterTypesV, 1000, 800, 19, 25);
  testCases.forEach(([input, expected, numDigits], i) => {
    expect(resultsV[i][0]).toBeCloseTo(expected, numDigits);
  });

  const parameterTypesH = [testCases.map(([input]) => input)];
  const resultsH = secBuildBox(parameterTypesH, 1000, 800, 19, 25);
  testCases.forEach(([input, expected, numDigits], i) => {
    expect(resultsH[0][i]).toBeCloseTo(expected, numDigits);
  });

ややすっきり。

secBuildBox関数のテストに配列のテストを追加 · st-func/st_func_addin@0add443 · GitHub