SWI-Prolog에서도 테스트를 쓰자.

11943 단어 PrologSWI-Prolog

소개



Prlog에서도 테스트 쓸 수 있으면 좋다고 생각하거나 하는 것입니다.
SWI-Prolog에서도 테스트를 작성할 수 있습니까?
대답은 예입니다. 라는 것으로 보고하는 대로입니다.

1. 우선 사용해 본다



예를 들어 다음과 같은 Prolog 술어 정의가 있습니다.
% fun1.pl
add(A,B,C) :- C is A+B.
mul(A,B,C) :- C is A*B.

이것을 테스트하려면 다음과 같이 작성하십시오.
% funtest1.pl
:- use_module(fun).

:- begin_tests(add).
  test(add1_2) :- add(1,2,3).
  test(add0_1) :- add(0,1,1).
:- end_tests(add).

:- begin_tests(mul).
  test(mul1_2) :- mul(1,2,2).
  test(mul0_1) :- mul(0,1,0).
  test(mul10_20) :- mul(10,20,200).
:- end_tests(mul).

:- run_tests.
:- halt.

테스트 코드는 begin_tests/1end_tests/1 로 씨로 씁니다. 이때 :- 를 잊지 말고 씁시다. 이것 쓰고 처음 움직이지 않고 고민 버렸습니다 w

실행하려면 run_tests를 실행하면 움직입니다.begin_testsend_tests 의 이름은 같지 않으면 안됩니다.
꽤 깨끗하게 테스트를 쓸 수 있습니다.

테스트 실행은
$ swipl funtest.pl
% PL-Unit: add .. done
% PL-Unit: mul ... done
% All 5 tests passed

너무 쉽게?

2. 모듈을 전환하여 사용한다.



그럼 실제로 좀 더 복잡한 사용법을 해봅시다.
이전의 프로그램을 fun.pl이라는 이름으로 저장합니다.
:- module(fun, [add/3,mul/3]).
% fun.pl
add(A,B,C) :- C is A+B.
mul(A,B,C) :- C is A*B.

그런데 다른 버전의 구현을 만들기로 했다고 합시다.
:- module(fun2, [add/3,mul/3]).
% fun2.pl
add(A,B,C) :- C is A+B.
mul(A,B,C) :- C is A*B.

귀찮아서 같은 프로그램을 복사했을 뿐입니다만, 같은 테스트 프로그램으로 테스트 할 수 있으면 편리합니다.

그럴 때는, 커멘드 라인 인수를 보고 읽어들이는 모듈을 바꿀 수 있도록 하고 있습니다.
% funtest.pl
:- current_prolog_flag(argv, [M]),!,format('use ~w\n',[M]),use_module(M) ;
   use_module(fun).

:- begin_tests(add).
  test(add1_2) :- add(1,2,3).
  test(add0_1) :- add(0,1,1).
:- end_tests(add).

:- begin_tests(mul).
  test(mul1_2) :- mul(1,2,2).
  test(mul0_1) :- mul(0,1,0).
  test(mul10_20) :- mul(10,20,200).
:- end_tests(mul).

:- run_tests.
:- halt.

이렇게하면 기본적으로 fun.pl이 테스트됩니다.
$ swipl funtest.pl
% PL-Unit: add .. done
% PL-Unit: mul ... done
% All 5 tests passed

fun2.pl의 빗질을하고 싶을 때는 다음과 같이 인수를 전달하여 테스트 할 수 있습니다.
$ swipl funtest.pl fun2
use fun2
% PL-Unit: add .. done
% PL-Unit: mul ... done
% All 5 tests passed

3. Makefile을 쓰자.



Makefile 만들기
test: test1 test2
test1:
    swipl funtest.pl
test2:
    swipl funtest.pl fun2

등이라고 쓰면,
$ make test
swipl funtest.pl
% PL-Unit: add .. done
% PL-Unit: mul ... done
% All 5 tests passed
swipl funtest.pl fun2
use fun2
% PL-Unit: add .. done
% PL-Unit: mul ... done
% All 5 tests passed

로 정리해 테스트 할 수 있어 편리합니다.

3. 더 자세한 정보



SWI-Prolog Prolog Unit Tests에는 더 자세한 정보가 있습니다. 참고하십시오.

4. 정리



SWI-Prolog에서 테스트를 작성해 보았습니다.
이 기사의 프로그램은 다음에서 다운로드 할 수 있습니다.

htps : // 기 st. 기주 b. m / hsk / f712 a b7 4 400211557 a3 59 e d381f

참고



Prolog Unit Tests

좋은 웹페이지 즐겨찾기