설명
이 프로그램은 다음을 생성하여 기본 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