4

制約のあるランダム トラフィックを生成するために一連のセットを使用していますが、次のような構文でセットの補数を計算する Specman マクロを呼び出せるようにしたいと考えています。

COMPLEMENT begin 
   domain=[0..10,24..30],
   complementing_set=[2..3,27..30] 
end

そしてそれを生成させます:

[0..1,4..10,24..26]

セットの補数が必要になるたびに、Specman の組み込み int_range_list オブジェクトを使用する代わりに、完全に入力されたリスト (たとえば {0;1;2;3....} ) を使用して要素を削除しています。また、コンパイル時ではなく実行時に、これらのセット計算の多くを行っています。

4

3 に答える 3

2

あなたはこれを試すことができます:

var domain: list of int = {0..10, 24..30}; 
var complementing_set: list of int = {2..3, 27..30};
var complement: list of int = domain.all(it in complementing set);

疑似メソッドはall、括弧内の条件が成立する親リスト内のすべての要素の親リストのサブリストを生成します。

于 2008-09-28T19:48:45.130 に答える
2

Specman の最近のバージョンでは、setまさにこの目的を果たす定義済みの型を使用できます。たとえば、次のようなことができます。

var s1: set = [1..5, 10..15];
var s2: set = [4..13];
var s3: set = s1.intersect(s2);

そしてこのように:

x: int;
y: int;
........
var s1: set = [x..y];
var s2: set = [1..10];
var s3: set = s1.union(s2);

于 2014-04-10T16:27:09.797 に答える
1

もう1つの方法は、500の可能な値があるとしましょう:

domain : uint(bits:500);
complement : uint(bits:500);
set : uint(bits:500) = domain & ~complement;

後でインデックスを抽出できます

set_l : list of uint = set[.]].all_indices(it==1);

ドメインと可能な値の比率によっては、この方法の方が計算が速い場合があります

于 2012-06-07T08:10:24.210 に答える