-- [Module]의 유닛 테스트:수학/샌드박스]]]Talk 페이지를 클릭하여 테스트를 실행합니다. 현지의 모듈명 = '산술/샌드박스' --이 값을 변수에 할당하면 나중에 #sublic 스테이트먼트를 생성할 때 사용됩니다. 현지의 음. = 요구하다('모듈:' .. 모듈명) 현지의 스크리분토 유닛 = 요구하다('모듈:스크리분토 유닛') 현지의 스위트 = 스크리분토 유닛:신규() ------------------------------------------------------------------------------- -- 도우미 기능 ------------------------------------------------------------------------------- 기능. 스위트.에러(메시지) 돌아가다 음.스트링.포맷('< strong class = "error"> 포맷 오류: %s </strong>', 메시지) 끝. 기능. 스위트.getLuaResult(기능명, args) args = args 또는 {} 현지의 결과 = 음.['_' .. 기능명](개봉하다(args)) 돌아가다 결과 끝. 기능. 스위트:assertLuaEquals(기대됩니다, 기능명, args) args = args 또는 {} 자신:assert Equals(동일)(기대됩니다, 자신.getLuaResult(기능명, args)) 끝. 기능. 스위트.build Invocation(빌드 호출)(기능명, args) args = args 또는 {} 현지의 argsClone = 음.클론(args) -- args 테이블과 동등한 모듈 호출을 작성합니다.[Module]에서 가져온 것:[Unst] ] 。 -- 첫 번째 arg에 번호가 매겨집니다. 현지의 리트 = '{{#param:}' .. 모듈명 .. ' ' .. 기능명 위해서 k, v 에 아이페어(argsClone) 하다 v = 스트링(v) 한다면 string.find(v, '=', 1, 진실의) 그리고나서 -- 1=foo=bar와 같이 이름 있는 arg로 해야 합니다. 브레이크. 끝. 리트 = 리트 .. ' ' .. v argsClone[k] = 제로 끝. 위해서 k, v 에 쌍들(argsClone) 하다 k = 스트링(k) v = 스트링(v) 리트 = 리트 .. ' ' .. k .. '=' .. v 끝. 돌아가다 리트 .. '}}' 끝. 기능. 스위트:getInvokeResult(getInvoke결과)(기능명, args, convert Number(번호 변환)) -- convertNumber가 false가 아닌 한 Lua에 재입력할 때 가능한 경우 숫자로 변환됩니다. args = args 또는 {} 현지의 호출 = 자신.build Invocation(빌드 호출)(기능명, args) 현지의 결과 = 자신.틀:전처리(호출) 한다면 convert Number(번호 변환) ~= 거짓의 그리고. 톤수(결과) 그리고나서 돌아가다 톤수(결과) 또 다른 돌아가다 결과 끝. 끝. 기능. 스위트:assertInvokeEquals(동일)(기대됩니다, 기능명, args, convert Number(번호 변환)) args = args 또는 {} 현지의 호출 결과 = 자신:getInvokeResult(getInvoke결과)(기능명, args, convert Number(번호 변환)) 자신:assert Equals(동일)(기대됩니다, 호출 결과) 끝. 기능. 스위트:assert Lua AndInvoke True(참)(TrueFunc, 기능명, args, convert Number(번호 변환)) args = args 또는 {} 현지의 호출 결과 = 자신:getInvokeResult(getInvoke결과)(기능명, args, convert Number(번호 변환)) 현지의 결과 = 자신.getLuaResult(기능명, args) 자신:assert True(참)(TrueFunc(호출 결과)) 자신:assert True(참)(TrueFunc(결과)) 끝. 기능. 스위트:assert Lua And동등하게 호출하다(기능명, 테스트 테이블, convert Number(번호 변환)) 현지의 기대됩니다 = 테스트 테이블[1] 현지의 args = 테스트 테이블[2] 또는 {} 자신:assertLuaEquals(기대됩니다, 기능명, args) 자신:assertInvokeEquals(동일)(기대됩니다, 기능명, args, convert Number(번호 변환)) 끝. 기능. 스위트:assert Lua And동일한 수치의 호출(기능명, 테스트 테이블, convert Number(번호 변환)) 위해서 i, 테스트 테이블 에 아이페어(테스트 테이블) 하다 자신:assert Lua And동등하게 호출하다(기능명, 테스트 테이블, convert Number(번호 변환)) 끝. 끝. ------------------------------------------------------------------------------- -- 랜덤 테스트 ------------------------------------------------------------------------------- 기능. 스위트:test_filename(테스트)_interface(실행)() 자신:assert Lua AndInvoke True(참)(기능. (n) 돌아가다 n >= 0 그리고. n < > 1 끝., '실패') 자신:assert Lua AndInvoke True(참)(기능. (n) 돌아가다 n == 1 또는 n == 2 끝., '실패', {2}) 자신:assert Lua AndInvoke True(참)(기능. (n) 돌아가다 n >= 1 그리고. n <=> 10 그리고. math.floor(n) == n 끝., '실패', {10}) 자신:assert Lua AndInvoke True(참)(기능. (n) 돌아가다 n >= 10 그리고. n <=> 20 그리고. math.floor(n) == n 끝., '실패', {10, 20}) 끝. ------------------------------------------------------------------------------- -- 테스트 최대값 ------------------------------------------------------------------------------- 기능. 스위트:test_max() 현지의 테스트 = { {9, {5, 6, 9}}, {-5, {-5, -6, -9}}, } 자신:assert Lua And동일한 수치의 호출('최대', 테스트) 자신:assertLuaEquals(제로, '최대', {}) 자신:assertInvokeEquals(동일)('', '최대', {}) 끝. ------------------------------------------------------------------------------- -- 테스트 평균 ------------------------------------------------------------------------------- 기능. 스위트:test_평균() 현지의 테스트 = { {6, {5, 6, 7}}, {-7, {-7}}, {10000000002, {10000000001, 10000000002, 10000000003}}, } 자신:assert Lua And동일한 수치의 호출('평균', 테스트) 끝. ------------------------------------------------------------------------------- --최소 테스트 ------------------------------------------------------------------------------- 기능. 스위트:test_min() 현지의 테스트 = { {1, {1, 2, 3}}, {-3, {-1, -2, -3}}, } 자신:assert Lua And동일한 수치의 호출('분', 테스트) 자신:assertLuaEquals(제로, '분', {}) 자신:assertInvokeEquals(동일)('', '분', {}) 끝. ------------------------------------------------------------------------------- -- 테스트 gcd ------------------------------------------------------------------------------- 기능. 스위트:test_gcd() 현지의 테스트 = { {4, {12, 8}}, {2, {12, 8, 6}}, {4, {-12, -8}}, {2, {-12, -8, -6}}, {8, {0, 8}}, {8, {0, -8}}, {0, {0}}, {0, {0, 0}}, {4, {12, 제로, 8}}, } 자신:assert Lua And동일한 수치의 호출('gcd', 테스트) 끝. ------------------------------------------------------------------------------- -- 테스트 순서 ------------------------------------------------------------------------------- 기능. 스위트:test_order() 현지의 테스트 = { {0, {2}}, {1, {20}}, {2, {200}}, {0, {5}}, } 자신:assert Lua And동일한 수치의 호출('주문', 테스트) 자신:assertInvokeEquals(동일)(스위트.에러('진수 입력이 비정상적으로 표시됨'), '주문', {'문자열}) 자신:assertInvokeEquals(동일)(0, '주문', {x = 5}) 끝. ------------------------------------------------------------------------------- -- 시험 정밀도 ------------------------------------------------------------------------------- 기능. 스위트:test_precision() 현지의 테스트 = { {4, {1.9856}}, {1, {1.1}}, {10, {1.9999999999}}, } 자신:assert Lua And동일한 수치의 호출('실패', 테스트) 자신:assertInvokeEquals(동일)(스위트.에러('오류 입력이 비오류 입력으로 표시됨'), '실패', {'렛라'}) 자신:assertInvokeEquals(동일)(4, '실패', {x = '1.9888'}) 끝. ------------------------------------------------------------------------------- -- 테스트 라운드 ------------------------------------------------------------------------------- 기능. 스위트:test_round() 현지의 테스트 = { {2, {1.99999}}, {2, {1.99999, 0}}, {1.9, {1.94, 1}}, {20, {15, -1}}, } 자신:assert Lua And동일한 수치의 호출('둥근', 테스트) 자신:assertInvokeEquals(동일)(3, '둥근', {가치 = '2.99999', 정확 = '2'}) 끝. ------------------------------------------------------------------------------- -- 테스트 모드 ------------------------------------------------------------------------------- 기능. 스위트:test_mod() 현지의 테스트 = { {0, {10, 2}}, {1, {11, 2}}, {0, {525000000000000120000000000, 3}}, -- 플레인 % 연산자를 사용하면 부동소수점 오류로 인해 68719476736이 반환됩니다. } 자신:assert Lua And동일한 수치의 호출('모드', 테스트) 자신:assertInvokeEquals(동일)(스위트.에러('수정할 첫 번째 인수가 비인수로 표시됨'), '모드', {}) 자신:assertInvokeEquals(동일)(스위트.에러('수정할 두 번째 인수가 수정되지 않은 것으로 표시됨'), '모드', {1}) 현지의 성공 Nogs = pcall(음.._mod) 자신:assert False(거짓)(성공 Nogs) 현지의 successOneArg(성공) = pcall(음.._mod, 1) 자신:assert False(거짓)(successOneArg(성공)) 끝. ------------------------------------------------------------------------------- -- 테스트 정밀도 포맷 ------------------------------------------------------------------------------- 기능. 스위트:test_precision_format() 현지의 테스트 = { {'10.00', {10, 2}} } 자신:assert Lua And동일한 수치의 호출('param_format', 테스트, 거짓의) -- "false" 를 지정하면 #syslog 에서 재입력 시 문자열 값이 숫자로 변환되지 않습니다. 끝. ------------------------------------------------------------------------------- -- 테스트 clean Number ------------------------------------------------------------------------------- 기능. 스위트:assertCleanNumberEquals(예상 테이블, 입력 문자열) 현지의 예상수, 예기된 NumString = 예상 테이블[1], 예상 테이블[2] 현지의 실제수, actualNumString = 음.._clean Number(클린 번호)(입력 문자열) 자신:assert Equals(동일)(예상수, 실제수) 자신:assert Equals(동일)(예기된 NumString, actualNumString) 끝. 기능. 스위트:test_cleanNumber() 자신:assertCleanNumberEquals({0, '0'}, '0') 자신:assertCleanNumberEquals({1, '1'}, 1) 자신:assertCleanNumberEquals({2, '2'}, ' 2 ') 자신:assertCleanNumberEquals({3, '3'}, '4-1') 자신:assertCleanNumberEquals({4, '4'}, '2 + 2') 자신:assertCleanNumberEquals({5, '5'}, ' 2 + 3 ') 자신:assertCleanNumberEquals({6, '6'}, '+6') 자신:assertCleanNumberEquals({-7, '-7'}, '-7') 자신:assertCleanNumberEquals({88, '88'}, '0x58') 자신:assertCleanNumberEquals({1000000000, '1e+9'}, '1e+9') 자신:assertCleanNumberEquals({-88, '-88'}, '-0x58') 자신:assertCleanNumberEquals({0.16667, '0.16667'}, '1/6라운드 5') 자신:assertCleanNumberEquals({제로, 제로}, '1 foo 2') -- 잘못된 식입니다. 자신:assertCleanNumberEquals({제로, 제로}, '1+') -- expr 오퍼랜드가 없습니다. 자신:assertCleanNumberEquals({제로, 제로}, '') 자신:assertCleanNumberEquals({제로, 제로}, ' ') 자신:assertCleanNumberEquals({제로, 제로}, '문자열) 자신:assertCleanNumberEquals({제로, 제로}, 패딩이 있는 문자열) 끝. ------------------------------------------------------------------------------- -- 테스트 분할 ------------------------------------------------------------------------------- 기능. 스위트:test_filename(테스트)_interface(실행)() 자신:assertInvokeEquals(동일)('1','실패',{1, 2, 둥글다 = '네'}, 거짓의) 자신:assertInvokeEquals(동일)('0.5','실패',{1, 2, 둥글다 = '아니요'}, 거짓의) 자신:assertInvokeEquals(동일)('0','실패',{1, 3, 둥글다 = '네', 정확=2}, 거짓의) 자신:assertInvokeEquals(동일)('0.33','실패',{1, 3, 정확=2}, 거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('빈 배당금'),'실패',{'',2},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('빈 제수'),'실패',{1,''},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('빈 제수'),'실패',{},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('빈 제수'),'실패',{'',''},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('숫자 없음: a'),'실패',{'a',2},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('숫자 없음: b'),'실패',{1,'b'},거짓의) 자신:assertInvokeEquals(동일)(스위트.에러('숫자 없음: b'),'실패',{'a','b'},거짓의) 자신:assertInvokeEquals(동일)('불량' </big>,'실패',{'불량' </big>,2},거짓의) 자신:assertInvokeEquals(동일)('불량' </big>,'실패',{1,'불량' </big>},거짓의) 자신:assertInvokeEquals(동일)('Bad2' </big>,'실패',{'Bad1' </big>,'Bad2' </big>},거짓의) 끝. 돌아가다 스위트