carcr.gms : 테스트 연결 에이전트 RawCSVReader

설명

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

기고자: Michael Bussieck, 2023년 2월

소형 모델 유형 :크레이지 슬롯


카테고리 : 크레이지 슬롯 테스트 라이브러리


메인 파일 : carcr.gms

$title '테스트 연결 에이전트 RawCSVReader' (CARCR,SEQ=934)

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

기고자: Michael Bussieck, 2023년 2월
$offText

$log --- Python 라이브러리 %sysEnv.GMSPYTHONLIB% 사용

$onEchoV > carcr.csv
참,1
거짓,2
2008년 1월 1일,3
inf,4
-inf,5
나,6
난,7
EPS,8
Eps,9
undef,10
39448,11
짧다,
a23456789012345678901234567890123456789012345678901234567890123,
a234567890123456789012345678901234567890123456789012345678901234,
a234567890123456789012345678901234567890123456789012345678901~1,
a234567890123456789012345678901234567890123456789012345678901234 56789012345678901234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789012345678901234 5678901234567890123456789012345678901234567890123456789012345678,
'테스트',
"테스트",
t"es"t,
그렇지 않아,
그렇지 않아
너무 길어서 크레이지 슬롯에서 표현할 수 없는 라벨입니다.
너무 길기 때문에 크레이지 슬롯에서 표현할 수 없는 일부 라벨입니다.
너무 길어서 크레이지 슬롯에서 표현할 수 없는 ANOTHER 라벨입니다.
너무 길어서 크레이지 슬롯에서 표현할 수 없는 A THIRD 라벨입니다.
$offEcho

$onEchoV > t.gms
c(*) 열 설정 / %C%1*%C%2 /;
r(*) 행 설정 / %R%1*%R%25 /;

$onUNDF
매개변수 vf(*,*) 숫자 값이 포함된 셀 /
%R%1 .%C%1 1,
%R%1 .%C%2 1,
%R%2 .%C%2 2,
%R%3 .%C%2 3,
%R%4 .%C%1 +Inf,
%R%4 .%C%2 4,
%R%5 .%C%1 -Inf,
%R%5 .%C%2 5,
%R%6 .%C%1 해당 없음,
%R%6 .%C%2 6,
%R%7 .%C%1 Undf,
%R%7 .%C%2 7,
%R%8 .%C%1 Eps,
%R%8 .%C%2 8,
%R%9 .%C%1 Eps,
%R%9 .%C%2 9,
%R%10.%C%1 Undf,
%R%10.%C%2 10,
%R%11.%C%1 39448,
%R%11.%C%2 11 /;
$offUNDF

설명 텍스트가 있는 vs(*,*) 셀 설정 /
%R%1. %C%1 '참',
%R%2. %C%1 '거짓',
%R%3. %C%1 '2008년 1월 1일',
%R%4. %C%1 정보,
%R%5. %C%1 -inf,
%R%6. %C%1 나,
%R%7. %C%1난,
%R%8. %C%1eps,
%R%9. %C%1엡,
%R%10.%C%1 undef,
%R%12.%C%1 짧음,
%R%13.%C%1 a23456789012345678901234567890123456789012345678901234567890123,
%R%14.%C%1 a234567890123456789012345678901234567890123456789012345678901234,
%R%15.%C%1 a234567890123456789012345678901234567890123456789012345678901~1,
%R%16.%C%1 a23456789012345678901234567890123456789012345678901234567890123 4567890123456789012345678901234567890123456789012345678901234567 890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234
%R%17.%C%1 "'테스트'"
%R%18.%C%1 테스트
%R%19.%C%1 't"es"t'
%R%20.%C%1 "그렇지 않아"
%R%21.%C%1 "그렇지 않아"
%R%22.%C%1 "너무 길어서 크레이지 슬롯에서 표현할 수 없는 일부 라벨입니다."
%R%23.%C%1 "이 라벨은 너무 길어서 크레이지 슬롯에서 표현할 수 없는 라벨입니다."
%R%24.%C%1 "너무 길어서 크레이지 슬롯에 표시할 수 없는 또 다른 라벨입니다."
%R%25.%C%1 "너무 길어 크레이지 슬롯에서 표현할 수 없는 세 번째 라벨입니다."
/;

%vu%(*,*,*) 잠재적인 크레이지 슬롯 라벨이 있는 셀 설정 /
%R%1.%C%1.'참' 참,
%R%2.%C%1.'거짓' 거짓,
%R%3.%C%1.'2008년 1월 1일' '2008년 1월 1일',
%R%4.%C%1.'inf' 정보,
%R%5.%C%1.'-inf' -inf,
%R%6.%C%1.'나' 나,
$ifThen %READASSTRING%==거짓
%R%1.%C%2.'1.0' 1.0,
%R%2.%C%2.'2.0' 2.0,
%R%3.%C%2.'3.0' 3.0,
%R%4.%C%2.'4.0' 4.0,
%R%5.%C%2.'5.0' 5.0,
%R%6.%C%2.'6.0' 6.0,
%R%7.%C%2.'7.0' 7.0,
%R%8.%C%2.'8.0' 8.0,
%R%9.%C%2.'9.0' 9.0,
%R%10.%C%2.'10.0' 10.0,
%R%11.%C%2.'11.0' 11.0,
$else
%R%1.%C%2.'1' 1,
%R%2.%C%2.'2' 2,
%R%3.%C%2.'3' 3,
%R%4.%C%2.'4' 4,
%R%5.%C%2.'5' 5,
%R%6.%C%2.'6' 6,
%R%7.%C%2.'7' 7,
%R%8.%C%2.'8' 8,
%R%9.%C%2.'9' 9,
%R%10.%C%2.'10' 10,
%R%11.%C%2.'11' 11,
$endIf
%R%7.%C%1.'nan' 난,
%R%8.%C%1.'eps'eps,
%R%9.%C%1.'eps' Eps,
%R%10.%C%1.'undef' undef,
%R%11.%C%1.'39448' 39448,
%R%12.%C%1.'짧다' 짧게,
%R%13.%C%1.'a23456789012345678901234567890123456789012345678901234567890123' a23456789012345678901234567890123456789012345678901234567890123,
%R%14.%C%1.'a234567890123456789012345678901234567890123456789012345678901~1' a234567890123456789012345678901234567890123456789012345678901234,
%R%15.%C%1.'a234567890123456789012345678901234567890123456789012345678901~2' a234567890123456789012345678901234567890123456789012345678901~1,
%R%16.%C%1.'a234567890123456789012345678901234567890123456789012345678901~3' a23456789012345678901234567890123456789012345678901234567890123 4567890123456789012345678901234567890123456789012345678901234567 890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234
%R%17.%C%1."'테스트'" "'테스트'"
%R%18.%C%1.테스트 테스트
%R%19.%C%1.'t"es"t' 't"es"t'
%R%20.%C%1."t'es't" "t'es't"
%R%22.%C%1.'~1 이후 크레이지 슬롯에서 표현할 수 없는 라벨입니다.' "너무 길어서 크레이지 슬롯에서 표현할 수 없는 라벨입니다."
%R%23.%C%1.'~2 이후 크레이지 슬롯에서 표시할 수 없는 레이블입니다.' "또한 너무 길어서 크레이지 슬롯에서 표시할 수 없는 레이블입니다."
%R%24.%C%1.'크레이지 슬롯에서 표현할 수 없는 또 다른 라벨입니다. sin~1' "너무 길어서 크레이지 슬롯에서 표현할 수 없는 또 다른 라벨입니다."
%R%25.%C%1.'크레이지 슬롯에서 표현할 수 없는 세 번째 라벨입니다. sin~1' "너무 길어서 크레이지 슬롯에서 표현할 수 없는 세 번째 라벨입니다."
/;
$offEcho

*** 예상 오류 테스트 ***
$log 기존 기호 이름에 대한 예외 발생 테스트
$onEmbeddedCode 연결:
- Python코드:
    코드: |
      connect.container.addSet("r")
- RawCSVReader:
    파일: carcr.csv
    readAsString: 거짓
    rowLabel: rxx
    컬럼 라벨: cxx
    vu이름: vux
$offEmbeddedCode
$if errorFree $abort '오류 예상'
$clearErrors

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

$call.checkErrorLevel 크레이지 슬롯 t.gms lo=%크레이지 슬롯lo% gdx ref.gdx --READASSTRING=True --vu=vu --S=S --R=R --C=C
$onEmbeddedCode 연결:
- RawCSVReader:
    파일: carcr.csv
- GDXWriter:
    파일: ctrcrout.gdx
$offEmbeddedCode

$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%

$call.checkErrorLevel 크레이지 슬롯 t.gms lo=%크레이지 슬롯lo% gdx ref.gdx --READASSTRING=False --vu=vu --S=S --R=R --C=C
$onEmbeddedCode 연결:
- RawCSVReader:
    파일: carcr.csv
    readAsString: 거짓
- GDXWriter:
    파일: ctrcrout.gdx
$offEmbeddedCode

$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%

$call.checkErrorLevel 크레이지 슬롯 t.gms lo=%크레이지 슬롯lo% gdx ref.gdx --READASSTRING=True --vu=vux --R=rxx --C=cxx
$onEmbeddedCode 연결:
- RawCSVReader:
    파일: carcr.csv
    rowLabel: rxx
    컬럼 라벨: cxx
    vu이름: vux
- GDXWriter:
    파일: ctrcrout.gdx
    기호: 모두
$offEmbeddedCode

$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%

$call.checkErrorLevel 크레이지 슬롯 t.gms lo=%크레이지 슬롯lo% gdx ref.gdx --READASSTRING=False --vu=vux --R=rxx --C=cxx
$onEmbeddedCode 연결:
- RawCSVReader:
    파일: carcr.csv
    readAsString: 거짓
    rowLabel: rxx
    컬럼 라벨: cxx
    vu이름: vux
- GDXWriter:
    파일: ctrcrout.gdx
$offEmbeddedCode

$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%

$log 기호에 내용이 없을 때 빈 DataFrame(없음 레코드 아님)이 있는지 테스트합니다.
$onechoV > carcr_empty_df.csv
a,b,c,
d,e,f,
그, 어, 나,
$offEcho

$onEmbeddedCode 연결:
- RawCSVReader:
    파일: carcr_empty_df.csv
    rowLabel: rxx
    컬럼 라벨: cxx
- Python코드:
    코드: |
      데이터 = connect.container['vf'].records
      예상 = ['r', 'c', '값']
      데이터가 None이거나 data.empty가 아닌 경우:
        raise Exception(f"Symbol >vf<에는 빈 DataFrame이 있어야 합니다!")

      if (data.columns != 예상).any() :
        raise Exception("DataFrame에 대한 예기치 않은 열")
$offEmbeddedCode