Пример #1
0
class TestCase(unittest.TestCase):
    def setUp(self):
        self.config = SPSConfig()
        self.modulefactory = ModuleFactory(self.config)

    def tests3rfail(self):
        results = []
        s3r = self.modulefactory.s3rmodule()
        logger.info("===============built===============")
        for t in range(4, 5):
            self.config.setParam("SCREEN_THICKNESS", t)
            ps = []
            xs = []
            std_xs = []
            for v in [BoundedVariable("day", i) for i in interval(1, 365 * YEAR, 1)]:
                dose = v.get_value() / 365.0 * (s3r.getConstant("S3R_K").get_value() /
                                                self.config.getParam("SCREEN_THICKNESS").get_value())
                # 阈值电压漂移
                xs.append(dose)
                x = s3r.getConstant("S3R_DELTAV_THRESHOLD").get_value() / (
                    s3r.getConstant("S3R_B").get_value() * exp(s3r.getConstant("S3R_B").get_value() * dose))
                std_x = (x - s3r.getConstant("S3R_A_MU").get_value()) / s3r.getConstant("S3R_A_SIGMA").get_value()
                p = 1 - pcf(std_x)
                ps.append(p)
                std_xs.append(std_x)
            logger.info("thickness={}, p_max={}".format(t, ps[-1]))
            results.append(ps)

        return results

    def get_parsed(self):
        constructor = ModelConstructor()
        model = constructor._parse("../../prism_model/smalltest.prism")
        return model

    # 测试同样的数据for parsed model
    def testparsing(self):
        parsed = self.get_parsed()
        days = range(1, YEAR * 365 + 1)
        s3r_mdl = parsed.get_module("S3R")
        results = []
        logger.info("===============parsed===============")
        for thickness in range(4, 5):
            probs = []
            parsed.setConstant("SCREEN_THICKNESS", thickness)
            for d in days:
                parsed.setVariable("day", d)
                fail_prob = s3r_mdl.commands["s3r_fail_cmd"].prob()
                probs.append(fail_prob)
            results.append(probs)
            logger.info("thickness={}, p_max={}".format(thickness, probs[-1]))
        return results

    def test_final(self):
        results_built = self.tests3rfail()[0]
        results_parsed = self.testparsing()[0]
        assert len(results_built) == len(results_parsed), "results array length not equal. "
        precision = 1e-6
        for index, (v1, v2) in enumerate(zip(results_parsed, results_built)):
            assert fabs(v1 - v2) <= precision, "day={}, v1={}, v2={}".format(index+1, v1, v2)
Пример #2
0
def check():
    config = SPSConfig()
    built = get_built_model()
    parsed = get_parsed_model()
    rslt1 = []
    rslt2 = []
    thickness = range(1, 10, 4)
    for t in thickness:
        config.setParam(THICKNESS, Constant(THICKNESS, t))
        parsed.setConstant(THICKNESS, t)
        checker1 = get_checker(built, ltl, DURATION)
        checker2 = get_checker(parsed, ltl, DURATION)
        rslt1.append(checker1.run())
        rslt2.append(checker2.run())

    precision = 2e-2
    for v1, v2 in zip(rslt1, rslt2):
        assert fabs(v1 - v2) < precision, "v1:{}, v2:{}".format(v1, v2)