|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
강동호
가입: 2015년 9월 3일 올린 글: 17
|
올려짐: 2015년9월27일 17:55 주제: 과제2를 위한 테스트 케이스들 모아봐요! |
|
|
공유의 정신을 발휘하여... 코드를 검증할 수 있는 테스트 셋을 한번 모아봤으면 좋겠습니다.
댓글 달아주시면 원래 글에다가 포멧 맞춰서 올려놓도록 하겠습니다~
2.1 crazy2val
이번에 프원 과목에 과제가 유사해서 테스트 셋을 좀 빌려왔습니다. (출처: https://github.com/snu-sf-class/PP2015f_TA/blob/master/homeworks/hw1-skeleton/hw1-1-selfgrader.rkt)
아래의 테스트 코드는 제가 좀 수정해놨는데 아래 코드를 짜신 코드 맨 밑에 붙여넣고 돌리시면 됩니다. 싹다 true가 나와야해요...
코드: | let _=
let print_bool x = print_endline (string_of_bool x) in
print_bool (-1 = (crazy2val (MONE NIL)));
print_bool (1 = (crazy2val (ONE (ZERO (ZERO (ZERO NIL))))));
print_bool (1 = (crazy2val (ONE NIL)));
print_bool (9 = (crazy2val (MONE (MONE (ONE (ONE (ZERO NIL)))))));
print_bool (-13 = (crazy2val (MONE (ZERO (ONE (ZERO (ONE (MONE NIL))))))))
;;
|
2.2 crazy2add
이번에 프원 과목에 과제가 유사해서 테스트 셋을 좀 빌려왔습니다. (출처: https://github.com/snu-sf-class/PP2015f_TA/blob/master/homeworks/hw1-skeleton/hw1-2-selfgrader.rkt)
그 밑에 테스트 코드는 제가 좀 수정해놨는데 아래 코드를 짜신 코드 맨 밑에 붙여넣고 돌리시면 됩니다. 싹다 true가 나와야해요... 근데 여기서 crazy2val을 쓰도록 해놨으니 숙제 2.1에서 짠 crazy2val을 먼저 넣고 시작하셔요.
코드: | let rec crazy2val: crazy2 -> int = fun num ->
(이 부분에 자기가 짠 crazy2val 코드 넣기)
;;
let _=
let print_bool x = print_endline (string_of_bool x) in
print_bool (0 = (crazy2val (crazy2add (ZERO NIL, ZERO NIL))));
print_bool (0 = (crazy2val (crazy2add (MONE NIL, ONE NIL))));
print_bool (1 = (crazy2val (crazy2add (ZERO NIL, ONE NIL))));
print_bool (4 = (crazy2val (crazy2add (ONE (ONE NIL), ONE NIL))));
print_bool (-683 = (crazy2val (crazy2add (MONE (ZERO (ZERO (ZERO NIL))), (ZERO (ONE (ONE (ZERO (MONE (ONE (ONE (ZERO (ONE (ZERO (MONE NIL)))))))))))))))
;;
|
2.3 checkMetro
전부 true가 나와야 합니다!
코드: | let _=
let print_bool x = print_endline (string_of_bool x) in
let a81 = checkMetro (AREA("a", STATION "a")) in
let a82 = checkMetro (AREA("a", AREA("a", STATION "a"))) in
let a83 = checkMetro (AREA("a", AREA("b", CONNECT(STATION "a", STATION "b")))) in
let a84 = checkMetro (AREA("a", CONNECT(STATION "a", AREA("b", STATION "a")))) in
let a85 = checkMetro (AREA("a", STATION "b")) in
let a86 = checkMetro (AREA("a", CONNECT(STATION "a", AREA("b", STATION "c")))) in
let a87 = checkMetro (AREA("a", AREA("b", CONNECT(STATION "a", STATION "c")))) in
print_bool(false = checkMetro ( STATION "a"));
print_bool(true = checkMetro ( CONNECT (AREA ("a", STATION "a"), AREA ("b", AREA("a", CONNECT(STATION "b", STATION "a"))))));
print_bool(false = checkMetro ( CONNECT (AREA ("c", STATION "c"), AREA ("b", AREA("a", CONNECT(STATION "b", STATION "c"))))));
print_bool(true = a81);
print_bool(true = a82);
print_bool(true = a83);
print_bool(true = a84);
print_bool(false = a85);
print_bool(false = a86);
print_bool(false = a87)
;; |
2.4 zip-zip-tree
테스트셋: 아래 코드를 짜신 코드 맨 밑에 놓고 ocaml 실행기에서 돌렸을때... 참고로 ocaml 실행기에서 돌리는 방법은 (이글: https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=4315)의 쓰레드들을 참조하세요!
코드: | let loc1 = LOC (NODE [NODE [LEAF "a"; LEAF "*"; LEAF "b"];
LEAF "+";
NODE [LEAF "c"; LEAF "*"; LEAF "d"]],
TOP)
let (|>) g f = f g
let a91 = loc1 |> goDown
let a92 = loc1 |> goDown |> goDown
let a93 = loc1 |> goDown |> goUp |> goDown
let a94 = loc1 |> goDown |> goDown |> goRight
let a95 = loc1 |> goDown |> goDown |> goRight |> goLeft |> goRight |> goRight
let a96 = loc1 |> goDown |> goRight |> goRight |> goDown |> goRight
let a97 =
try (loc1 |> goUp |> ignore); false with NOMOVE _ -> true
;; |
결과: 각각 이렇게 나오면 된다네요.
코드: | val a91 : location =
LOC (NODE [LEAF "a"; LEAF "*"; LEAF "b"],
HAND ([], TOP, [LEAF "+"; NODE [LEAF "c"; LEAF "*"; LEAF "d"]]))
val a92 : location =
LOC (LEAF "a",
HAND ([], HAND ([], TOP, [LEAF "+"; NODE [LEAF "c"; LEAF "*"; LEAF "d"]]),
[LEAF "*"; LEAF "b"]))
val a93 : location =
LOC (NODE [LEAF "a"; LEAF "*"; LEAF "b"],
HAND ([], TOP, [LEAF "+"; NODE [LEAF "c"; LEAF "*"; LEAF "d"]]))
val a94 : location =
LOC (LEAF "*",
HAND ([LEAF "a"],
HAND ([], TOP, [LEAF "+"; NODE [LEAF "c"; LEAF "*"; LEAF "d"]]),
[LEAF "b"]))
val a95 : location =
LOC (LEAF "b",
HAND ([LEAF "*"; LEAF "a"],
HAND ([], TOP, [LEAF "+"; NODE [LEAF "c"; LEAF "*"; LEAF "d"]]),
[]))
val a96 : location =
LOC (LEAF "*",
HAND ([LEAF "c"],
HAND ([LEAF "+"; NODE [LEAF "a"; LEAF "*"; LEAF "b"]], TOP, []),
[LEAF "d"]))
val a97 : bool = true |
2.5 galculator
이전 게시판에서 가져온 (출처: https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3807) 테스트 셋입니다.
윗줄을 넣었을 때 아랫줄의 결과가 나오면 됩니다.
코드: | galculator X;;
Exception: FreeVariable.
galculator (SIGMA (INT 1, INT 10, SUB(MUL(X, X), INT 1)));;
float = 375.
galculator (SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)));;
float = 375.
galculator (INTEGRAL (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)));;
float = 319.064999999…
galculator (INTEGRAL (REAL 10., REAL 1., SUB(MUL(X, X), INT 1)));;
float = -319.06499999…
galculator (INTEGRAL (REAL 10., SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), INT 1)));;
float = 17556346.1239999793
galculator (INTEGRAL (REAL 10., SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), X)));;
float = 17486504.2639999
galculator (INTEGRAL (ADD (X, REAL 1.), SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), X)));;
exception: FreeVariable. |
2.6 Queue2Stack
테스트 케이스
코드: | let q1 = IntListQ.emptyQ
let q2 = IntListQ.enQ(IntListQ.enQ(IntListQ.enQ(q1, [1]), [2; 3]), [4; 5; 6])
let (e1, q3) = IntListQ.deQ q2 ;;
|
결과 : 제가 돌린 결과는 이런데 같이 비교해봤으면 좋겠습니다!
코드: | val q1 : IntListQ.queue = ([], [])
val q2 : IntListQ.queue = ([[4; 5; 6]; [2; 3]; [1]], [])
val e1 : IntListQ.element = [1]
val q3 : IntListQ.queue = ([], [[2; 3]; [4; 5; 6]]) |
(추가로 여기에도 테스트 케이스 있습니다: https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3809)
2.7 ZEXPR
실행기에서 입력하시면 됩니다.
코드: | Zexpr.print_value(Zexpr.eval(Zexpr.emptyEnv, (Zexpr.NUM 1)));;
let xpx = Zexpr.PLUS((Zexpr.VAR "x"),(Zexpr.VAR "x")) in
let e1 = Zexpr.LET("x", (Zexpr.NUM 1), (Zexpr.PLUS (Zexpr.LET("x", xpx, xpx), (Zexpr.VAR "x")))) in
Zexpr.print_value(Zexpr.eval(Zexpr.emptyEnv, e1));;
Zexpr.print_value(Zexpr.eval(Zexpr.emptyEnv, (Zexpr.MAX [])));;
Zexpr.print_value(Zexpr.eval(Zexpr.emptyEnv, (Zexpr.MAX [Zexpr.NUM (-1)])));; |
한줄씩 입력했을 때 이렇게 나오게 됩니다! (여기서 -: unit = () 이 붙는 이유는 아마도 실행기에서 출력의 type을 보여주기 때문인거 같은데요... 이거 이런 결과가 나오는게 맞는건지... 능력자 분들의 조언 부탁드려요!)
코드: | 1- : unit = ()
5- : unit = ()
0- : unit = ()
-1- : unit = () |
강동호 가 2015년9월30일 10:15에 수정함, 총 13 번 수정됨 |
|
위로 |
|
|
조범석
가입: 2015년 9월 4일 올린 글: 6
|
올려짐: 2015년9월28일 19:14 주제: 감사합니다 |
|
|
엄청난 도움이 ㅠㅠ |
|
위로 |
|
|
이경건
가입: 2013년 9월 12일 올린 글: 18
|
올려짐: 2015년9월29일 11:35 주제: 2.3 테스트케이스에 사소한 수정이 필요합니다. |
|
|
2.3의 두번째 테스트케이스
print_bool(true = checkMetro ( CONNECT (AREA ("a", STATION "a"), AREA ("b", AREA("a", CONNECT(STATION "b", STATION " a")))))); 가 true가 나와야 한다고 되어 있는데요, 제가 짠 코드에서 돌려보면 여기서만 false가 나옵니다.
이유를 곰곰이 생각해보았는데, 마지막 부분에서 STATION " a" 라고 표현된 부분이 문제인 것 같습니다. STATION "a"로 수정하면 true가 잘 나오네요. " a"랑 "a"는 서로 다른 string이니까 자연스러운 결과인 것 같습니다.
너무 사소한 걸로 태클거는 것 같아 죄송하지만 그래도 혹 저처럼 고민하시는 분들이 계실까 하여 말씀드려봅니다. |
|
위로 |
|
|
강동호
가입: 2015년 9월 3일 올린 글: 17
|
올려짐: 2015년9월29일 12:53 주제: 아! 문제가 있었던 모양이네요... |
|
|
수정해놓았습니다. 코멘트 감사합니다!
더불어서 기존의 galculator 테스트 케이스가 stack overflow를 일으켜서 조금 짧은 테스트 케이스들로 교체해놨습니다. |
|
위로 |
|
|
신지민
가입: 2015년 9월 3일 올린 글: 9
|
올려짐: 2015년9월29일 18:45 주제: 감사합니다 ㅎㅎㅎㅎ |
|
|
도움이 많이 되었어요
저는 정말 간단한 거 몇 개만 돌려봤어서 ㅠㅠ
2-6에서는 같은 결과가 나오네용 |
|
위로 |
|
|
조범석
가입: 2015년 9월 4일 올린 글: 6
|
올려짐: 2015년9월29일 21:26 주제: |
|
|
7번에 두번째 케이스 저만 스텍오버플로우인가요 ㅠㅠ
그리고 결과가 - : int = 1 로 나오는데 스펙에서는
인용: | print_value함수는 계산된 결과값을, 10진수 형태로 표준 출력해야 합니다. ("1", "-2", "100" 등) |
라고 나와있네요
5번은 오차때문인지 조금 다르게 나와요 ㅠ
인용: | # galculator X;;
Exception: FreeVariable.
# galculator (SIGMA (INT 1, INT 10, SUB(MUL(X, X), INT 1)));;
- : float = 375.
# galculator (SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)));;
- : float = 375.
# galculator (INTEGRAL (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)));;
- : float = 328.964999999999236
# galculator (INTEGRAL (REAL 10., REAL 1., SUB(MUL(X, X), INT 1)));;
- : float = -328.964999999999236
# galculator (INTEGRAL (REAL 10., SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), INT 1)));;
- : float = 17570401.0249999799
# galculator (INTEGRAL (REAL 10., SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), X)));;
- : float = 17500521.7749999054
# galculator (INTEGRAL (ADD (X, REAL 1.), SIGMA (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)), SUB(MUL(X, X), X)));;
Exception: FreeVariable.
|
6번은 저도 같은결과입니다
조범석 가 2015년9월29일 21:57에 수정함, 총 1 번 수정됨 |
|
위로 |
|
|
이지은
가입: 2014년 9월 6일 올린 글: 19
|
올려짐: 2015년9월29일 21:50 주제: hw2_7 |
|
|
2-7에서 결과가
1 - : unit = ()
이렇게 나와야하는거죠??
나머지는 모두 같습니다 감사합니다 |
|
위로 |
|
|
최현일
가입: 2015년 9월 3일 올린 글: 14
|
올려짐: 2015년9월30일 9:26 주제: 정말정말 감사합니다 |
|
|
추천 버튼 없는게 한이네요 ㅜㅜ |
|
위로 |
|
|
강동호
가입: 2015년 9월 3일 올린 글: 17
|
올려짐: 2015년9월30일 10:16 주제: 감사합니다! |
|
|
조범석님! 감사합니다. 놓치고 있었던 부분인데 큰일 날뻔 했네요.
위에 다시 수정해놨습니다!
galculator 오차 부분은 조교님께서 수정하신 스펙을 다시 한번 확인해보시면 오차를 줄일 수 있을 것 같네요! |
|
위로 |
|
|
김택민
가입: 2011년 10월 5일 올린 글: 7
|
올려짐: 2015년9월30일 10:21 주제: |
|
|
**(수정) 제가 경계값을 다르게 생각했었네요. 본문의 테스트셋이 맞는 거 같아요.
**(원본)
c로 돌려보니 5번 테스트 셋이 아래 값과 비슷하게 나오네요
코드: | # galculator (INTEGRAL (REAL 1., REAL 10., SUB(MUL(X, X), INT 1)));;
- : float = 328.964999999999236
# galculator (INTEGRAL (REAL 10., REAL 1., SUB(MUL(X, X), INT 1)));;
- : float = -328.964999999999236 |
김택민 가 2015년9월30일 15:28에 수정함, 총 1 번 수정됨 |
|
위로 |
|
|
조상우15
가입: 2015년 9월 7일 올린 글: 27
|
올려짐: 2015년9월30일 10:50 주제: |
|
|
7번 2번째 케이스 저도 오버플로우 났었는데, environment를 잘못 설정해서 그랬던 것 같습니다. 수정했더니 오버플로우 안나네요. |
|
위로 |
|
|
조상우15
가입: 2015년 9월 7일 올린 글: 27
|
올려짐: 2015년9월30일 12:04 주제: |
|
|
galculator 추가적인 테스트 케이스인데 맞게 나온건지 모르겠네요..
코드: |
let test1 = SIGMA( INT 1, INT 10, MUL(X,X) )
let test2 = SIGMA( INT 1, INT 10, ADD( SIGMA (INT 1, X, X) , X) )
let test3 = SIGMA( INT 1, INT 20, SIGMA( INT 1, MUL(X,X) , X ) )
let _= print_string "test1 :" ; print_float (galculator test1); print_string "\n";;
let _= print_string "test2 :" ; print_float (galculator test2); print_string "\n";;
let _= print_string "test3 :" ; print_float (galculator test3); print_string "\n";;
|
test1 : 385
test2 : 275
test3 : 362768
이 나오는데 저랑 다르게 나오시는 분 혹시 계신가요? |
|
위로 |
|
|
조범석
가입: 2015년 9월 4일 올린 글: 6
|
올려짐: 2015년9월30일 15:32 주제: 해결했어요 |
|
|
5번에서 발생한 오차는 스펙참고해서 수정했더니 결과 똑같이 나오네요
7번도 environment를 잘못설정했더군요 스텍오버플로우 없이 똑같이 돌아갑니다
조상우님 올려주신 테스트 케이스 돌려봤는데 똑같이 나옵니다 |
|
위로 |
|
|
서장호
가입: 2015년 9월 3일 올린 글: 8
|
올려짐: 2015년9월30일 22:15 주제: |
|
|
글타래 본문의 테스트케이스, 그리고 조상우님 테스트케이스 모두 같게 나옵니다. 다만:
* galculator float 결과가 소숫점 일곱자리 아래에서 조금씩 다르게 나옵니다. 뭐 관계없겠죠.
* Queue2Stack 결과에서 값은 다 같게 나오는데 타입이
** IntListQ.queue 대신 'a list * 'b list 또는 int list list * 'a list 또는 int list list * int list list로 나옵니다.
** IntListQ.element 대신 int list 로 나옵니다.
테스트케이스를 만들고 모아주신 분들께 감사드립니다.
장호 드림 |
|
위로 |
|
|
최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년10월1일 23:39 주제: |
|
|
모두들 수고 많으셨습니다.
조교 드림 |
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|