2017-03-23 5 views
0

pytest를 사용하여 일부 단위 테스트를 작성한 pyclips/clips 프로그램이 있습니다. 각 테스트 케이스는 초기 clips.Clear()을 포함하고 clips.Load(rule_file.clp)을 통해 실제 클립 COOL 코드를 실행합니다. 각 테스트를 개별적으로 실행하면 문제가 없습니다.CLIPS (지우기) 명령은 pyclips에서 실패/예외를 throw합니다.

그러나 모든 테스트를 실행하기 위해 pytest에 말하면 일부는 ClipsError: S03: environment could not be cleared으로 실패합니다. 사실 그것은 .py 파일의 테스트 순서에 따라 다릅니다. 테스트 케이스가있는 것으로 보이는데, 이는 후속 테스트 케이스가 예외를 던질 수있게한다.

일부 클립 코드는 여전히 "사용 중"이므로 삭제가 실패 할 수 있습니까? 나는 (clear)

클립을 삭제하는 것이 here를 참조하십시오. CLIPS 환경에서 모든 생성자 및 모든 관련 데이터 구조 (예 : 사실 및 인스턴스)를 제거합니다. 명확한 작업은 언제든지 안전하게 수행 할 수 있지만 특정 구문은 사용 중에 삭제되지 않습니다.

여기에 해당 할 수 있습니까? (clear) 명령이 실패하는 원인은 무엇입니까?

편집 :

내가 문제를 좁힐 수 있었다. 다음 상황에서 발생합니다.

test_case_A는 test_case_B 바로 앞에옵니다. test_case_A에서 는이 test 이러한

(test (eq (type ?f_bio_puts) clips_FUNCTION)) 

하지만 f_bio_puts

그래서 처음 [nil]로 설정된 슬롯 변수의 타입을 테스트

(slot f_bio_puts (default [nil]))

로 설정되어있다, 보인다 (clear) 명령이 실패하게하십시오. 어떤 아이디어?

EDIT 2

나는 문제의 원인이 무엇인지 생각합니다. test 행입니다. 클립 코드 대화 상자에서 코드를 실행하도록 코드를 수정했습니다. 나는이 마스크되는 pyclips의 버그 것 같다 (batch ...)

[INSFUN2] No such instance nil in function type. 
[DRIVE1] This error occurred in the join network 
    Problem resided in associated join 
     Of pattern #1 in rule part_1 

를 통해로드 할 때이 오류를 얻었다.

답변

1

변경 오류 플래그를 재설정 코드의 다음 행을 추가 클립 소스 코드 construct.c 파일의 EnvClear 기능이 게리를 조사하기위한

globle void EnvClear(
    void *theEnv) 
    { 
    struct callFunctionItem *theFunction; 

    /*==============================*/ 
    /* Clear error flags if issued */ 
    /* from an embedded controller. */ 
    /*==============================*/ 

    if ((EvaluationData(theEnv)->CurrentEvaluationDepth == 0) && 
     (! CommandLineData(theEnv)->EvaluatingTopLevelCommand) && 
     (EvaluationData(theEnv)->CurrentExpression == NULL)) 
    { 
     SetEvaluationError(theEnv,FALSE); 
     SetHaltExecution(theEnv,FALSE); 
    } 
+0

감사합니다. 당신의 대답은 클립에 버그가 있음을 의미합니까? 다가올 버전에서 변경 될 예정입니까? 아니면 디자인면에서 이런 느낌일까요? – stackoverflowwww

+1

그것은 버그입니다. CLIPS를 명령 프롬프트와 대화식으로 사용하면 발행 된 각 명령과 함께 오류 플래그가 자동으로 재설정됩니다. 포함될 때 개별 API 호출은 오류 플래그를 재설정해야합니다.다른 API 호출과 관련하여이 문제가 발생하는 경우 임베디드 컨트롤러를 확인하기위한 추가 코드없이 오류 플래그를 재설정하여 pyclips 측에서 문제를 해결할 수도 있지만 다음 릴리스에서는 수정 될 예정입니다. –