2016-04-14 6 views
0

与えられたプログラムに対して、異なるパスに対応する有効な入力範囲を決定したいと思います。例えば異なる条件で与えられた変数の範囲を分割する方法は?

def test(a): 

    if (a < 50): 
     return 1 
    else: 
     return -1 

ので、このプログラムのために、2つのパスがあります。 1つのパスは1を返し、別のパスは-1を返します。 、その条件は2文字列要素が含まれていることを

conditions = get_path_conditions(test) 

["a<50", "a>=50"]

入力のレンジを想定します。与えられた関数は(あなたはまた、独自の機能を設計することができます)パス条件のリストを返すことができることがあるとしa = "(-100,100)"(便宜上、下限と上限を表すために文字列を使用していますが、これは私たちが数学と同じように使用しています。

異なる条件を異なる入力範囲にマップできる関数を設計するにはどうすればよいですか?

conditions = ["a<50", "a>=50"] 
a = "(-100,100)" 
input_ranges = get_inputs(conditions,a) 

input_rangesは、2つの要素があるように:["(-100,50)","[50,100)"]

同様の質問を:あなたの条件がブールの場合は

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3658

+4

私はこれが達成するはずのことを理解していません。それは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)かもしれません。このアプローチが解決しようとしていた「オリジナル」問題はありますか? – TigerhawkT3

+0

コメントありがとうございます。私はプログラムを分析する方法を見つけようとしています。 KLEEは、異なる経路に対応する異なるテストケースを生成することによってそれを行うことができる(例えば、if/elseが異なる経路に進む)。各パスのシンボリック式を生成することはできますが、入力のためのすべての具体的な値を与えるわけではありません。だから私は、異なるパスの具体的な値の範囲を決定しようとしています。 – 2hc

答えて

0

、あなたはそのための(ラムダ)関数を使用することができます。あなたの例を使用する:

conditions = [lambda x:x<50, lambda x:x=>50] 

それともdefを使用して関数を定義し、条件のリスト内の名前によってそれらを参照することができます。

関連する問題