2017-03-23 11 views
0

pytestを使用して単体テストを書き込んだpyclips/clipsプログラムがあります。 各テストケースには、最初にclips.Clear()が含まれ、続いてclips.Load(rule_file.clp)によって実クリップCOOLコードが実行されます。各テストを個別に実行すると問題はありません。CLIPS(クリア)コマンドが失敗する/ pyclipsで例外がスローされる

しかし、すべてのテストを実行するようにpytestに指示すると、失敗するものはClipsError: S03: environment could not be clearedで失敗します。実際、それは.pyファイル内のテストの順序に依存します。テストケースがあるようで、後続のテストケースで例外がスローされることがあります。

いくつかのクリップのコードはまだ「使用中」なので、クリアに失敗することがありますか? 私は(clear)

クリップをクリアしていることhereをお読みください。 CLIPS環境からすべての構造体および関連するすべてのデータ構造(ファクトおよびインスタンスなど)を削除します。クリアはいつでも安全に実行できますが、特定のコンストラクトは使用中に削除されません。

この場合もありますか? (clear)コマンドが失敗する原因は何ですか?

EDIT:

私は問題を絞り込むことができました。次の状況で発生します。

test_case_Aはtest_case_Bの直前です。 test_case_Aで がかかる

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

としてtestがあるが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側で問題を修正することもできます。 –

関連する問題