carxr.gms : 테스트 연결 에이전트 RawExcelReader

설명

이 테스트는 Connect 에이전트 RawExcelReader의 정확성을 확인합니다.

기고자: Michael Bussieck, 2022년 3월

소형 모델 유형 :슬롯 사이트 추천


카테고리 : 슬롯 사이트 추천 테스트 라이브러리


메인 파일 : carxr.gms

$title '테스트 연결 에이전트 RawExcelReader' (CARXR,SEQ=893)

$onText
이 테스트는 Connect 에이전트 RawExcelReader의 정확성을 확인합니다.

기고자: Michael Bussieck, 2022년 3월
$offText

* 주요 플랫폼(Windows, Linux, Mac)에서는 GMSPYTHONLIB가 자동으로 설정됩니다. 
* sysdir/GMSPython에서 내부 Python 설치를 사용합니다.
$if setEnv GMSPYTHONLIB $abort.noError 내장 코드 Python을 사용할 준비가 되지 않았습니다.
$log --- Python 라이브러리 %sysEnv.GMSPYTHONLIB% 사용

$onEchoV > t.gms
s(*) 통합 문서 시트 설정 / '%S%1' Sheet1, '%S%2' Sheet2 /;
w(*) 통합 문서 시트를 이름으로 설정 / 'Sheet1', 'Sheet2' /;
ws(*,*) 설정 통합 문서 맵 / '%S%1'.'Sheet1', '%S%2'.'Sheet2' /;
c(*) 열 설정 / %C%1*%C%3 /;
r(*) 행 설정 / %R%1*%R%14 /;

$설정되지 않은 경우 MERGEF $set MERGEF ""
$설정되지 않은 경우 병합 $set 병합 ""
$onUNDF
매개변수 vf(*,*,*) 숫자 값이 포함된 셀 /
%S%1.%R%1 .%C%1 1, 
%S%1.%R%1 .%C%2 1, 
%S%1.%R%1%MERGEF%.%C%3 1, 
%S%1.%R%2 .%C%2 2, 
%S%1.%R%3 .%C%1 39448, 
%S%1.%R%3 .%C%2 3, 
%S%1.%R%4 .%C%1 +Inf, 
%S%1.%R%4 .%C%2 4, 
%S%1.%R%5 .%C%1 -Inf, 
%S%1.%R%5 .%C%2 5, 
%S%1.%R%6 .%C%1 해당 없음, 
%S%1.%R%6 .%C%2 6, 
%S%1.%R%7 .%C%1 해당 없음, 
%S%1.%R%7 .%C%2 7, 
%S%1.%R%8 .%C%1 Eps, 
%S%1.%R%8 .%C%2 8, 
%S%1.%R%9 .%C%1 Eps, 
%S%1.%R%9 .%C%2 9, 
%S%1.%R%10.%C%1 Undf, 
%S%1.%R%10.%C%2 10, 
%S%1.%R%11.%C%1 39448, 
%S%1.%R%11.%C%2 11 /;
$offUNDF

설명 텍스트가 있는 vs(*,*,*) 셀 설정 /
%S%1. %R%4.%C%1 정보, 
%S%1. %R%5.%C%1 -inf, 
%S%1. %R%6.%C%1 나, 
%S%1. %R%7.%C%1난, 
%S%1. %R%8.%C%1eps, 
%S%1. %R%9.%C%1 Eps, 
%S%1.%R%10.%C%1 undef, 
%S%2. %R%1.%C%1 짧음, 
%S%2. %R%2.%C%1 a23456789012345678901234567890123456789012345678901234567890123, 
%S%2. %R%3.%C%1 a234567890123456789012345678901234567890123456789012345678901234, 
%S%2. %R%4.%C%1 a234567890123456789012345678901234567890123456789012345678901~1, 
%S%2. %R%5.%C%1 a23456789012345678901234567890123456789012345678901234567890123 4567890123456789012345678901234567890123456789012345678901234567 890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234
%S%2. %R%6%MERGES%.%C%1 병합
%S%2. %R%11.%C%1 "너무 길어서 슬롯 사이트 추천에서 표현할 수 없는 일부 라벨입니다."
%S%2. %R%12.%C%1 "이 라벨은 너무 길어서 슬롯 사이트 추천에서 표현할 수 없는 라벨입니다."
%S%2. %R%13.%C%1 "너무 길어서 슬롯 사이트 추천에 표시할 수 없는 또 다른 라벨입니다."
%S%2. %R%14.%C%1 "세 번째 라벨은 너무 길어서 슬롯 사이트 추천에서 표현할 수 없습니다."
/;

%vu%(*,*,*,*) 잠재적인 슬롯 사이트 추천 라벨이 있는 셀 설정 /
%S%1.%R%1.%C%1.'참' 참, 
%S%1.%R%1.%C%2.'1' 1, 
%S%1.%R%1%MERGEF%.%C%3.'1' 1, 
%S%1.%R%2.%C%1.'거짓' 거짓, 
%S%1.%R%2.%C%2.'2' 2, 
%S%1.%R%3.%C%1.'2008-01-01 00:00:00' '2008-01-01 00:00:00', 
%S%1.%R%3.%C%2.'3' 3, 
%S%1.%R%4.%C%1.'inf' 정보, 
%S%1.%R%4.%C%2.'4' 4, 
%S%1.%R%5.%C%1.'-inf' -inf, 
%S%1.%R%5.%C%2.'5' 5, 
%S%1.%R%6.%C%1.'나' na, 
%S%1.%R%6.%C%2.'6' 6, 
%S%1.%R%7.%C%1.'nan' 난, 
%S%1.%R%7.%C%2.'7' 7, 
%S%1.%R%8.%C%1.'eps'eps, 
%S%1.%R%8.%C%2.'8' 8, 
%S%1.%R%9.%C%1.'eps' Eps, 
%S%1.%R%9.%C%2.'9' 9, 
%S%1.%R%10.%C%1.'undef' undef, 
%S%1.%R%10.%C%2.'10' 10, 
%S%1.%R%11.%C%1.'39448' 39448, 
%S%1.%R%11.%C%2.'11' 11, 
%S%2.%R%1.%C%1.'짧다' 짧다, 
%S%2.%R%2.%C%1.'a23456789012345678901234567890123456789012345678901234567890123' a23456789012345678901234567890123456789012345678901234567890123, 
%S%2.%R%3.%C%1.'a234567890123456789012345678901234567890123456789012345678901~1' a234567890123456789012345678901234567890123456789012345678901234, 
%S%2.%R%4.%C%1.'a234567890123456789012345678901234567890123456789012345678901~2' a234567890123456789012345678901234567890123456789012345678901~1, 
%S%2.%R%5.%C%1.'a234567890123456789012345678901234567890123456789012345678901~3' a23456789012345678901234567890123456789012345678901234567890123 4567890123456789012345678901234567890123456789012345678901234567 890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234
%S%2.%R%6%MERGES%.%C%1.'병합' 병합
%S%2.%R%11.%C%1.'~1 이후 슬롯 사이트 추천에서 표현할 수 없는 라벨입니다.' "너무 길어서 슬롯 사이트 추천에서 표현할 수 없는 라벨입니다."
%S%2.%R%12.%C%1.'~2 이후 슬롯 사이트 추천에서 표시할 수 없는 레이블입니다.' "또한 너무 길어서 슬롯 사이트 추천에서 표시할 수 없는 레이블입니다."
%S%2.%R%13.%C%1.'슬롯 사이트 추천에서 표현할 수 없는 또 다른 라벨입니다. sin~1' "너무 길어 슬롯 사이트 추천에서 표현할 수 없는 또 다른 라벨입니다."
%S%2.%R%14.%C%1.'슬롯 사이트 추천에서 표현할 수 없는 세 번째 라벨입니다.sin~1' "너무 길어 슬롯 사이트 추천에서 표현할 수 없는 세 번째 라벨입니다."
/;
$offEcho

*** 예상 오류 테스트 ***
$log 기존 기호 이름에 대한 예외 발생 테스트
$onEmbeddedCode 연결:
- Python코드:
    코드: |
      connect.container.addParameter("vf")
- RawExcelReader:
    파일: carxr.xlsx
$offEmbeddedCode
$if errorFree $abort '오류 예상'
$clearErrors

$log 기존 기호 이름에 대한 예외 발생 테스트(빈 파일)
$onEmbeddedCode 연결:
- Python코드:
    코드: |
      connect.container.addSet("r")

      openpyxl 가져오기
      wb = openpyxl.Workbook()
      wb.save("carxr_empty.xlsx")
- RawExcelReader:
    파일: carxr_empty.xlsx
$offEmbeddedCode
$if errorFree $abort '오류 예상'
$clearErrors

*********************************************************

$call.checkErrorLevel 슬롯 사이트 추천 t.gms lo=%슬롯 사이트 추천lo% gdx refnomerge.gdx --vu=vu --S=S --R=R --C=C
$call.checkErrorLevel 게임 t.gms lo=%슬롯 사이트 추천lo% gdx refmerge.gdx --vu=vu --S=S --R=R --C=C --MERGEF="*R11" --MERGES="*R10"
$onEmbeddedCode 연결:
- RawExcelReader:
    파일: carxr.xlsx
- GDXWriter:
    파일: ctxrxoutnomerge.gdx
$offEmbeddedCode 
$onEmbeddedCode 연결:
- RawExcelReader:
    파일: carxr.xlsx
    mergedCells: 참
- GDXWriter:
    파일: ctxrxoutmerge.gdx
$offEmbeddedCode 

$call.checkErrorLevel gdxdiff refnomerge.gdx ctxrxoutnomerge.gdx > %system.NullFile%
$call.checkErrorLevel gdxdiff refmerge.gdx ctxrxoutmerge.gdx > %system.NullFile%

$call.checkErrorLevel 슬롯 사이트 추천 t.gms lo=%슬롯 사이트 추천lo% gdx refnomerge.gdx --vu=vux --S=sxx --R=rxx --C=cxx
$call.checkErrorLevel 슬롯 사이트 추천 t.gms lo=%슬롯 사이트 추천lo% gdx refmerge.gdx --vu=vux --S=sxx --R=rxx --C=cxx --MERGEF="*rxx11" --MERGES="*rxx10"
$onEmbeddedCode 연결:
- RawExcelReader:
    파일: carxr.xlsx
    시트라벨: sxx
    rowLabel: rxx
    컬럼 라벨: cxx
    vu이름: vux
- GDXWriter:
    파일: ctxrxoutnomerge.gdx
$offEmbeddedCode 
$onEmbeddedCode 연결:
- RawExcelReader:
    파일: carxr.xlsx
    mergedCells: 참
    시트라벨: sxx
    rowLabel: rxx
    컬럼 라벨: cxx
    vu이름: vux
- GDXWriter:
    파일: ctxrxoutmerge.gdx
$offEmbeddedCode 

$call.checkErrorLevel gdxdiff refnomerge.gdx ctxrxoutnomerge.gdx > %system.NullFile%
$call.checkErrorLevel gdxdiff refmerge.gdx ctxrxoutmerge.gdx > %system.NullFile%

$onEcho > uelcheck.gms
set test(*) / i1*i5 '테스트' /;
별칭(*,S,R,C,U);
vu(S,R,C,U), vuX(S,R,C)를 설정합니다.
$onEmbeddedCode 연결:
- 슬롯 사이트 추천리더:
   기호:
    - 이름 : 테스트
- Python코드:
   코드: |
     팬더를 PD로 가져오기
     df = connect.container['test'].records
     df.iloc[0] = 'uni_0': 'i1', 'element_text': '"테스트"'
     df.iloc[1] = 'uni_0': 'i2', 'element_text': "'test'"
     df.iloc[2] = 'uni_0': 'i3', 'element_text': 't\'e"s\'t'
     df.iloc[3] = 'uni_0': 'i4', 'element_text': 'te\tst'
     df.iloc[4] = 'uni_0': 'i5', 'element_text': 'te\nst'
     df.to_excel('x.xlsx')
- RawExcelReader:
   파일: x.xlsx
- 슬롯 사이트 추천작성기:
   기호:
     - 이름 : vu
$offEmbeddedCode vu
옵션 vux<vu;
$eolCom !
abort$(not vux('S1','R2','C3')) 'uel을 기대합니다'; ! "테스트"
abort$(not vux('S1','R3','C3')) 'uel을 기대합니다'; ! '테스트'
abort$vux('S1','R4','C3') '유엘이 없을 것으로 예상됩니다.'; ! 넌 그렇지 않아
abort$vux('S1','R5','C3') '유엘이 없을 것으로 예상됩니다.'; ! 탭 st
abort$vux('S1','R6','C3') '유엘이 없을 것으로 예상됩니다.'; ! NEWLINE st
$offEcho
$call.checkErrorLevel 슬롯 사이트 추천 uelcheck.gms lo=2

$log 빈 파일이 있는 테스트 에이전트(일부 기호에는 빈 DataFrame이 있음)
$onEmbeddedCode 연결:
- RawExcelReader:
    파일: carxr_empty.xlsx
    c이름: col
    r이름: 행
    이름: sht
- Python코드:
    코드: |
      data_vf = 연결.컨테이너['vf'].records
      data_vs = 연결.컨테이너['vs'].records
      data_vu = 연결.컨테이너['vu'].records

      예상_vf = ['sht', '행', '열', '값']
      예상_vs = ['sht', '행', '열', '요소_텍스트']
      예상_vu = ['sht', '행', '열', 'uni', 'element_text']

      data_vf가 None이거나 data_vf.empty가 아닌 경우:
        raise Exception("빈 DataFrame으로 >vf<가 예상됩니다.")

      data_vs가 None이거나 data_vs.empty가 아닌 경우:
        raise Exception("빈 DataFrame으로 >vs<가 예상됩니다.")

      data_vu가 None이거나 data_vu.empty가 아닌 경우:
        raise Exception("빈 DataFrame으로 >vu<가 예상됩니다.")

      if (data_vf.columns != Expect_vf).any() :
        raise Exception("DataFrame >vf<에 대한 예기치 않은 열")

      if (data_vs.columns != Expect_vs).any() :
        raise Exception("DataFrame >vs<에 대한 예기치 않은 열")

      if (data_vu.columns != Expect_vu).any() :
        raise Exception("DataFrame >vu<에 대한 예기치 않은 열")
$offEmbeddedCode