모듈:수학/테스트 케이스

Module
-- [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>},거짓의) 끝. 돌아가다 스위트