gdxsqlite1.gms : 크레이지 슬롯 도구의 기본 기능 테스트

설명

이 프로그램은 다음을 생성하여 기본 sqlitewrite 기능을 테스트합니다.
sqlitewrite 유틸리티를 통해 sqlite 데이터베이스를 만들고 이를 조사합니다.
크레이지 슬롯 Connect 에이전트 SQLReader를 사용하여 데이터베이스를 생성합니다.

기고자: Vaibhavnath Jha, 2024년 9월

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


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


메인 파일 : 크레이지 슬롯.gms

$title 'SQLITEWRITE 도구의 기본 기능 테스트' (gdx2sqlite01,SEQ=662)

$onText
이 프로그램은 다음을 생성하여 기본 sqlitewrite 기능을 테스트합니다.
sqlitewrite 유틸리티를 통해 sqlite 데이터베이스를 만들고 이를 조사합니다.
크레이지 슬롯 Connect 에이전트 SQLReader를 사용하여 데이터베이스를 생성합니다.

기고자: Vaibhavnath Jha, 2024년 9월
$offText

$onEcho > t.gms
내가 /i1*i2/로 설정;
j /i1*i2/를 설정합니다;
k /i1*i2/를 설정합니다;

ExecuteTool 'sqlitewrite ids=k o=check_k.db';
$offEcho

$call 크레이지 슬롯 t.gms gdx=out.gdx lo=%크레이지 슬롯lo% > %system.nullfile%

$log 동일한 테이블 이름을 가진 테이블 작성 테스트
$call gamstool sqlitewrite gdxIn=out.gdx o=check_k.db 추가=Y > %system.nullfile% 2>&1
$ifE errorLevel=0 $abort '테이블 >k<가 데이터베이스에 이미 존재합니다. 이건 실패했어야 했어!'

$log 테스트 전역 커밋 동작
$onEmbeddedCode 연결:
- SQL리더:
    연결: '데이터베이스':'check_k.db'
    기호:
      - 이름 : check_j
        쿼리: "SELECT * FROM j;"
$offEmbeddedCode
$if errorFree $abort 'Table >j<는 데이터베이스에 존재하지 않아야 합니다. 이건 실패했어야 했어!'
$clearErrors

$call gamslib -q trnsport
$if errorlevel 1 $abort 크레이지 슬롯 모델 라이브러리에서 trnsport를 검색하는 중에 문제가 발생했습니다.
$call 크레이지 슬롯 trnsport.gms gdx=sqlite_test lp=soplex lo=%크레이지 슬롯lo%
$if errorlevel 1 $abort 크레이지 슬롯 모델 trnsport 실행 문제
$call gamstool sqlitewrite -gdxin=sqlite_test.gdx -o sqlite_test.db > %system.nullfile%
$if errorlevel 1 $abort sqlitewrite를 사용하여 데이터베이스를 생성하는 중에 문제가 발생했습니다.

$onEmbeddedCode 연결:
- SQL리더:
    연결: 'database':'sqlite_test.db'
    기호:
      - 이름 : 나
        쿼리: "i에서 *를 선택하세요."
        유형: 세트
      - 이름 : j
        쿼리: "j에서 *를 선택하세요."
        유형: 세트
      - 이름 : c
        쿼리: "c에서 *를 선택하세요;"
      - 이름 : d
        쿼리: "j 선택, i=='시애틀'인 d에서 값;"
      - 이름 : 공급
        쿼리: "i를 선택하고 공급품에서 낮은 값을 선택하세요."
      - 이름: 스칼라
        쿼리: "스칼라에서 *를 선택하세요."
      - 이름: 스칼라변수
        쿼리: "스칼라 변수에서 *를 선택하세요."
        valueColumns: ["수준", "한계", "하위", "상위", "규모"]
      - 이름: 스칼라 방정식
        쿼리: "스칼라 방정식에서 *를 선택하세요."
        valueColumns: ["수준", "한계", "하위", "상위", "규모"]
- Python코드:
    코드: |
        numpy를 np로 가져오기
        m = 연결.컨테이너
        예상 = 
        "i" : [['시애틀', ''], ['샌디에이고', '']],
        "j" : [['뉴욕', ''], ['시카고', ''], ['토피카', '']],
        "c" : [['시애틀', '뉴욕', 0.225],
                      ['시애틀', '시카고', 0.153],
                      ['시애틀', '토피카', 0.162],
                      ['샌디에고', '뉴욕', 0.225],
                      ['샌디에고', '시카고', 0.162],
                      ['샌디에고', '토피카', 0.126]],
        "d" : [['뉴욕', 2.5],
               ['시카고', 1.7],
               ['토피카', 1.8]],
        "공급": [['시애틀', -np.inf],
                    ['샌디에고', -np.inf]],
        "스칼라": [['f', 90.0]],
        "스칼라변수": [['z', 'level', 153.675],
                             ['z', '한계', 0.0],
                             ['z', '하위', -np.inf],
                             ['z', '상위', np.inf],
                             ['z', '규모', 1.0]],
        "scalaequations": [['cost', 'level', 0.0],
                             ['비용', '한계', 1.0],
                             ['비용', '낮은', 0.0],
                             ['비용', '상한', 0.0],
                             ['비용', '규모', 1.0]]

        예상.items()의 키, 값:
            값이 != m[key].records.values.tolist()인 경우:
                raise Exception(f"예기치 않은 데이터 >key<")
$offEmbeddedCode

$onText
다음 테스트는 컴파일 시간과 실행 시간을 확인합니다.
SQLITEWRITE 사용. 이 도구는 다음에서 직접 기호를 내보낼 수 있습니다. 
-gdxin 옵션이 지정되지 않은 경우 크레이지 슬롯 데이터베이스입니다.
$offText

i,j를 설정합니다.

매개변수 d(i<,j<);

스칼라 f;

변수 x(i,j);

변수 z;

방정식 수요(j), 비용;

$gdxIn 'sqlite_test'
$load d,수요,f,x,z,비용

* 컴파일 타임 테스트
$callTool.checkErrorLevel sqlitewrite ids=d,demand,f,x,z,cost o=out.db

$onEmbeddedCode 연결:
- SQL리더:
    연결: '데이터베이스':'out.db'
    기호:
      - 이름 : d
        쿼리: "SELECT * FROM d;"
      - 이름 : x
        쿼리: "SELECT i,j,level FROM x;"
      - 이름 : f
        쿼리: "SELECT * FROM 스칼라;"
      - 이름 : 수요
        쿼리: "SELECT j,수준 FROM 수요;"
      - 이름: 스칼라 방정식
        쿼리: "SELECT * FROM 스칼라 방정식;"
        valueColumns: ["수준", "하위", "상위","한계","규모"]
      - 이름: 스칼라변수
        쿼리: "SELECT 이름, 수준, 상위 FROM 스칼라 변수;"
        valueColumns: ["수준","상위"]
- Python코드:
    코드: |
        numpy를 np로 가져오기

        d_expected = [['시애틀', '뉴욕', 2.5],
                      ['시애틀', '시카고', 1.7],
                      ['시애틀', '토피카', 1.8],
                      ['샌디에고', '뉴욕', 2.5],
                      ['샌디에고', '시카고', 1.8],
                      ['샌디에고', '토피카', 1.4]]
        x_expected = [['시애틀', '뉴욕', 50.0],
                      ['시애틀', '시카고', 300.0],
                      ['시애틀', '토피카', 0.0],
                      ['샌디에고', '뉴욕', 275.0],
                      ['샌디에고', '시카고', 0.0],
                      ['샌디에고', '토피카', 275.0]]
        f_expected = [['f', 90.0]]     
        수요_예상 = [['new-york', 325.0], 
                           ['시카고', 300.0], 
                           ['토피카', 275.0]]
        scalaequation_expected = [['비용', '레벨', 0.0],
                                   ['비용', '한계', 1.0],
                                   ['비용', '낮은', 0.0],
                                   ['비용', '상한', 0.0],
                                   ['비용', '규모', 1.0]]
        scalarvariable_expected = [['z', 'level', 153.675],
                                   ['z', '상위', np.inf]]

        d_expected != connect.container["d"].records.values.tolist()인 경우:
            raise Exception("예기치 않은 데이터 매개변수 d.")
        x_expected != connect.container["x"].records.values.tolist()인 경우:
            raise Exception("예기치 않은 데이터 변수 x.")
        f_expected != connect.container["f"].records.values.tolist()인 경우:
            raise Exception("예기치 않은 데이터 스칼라 f.")
        수요가 예상되는 경우 != connect.container["demand"].records.values.tolist():
            raise Exception("예기치 않은 데이터 수요 방정식.")
        scalarequation_expected != connect.container["scalarequation"].records.values.tolist()인 경우:
            raise Exception("예기치 않은 데이터 비용 방정식.")
        scalarvariable_expected != connect.container["scalarvariable"].records.values.tolist()인 경우:
            raise Exception("예기치 않은 데이터 변수 z.")
$offEmbeddedCode

ii(i), jj(j)를 설정합니다.

ii(i) = 예$(ord(i)<= 1);
jj(j) = 예$(ord(j)<= 2);

별칭(i,i2);

매개변수 glo(i,i2);

glo(i,i2) =UniformInt(10,20);

변수 y(i,i2);

y.m(i,i2) = 5;

매개변수는(i);

is(i) = 균일Int(1,10);

Execute_unload 'out_i2.gdx';

* 실행 시간 테스트
ExecuteTool.checkErrorLevel 'sqlitewrite ids=ii,jj,glo,y,is o=out.dbappend=yes';

임베디드 코드 연결:
- SQL리더:
    연결: '데이터베이스':'out.db'
    기호:
      - 이름 : ii
        쿼리: "SELECT * FROM ii;"
        유형: 세트
      - 이름 : jj
        쿼리: "SELECT * FROM jj;"
        유형: 세트
      - 이름 : 글로
        쿼리: "SELECT * FROM glo;"
      - 이름 : y
        쿼리: "SELECT * FROM y;"
      - 이름 : 이다
        쿼리: "SELECT * FROM [is];"
- Python코드:
    코드: |
        예상 = 
        "ii" : [['시애틀', '']],

        "jj": [['뉴욕',''], ['시카고','']],

        "glo": [['시애틀', '시애틀', 11.0],
                ['시애틀', '샌디에고', 19.0],
                ['샌디에고', '시애틀', 16.0],
                ['샌디에고', '샌디에고', 13.0]],
                # 도메인의 별칭으로 매개변수를 테스트합니다.

        "y" : [['시애틀', '시애틀', '0.0', '5.0', '-inf', 'inf', 1.0],
                ['시애틀', '샌디에이고', '0.0', '5.0', '-inf', 'inf', 1.0],
                ['샌디에고', '시애틀', '0.0', '5.0', '-inf', 'inf', 1.0],
                ['샌디에고', '샌디에고', '0.0', '5.0', '-inf', 'inf', 1.0]],
                # 도메인의 별칭을 사용하여 변수를 테스트합니다.

        "is" : [['seattle', 3.0], ['san-diego', 3.0]] # SQL에 예약어 추가 테스트

        m = 연결.컨테이너

        예상.items()의 키, 값:
            값이 != m[key].records.values.tolist()인 경우:
                raise Exception(f"예기치 않은 데이터 >key<")
endEmbeddedCode

*도구는 별칭을 건너뛰어야 합니다.
ExecuteTool.checkErrorLevel 'sqlitewrite gdxIn=out_i2.gdx o=out_i2.db';

임베디드 코드 Python:
sqlite3을 SQL로 가져오기

sql.connect('out_i2.db')를 conn으로 사용:
    현재 = conn.cursor()
    cur.execute("sqlite_master에서 이름을 선택하세요. WHERE type='table' AND name='i2';")
    cur.fetchone() != 없음인 경우:
        raise Exception("별칭 i2는 건너뛰어야 합니다. 테이블 >i2<는 존재하지 않아야 합니다.")
endEmbeddedCode

* 빠른 테스트 옵션
glo(i,i2) = 균일Int(30,40)
ExecuteTool.checkErrorLevel 'sqlitewrite ids=glo o=out_fast.db fast=yes';

임베디드 코드 연결:
- SQL리더:
    연결: 'database':'out_fast.db'
    기호:
      - 이름 : 글로
        쿼리: "SELECT * FROM glo;"
- Python코드:
    코드: |
        예상 = 
        "glo": [['시애틀', '시애틀', 33.0],
                ['시애틀', '샌디에이고', 39.0],
                ['샌디에고', '시애틀', 30.0],
                ['샌디에고', '샌디에고', 35.0]],
                # 빠른 옵션 테스트

        m = 연결.컨테이너

        예상.items()의 키, 값:
            값이 != m[key].records.values.tolist()인 경우:
                raise Exception(f"예기치 않은 데이터 >key<")
endEmbeddedCode

* 테스트 옵션 소형
glo(i,i2) = 균일Int(50,60)
ExecuteTool.checkErrorLevel 'sqlitewrite ids=glo o=out_small.db small=Y';

임베디드 코드 연결:
- SQL리더:
    연결: 'database':'out_small.db'
    기호:
      - 이름: glo_table
        쿼리: "SELECT * FROM [glo$];"
      - 이름 : glo_view
        쿼리: "SELECT * FROM [glo];"
- Python코드:
    코드: |
        예상 = 
        "glo_table": [['1', '1', 60.0],
                    ['1', '2', 56.0],
                    ['2', '1', 60.0],
                    ['2', '2', 58.0]],
        "glo_view": [['시애틀', '시애틀', 60.0],
                    ['시애틀', '샌디에고', 56.0],
                    ['샌디에고', '시애틀', 60.0],
                    ['샌디에고', '샌디에고', 58.0]],
                # 테스트 옵션이 작음

        m = 연결.컨테이너

        예상.items()의 키, 값:
            값이 != m[key].records.values.tolist()인 경우:
                raise Exception(f"예기치 않은 데이터 >key<")
endEmbeddedCode