게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

과제2를 위한 테스트 케이스들 모아봐요!

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2015)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
강동호



가입: 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에서는 같은 결과가 나오네용 Razz
위로
사용자 정보 보기 비밀 메시지 보내기
조범석



가입: 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    주제: 인용과 함께 답변

모두들 수고 많으셨습니다.

조교 드림
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2015) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay