我有一个struct(例如mystruct_s),在不同的层次结构中有几个相同的类型结构(例如packet_s)。
( sum(Status='Approved') / COUNT(*)) * 100
我想生成一个mystruct_s实例,并强制所有活动包的大小总和小于1K。
SELECT `Reviewer`,
`ProjectID`,
COUNT(*) as NumberOfTimesProjectSubmitted ,
( sum(Status='Approved') / COUNT(*)) * 100 Approval_Percentage
FROM `Project_Assignment`
GROUP by ProjectID,Reviewer
有没有一种简单的方法可以解决这个问题?
答案 0 :(得分:2)
直接的解决方案是使用三元和加号来计算活动时的大小:
var s : mystruct_s;
gen s keeping {
(it.p.active ? it.p.size : 0) + (it.q.p.active ? it.q.p.size : 0) + (it.w.p.active ? it.w.p.size : 0) < 1024 ;
};
如果您使用Specman 14.1(或更高版本),您可以使用生成文字列表和sum来编写以下约束:
var s : mystruct_s;
gen s keeping {
{it.p; it.q.p; it.w.p}.sum(it.active ? it.size : 0)) < 1024 ;
};
使用生成文字列表还可以更好地分配大小。
如果你使用Specman 14.2(或更高版本),你可以使用条件和而不是三元和:
var s : mystruct_s;
gen s keeping {
{it.p; it.q.p; it.w.p}.sum(it.size, it.active) < 1024 ;
};
答案 1 :(得分:0)
用一个列表替换packet_s的所有实例。 然后使用list伪方法.sum约束
答案 2 :(得分:0)
尝试(不确定这是否有效):
扩展my_struct { keep {p.size p.active.as_a(bit),w.p.size w.p.active.as_a(bit),...}。sum(it)&lt; 1024; }
答案 3 :(得分:-1)
Keep %{mystruct.p.size, mystruct.q.p, ...}.count(it) < 1K