前回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