示例#1
0
def test_Generator_GetOrAdd_only_different_optset(session):
  generator_a = deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session,
    deepsmith_pb2.Generator(name="name", opts={"a": "A", "b": "B", "c": "C",},),
  )
  generator_b = deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session, deepsmith_pb2.Generator(name="name", opts={"d": "D",},)
  )
  generator_c = deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session, deepsmith_pb2.Generator(name="name", opts={},)
  )
  assert session.query(deeplearning.deepsmith.generator.Generator).count() == 3
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOpt).count() == 4
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptSet).count() == 4
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptName).count()
    == 4
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptValue).count()
    == 4
  )
  assert len(generator_a.optset) == 3
  assert len(generator_b.optset) == 1
  assert len(generator_c.optset) == 0
示例#2
0
文件: 20180323.py 项目: BeauJoh/phd
def _GetOpenCLGenerator(generator_id) -> deepsmith_pb2.Generator:
    if generator_id == 0:
        return deepsmith_pb2.Generator(
            name="clsmith",
            opts={
                "git_commit": "b637b31c31e0f90ef199ca492af05172400df050",
                "git_remote": "https://github.com/ChrisCummins/CLSmith.git",
            })
    elif generator_id == 1:
        return deepsmith_pb2.Generator(
            name="clgen",
            opts={
                "git_commit": "9556e7112ba2bd6f79ee59eef74f0a2304efa007",
                "git_remote": "https://github.com/ChrisCummins/clgen.git",
                "version": "0.4.0.dev0",
            })
    elif generator_id == 2:
        return deepsmith_pb2.Generator(
            name="randchar",
            opts={
                "url":
                "https://github.com/ChrisCummins/dsmith/blob/fd986a36a23b2a398f33d5b5852d930b462401b1/dsmith/opencl/generators.py#L175",
            })
    else:
        raise LookupError
示例#3
0
def test_Generator_GetOrAdd_ToProto_equivalence(session):
    proto_in = deepsmith_pb2.Testcase(
        toolchain="cpp",
        generator=deepsmith_pb2.Generator(name="generator", ),
        harness=deepsmith_pb2.Harness(name="harness", ),
        inputs={
            "src": "void main() {}",
            "data": "[1,2]"
        },
        invariant_opts={"config": "opt"},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client="localhost",
                type="generate",
                duration_ms=100,
                event_start_epoch_ms=101231231,
            ),
        ],
    )
    testcase = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session, proto_in)

    # NOTE: We have to flush so that SQLAlchemy resolves all of the object IDs.
    session.flush()
    proto_out = testcase.ToProto()
    assert proto_in == proto_out
    proto_out.ClearField("toolchain")
    assert proto_in != proto_out  # Sanity check.
示例#4
0
def test_Generator_GetOrAdd(session):
  proto = deepsmith_pb2.Generator(
    name="name", opts={"version": "1.0.0", "build": "debug+assert",}
  )
  generator = deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session, proto
  )

  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptSet).count() == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOpt).count() == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptName).count()
    == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptValue).count()
    == 2
  )

  assert generator.name == "name"
  assert len(generator.optset) == 2
  assert len(generator.opts) == 2
  assert generator.opts["version"] == "1.0.0"
  assert generator.opts["build"] == "debug+assert"
示例#5
0
def test_Generator_GetOrAdd_rollback(session):
  deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session, deepsmith_pb2.Generator(name="name", opts={"a": "1", "b": "2",},)
  )
  assert session.query(deeplearning.deepsmith.generator.Generator).count() == 1
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOpt).count() == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptSet).count() == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptName).count()
    == 2
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptValue).count()
    == 2
  )
  session.rollback()
  assert session.query(deeplearning.deepsmith.generator.Generator).count() == 0
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOpt).count() == 0
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptSet).count() == 0
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptName).count()
    == 0
  )
  assert (
    session.query(deeplearning.deepsmith.generator.GeneratorOptValue).count()
    == 0
  )
示例#6
0
def ConfigToGenerator(
        config: generator_pb2.ClsmithGenerator) -> deepsmith_pb2.Generator:
    """Convert a config proto to a DeepSmith generator proto."""
    g = deepsmith_pb2.Generator()
    g.name = 'clsmith'
    g.opts['opts'] = ' '.join(config.opt)
    return g
示例#7
0
def test_Generator_GetOrAdd_ToProto_equivalence(session):
    proto_in = deepsmith_pb2.Testcase(
        toolchain='cpp',
        generator=deepsmith_pb2.Generator(name='generator', ),
        harness=deepsmith_pb2.Harness(name='harness', ),
        inputs={
            'src': 'void main() {}',
            'data': '[1,2]'
        },
        invariant_opts={'config': 'opt'},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='generate',
                duration_ms=100,
                event_start_epoch_ms=101231231,
            ),
        ])
    testcase = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session, proto_in)

    # NOTE: We have to flush so that SQLAlchemy resolves all of the object IDs.
    session.flush()
    proto_out = testcase.ToProto()
    assert proto_in == proto_out
    proto_out.ClearField('toolchain')
    assert proto_in != proto_out  # Sanity check.
示例#8
0
def test_Generator_GetOrAdd_rollback(session):
    deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session,
        deepsmith_pb2.Generator(
            name='name',
            opts={
                'a': '1',
                'b': '2',
            },
        ))
    assert session.query(
        deeplearning.deepsmith.generator.Generator).count() == 1
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOpt).count() == 2
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptSet).count() == 2
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptName).count() == 2
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptValue).count() == 2
    session.rollback()
    assert session.query(
        deeplearning.deepsmith.generator.Generator).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOpt).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptSet).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptName).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptValue).count() == 0
示例#9
0
def ConfigToGenerator(
    config: generator_pb2.ClsmithGenerator, ) -> deepsmith_pb2.Generator:
    """Convert a config proto to a DeepSmith generator proto."""
    g = deepsmith_pb2.Generator()
    g.name = "clsmith"
    g.opts["opts"] = " ".join(config.opt)
    return g
示例#10
0
def ClgenInstanceToGenerator(
    instance: sample.Instance, ) -> deepsmith_pb2.Generator:
    """Convert a CLgen instance to a DeepSmith generator proto."""
    g = deepsmith_pb2.Generator()
    g.name = "clgen"
    g.opts["model"] = str(instance.model.path)
    g.opts["sampler"] = instance.sampler.hash
    return g
示例#11
0
def ClgenInstanceToGenerator(
        instance: clgen.Instance) -> deepsmith_pb2.Generator:
    """Convert a CLgen instance to a DeepSmith generator proto."""
    g = deepsmith_pb2.Generator()
    g.name = 'clgen'
    g.opts['model'] = instance.model.hash
    g.opts['sampler'] = instance.sampler.hash
    return g
示例#12
0
    def ToProto(self) -> deepsmith_pb2.Generator:
        """Create protocol buffer representation.

    Returns:
      A Generator message.
    """
        proto = deepsmith_pb2.Generator()
        return self.SetProto(proto)
示例#13
0
def test_duplicate_testcase_testbed_ignored(session):
    """Test that result is ignored if testbed and testcase are not unique."""
    proto = deepsmith_pb2.Result(
        testcase=deepsmith_pb2.Testcase(
            toolchain='cpp',
            generator=deepsmith_pb2.Generator(name='generator'),
            harness=deepsmith_pb2.Harness(name='harness'),
            inputs={
                'src': 'void main() {}',
                'data': '[1,2]',
            },
            invariant_opts={
                'config': 'opt',
            },
            profiling_events=[
                deepsmith_pb2.ProfilingEvent(
                    client='localhost',
                    type='generate',
                    duration_ms=100,
                    event_start_epoch_ms=1123123123,
                ),
            ]),
        testbed=deepsmith_pb2.Testbed(
            toolchain='cpp',
            name='clang',
            opts={'arch': 'x86_64'},
        ),
        returncode=0,
        outputs={'stdout': 'Hello, world!'},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='exec',
                duration_ms=100,
                event_start_epoch_ms=1123123123,
            ),
        ],
        outcome=deepsmith_pb2.Result.PASS,
    )
    r1 = deeplearning.deepsmith.result.Result.GetOrAdd(session, proto)
    session.add(r1)
    session.flush()

    # Attempt to add a new result which is identical to the first in all fields
    # except for the outputs.
    proto.outputs['stdout'] = '!'
    r2 = deeplearning.deepsmith.result.Result.GetOrAdd(session, proto)
    session.add(r2)
    session.flush()

    # Check that only one result was added.
    assert session.query(deeplearning.deepsmith.result.Result).count() == 1

    # Check that only the first result was added.
    r3 = session.query(deeplearning.deepsmith.result.Result).first()
    assert r3.outputs['stdout'] == 'Hello, world!'
示例#14
0
def test_Generator_GetOrAdd_ToProto_equivalence(session):
  proto_in = deepsmith_pb2.Result(
    testcase=deepsmith_pb2.Testcase(
      toolchain="cpp",
      generator=deepsmith_pb2.Generator(name="generator"),
      harness=deepsmith_pb2.Harness(name="harness"),
      inputs={"src": "void main() {}", "data": "[1,2]",},
      invariant_opts={"config": "opt",},
      profiling_events=[
        deepsmith_pb2.ProfilingEvent(
          client="localhost",
          type="generate",
          duration_ms=100,
          event_start_epoch_ms=1123123123,
        ),
        deepsmith_pb2.ProfilingEvent(
          client="localhost",
          type="foo",
          duration_ms=100,
          event_start_epoch_ms=1123123123,
        ),
      ],
    ),
    testbed=deepsmith_pb2.Testbed(
      toolchain="cpp",
      name="clang",
      opts={"arch": "x86_64", "build": "debug+assert",},
    ),
    returncode=0,
    outputs={"stdout": "Hello, world!", "stderr": "",},
    profiling_events=[
      deepsmith_pb2.ProfilingEvent(
        client="localhost",
        type="exec",
        duration_ms=500,
        event_start_epoch_ms=1123123123,
      ),
      deepsmith_pb2.ProfilingEvent(
        client="localhost",
        type="overhead",
        duration_ms=100,
        event_start_epoch_ms=1123123123,
      ),
    ],
    outcome=deepsmith_pb2.Result.PASS,
  )
  result = deeplearning.deepsmith.result.Result.GetOrAdd(session, proto_in)

  # NOTE: We have to flush so that SQLAlchemy resolves all of the object IDs.
  session.flush()
  proto_out = result.ToProto()
  assert proto_in == proto_out
  proto_out.ClearField("outputs")
  assert proto_in != proto_out  # Sanity check.
示例#15
0
文件: 20180323.py 项目: BeauJoh/phd
def _GetSolidityGenerator(generator_id) -> deepsmith_pb2.Generator:
    if generator_id == -1:
        return deepsmith_pb2.Generator(name="github", opts={})
    elif generator_id == 1:
        return deepsmith_pb2.Generator(
            name="clgen",
            opts={
                "git_commit": "9556e7112ba2bd6f79ee59eef74f0a2304efa007",
                "git_remote": "https://github.com/ChrisCummins/clgen.git",
                "version": "0.4.0.dev0",
            })
    elif generator_id == 2:
        return deepsmith_pb2.Generator(
            name="randchar",
            opts={
                "url":
                "https://github.com/ChrisCummins/dsmith/blob/5181c7c95575d428b5144a25549e5a5a55a3da31/dsmith/sol/generators.py#L203",
            })
    else:
        raise LookupError
示例#16
0
def _AddExistingGenerator(session):
    deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session,
        deepsmith_pb2.Generator(
            name='name',
            opts={
                'a': 'a',
                'b': 'b',
                'c': 'c',
            },
        ))
    session.flush()
示例#17
0
def _AddRandomNewGenerator(session):
    deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session,
        deepsmith_pb2.Generator(
            name=str(random.random()),
            opts={
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
            },
        ))
    session.flush()
示例#18
0
def test_Testcase_GetOrAdd(session):
    proto = deepsmith_pb2.Testcase(
        toolchain="cpp",
        generator=deepsmith_pb2.Generator(name="generator", ),
        harness=deepsmith_pb2.Harness(name="harness", ),
        inputs={
            "src": "void main() {}",
            "data": "[1,2]"
        },
        invariant_opts={"config": "opt"},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client="localhost",
                type="generate",
                duration_ms=100,
                event_start_epoch_ms=1021312312,
            ),
            deepsmith_pb2.ProfilingEvent(
                client="localhost",
                type="foo",
                duration_ms=100,
                event_start_epoch_ms=1230812312,
            ),
        ],
    )
    testcase = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session, proto)

    # NOTE: We have to flush so that SQLAlchemy resolves all of the object IDs.
    session.flush()
    assert testcase.toolchain.string == "cpp"
    assert testcase.generator.name == "generator"
    assert testcase.harness.name == "harness"
    assert len(testcase.inputset) == 2
    assert len(testcase.inputs) == 2
    assert testcase.inputs["src"] == "void main() {}"
    assert testcase.inputs["data"] == "[1,2]"
    assert len(testcase.invariant_optset) == 1
    assert len(testcase.invariant_opts) == 1
    assert testcase.invariant_opts["config"] == "opt"
    assert testcase.profiling_events[0].client.string == "localhost"
    assert testcase.profiling_events[0].type.string == "generate"
    assert testcase.profiling_events[0].duration_ms == 100
    assert testcase.profiling_events[
        0].event_start == labdate.DatetimeFromMillisecondsTimestamp(1021312312)
    assert testcase.profiling_events[1].client.string == "localhost"
    assert testcase.profiling_events[1].type.string == "foo"
    assert testcase.profiling_events[1].duration_ms == 100
    assert testcase.profiling_events[
        1].event_start == labdate.DatetimeFromMillisecondsTimestamp(1230812312)
示例#19
0
def test_duplicate_testcase_testbed_ignored(session):
  """Test that result is ignored if testbed and testcase are not unique."""
  proto = deepsmith_pb2.Result(
    testcase=deepsmith_pb2.Testcase(
      toolchain="cpp",
      generator=deepsmith_pb2.Generator(name="generator"),
      harness=deepsmith_pb2.Harness(name="harness"),
      inputs={"src": "void main() {}", "data": "[1,2]",},
      invariant_opts={"config": "opt",},
      profiling_events=[
        deepsmith_pb2.ProfilingEvent(
          client="localhost",
          type="generate",
          duration_ms=100,
          event_start_epoch_ms=1123123123,
        ),
      ],
    ),
    testbed=deepsmith_pb2.Testbed(
      toolchain="cpp", name="clang", opts={"arch": "x86_64"},
    ),
    returncode=0,
    outputs={"stdout": "Hello, world!"},
    profiling_events=[
      deepsmith_pb2.ProfilingEvent(
        client="localhost",
        type="exec",
        duration_ms=100,
        event_start_epoch_ms=1123123123,
      ),
    ],
    outcome=deepsmith_pb2.Result.PASS,
  )
  r1 = deeplearning.deepsmith.result.Result.GetOrAdd(session, proto)
  session.add(r1)
  session.flush()

  # Attempt to add a new result which is identical to the first in all fields
  # except for the outputs.
  proto.outputs["stdout"] = "!"
  r2 = deeplearning.deepsmith.result.Result.GetOrAdd(session, proto)
  session.add(r2)
  session.flush()

  # Check that only one result was added.
  assert session.query(deeplearning.deepsmith.result.Result).count() == 1

  # Check that only the first result was added.
  r3 = session.query(deeplearning.deepsmith.result.Result).first()
  assert r3.outputs["stdout"] == "Hello, world!"
示例#20
0
def test_Testcase_GetOrAdd(session):
    proto = deepsmith_pb2.Testcase(
        toolchain='cpp',
        generator=deepsmith_pb2.Generator(name='generator', ),
        harness=deepsmith_pb2.Harness(name='harness', ),
        inputs={
            'src': 'void main() {}',
            'data': '[1,2]'
        },
        invariant_opts={'config': 'opt'},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='generate',
                duration_ms=100,
                event_start_epoch_ms=1021312312,
            ),
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='foo',
                duration_ms=100,
                event_start_epoch_ms=1230812312,
            ),
        ])
    testcase = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session, proto)

    # NOTE: We have to flush so that SQLAlchemy resolves all of the object IDs.
    session.flush()
    assert testcase.toolchain.string == 'cpp'
    assert testcase.generator.name == 'generator'
    assert testcase.harness.name == 'harness'
    assert len(testcase.inputset) == 2
    assert len(testcase.inputs) == 2
    assert testcase.inputs['src'] == 'void main() {}'
    assert testcase.inputs['data'] == '[1,2]'
    assert len(testcase.invariant_optset) == 1
    assert len(testcase.invariant_opts) == 1
    assert testcase.invariant_opts['config'] == 'opt'
    assert testcase.profiling_events[0].client.string == 'localhost'
    assert testcase.profiling_events[0].type.string == 'generate'
    assert testcase.profiling_events[0].duration_ms == 100
    assert (testcase.profiling_events[0].event_start ==
            labdate.DatetimeFromMillisecondsTimestamp(1021312312))
    assert testcase.profiling_events[1].client.string == 'localhost'
    assert testcase.profiling_events[1].type.string == 'foo'
    assert testcase.profiling_events[1].duration_ms == 100
    assert (testcase.profiling_events[1].event_start ==
            labdate.DatetimeFromMillisecondsTimestamp(1230812312))
示例#21
0
def test_Generator_GetOrAdd_ToProto_equivalence(session):
  proto_in = deepsmith_pb2.Generator(
    name="a", opts={"arch": "x86_64", "build": "debug+assert"},
  )
  generator = deeplearning.deepsmith.generator.Generator.GetOrAdd(
    session, proto_in
  )
  # NOTE: We have to flush before constructing a proto so that SQLAlchemy
  # resolves all of the object IDs.
  session.flush()

  proto_out = generator.ToProto()
  assert proto_in == proto_out
  proto_out.ClearField("name")
  assert proto_in != proto_out  # Sanity check.
示例#22
0
def test_Generator_GetOrAdd_only_different_optset(session):
    generator_a = deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session,
        deepsmith_pb2.Generator(
            name='name',
            opts={
                'a': 'A',
                'b': 'B',
                'c': 'C',
            },
        ))
    generator_b = deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session, deepsmith_pb2.Generator(
            name='name',
            opts={
                'd': 'D',
            },
        ))
    generator_c = deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session, deepsmith_pb2.Generator(
            name='name',
            opts={},
        ))
    assert session.query(
        deeplearning.deepsmith.generator.Generator).count() == 3
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOpt).count() == 4
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptSet).count() == 4
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptName).count() == 4
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptValue).count() == 4
    assert len(generator_a.optset) == 3
    assert len(generator_b.optset) == 1
    assert len(generator_c.optset) == 0
示例#23
0
 def __init__(self, config: generator_pb2.RandCharGenerator):
   super(RandCharGenerator, self).__init__(config)
   self.toolchain = self.config.model.corpus.language
   self.generator = deepsmith_pb2.Generator(
       name='randchar',
       opts={
         'toolchain': str(pbutil.AssertFieldConstraint(
             self.config, 'toolchain', lambda x: len(x))),
         'min_len': str(pbutil.AssertFieldConstraint(
             self.config, 'string_min_len', lambda x: x > 0)),
         'max_len': str(pbutil.AssertFieldConstraint(
             self.config, 'string_max_len',
             lambda x: x > 0 and x >= self.config.string_min_len)),
       }
   )
示例#24
0
def test_Generator_GetOrAdd_no_opts(session):
    generator = deeplearning.deepsmith.generator.Generator.GetOrAdd(
        session, deepsmith_pb2.Generator(
            name='name',
            opts={},
        ))
    empty_md5 = hashlib.md5().digest()
    assert generator.optset_id == empty_md5
    assert session.query(
        deeplearning.deepsmith.generator.Generator).count() == 1
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOpt).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptSet).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptName).count() == 0
    assert session.query(
        deeplearning.deepsmith.generator.GeneratorOptValue).count() == 0
示例#25
0
def test_duplicate_testcases_ignored(session):
    """Test that testcases are only added if they are unique."""
    proto = deepsmith_pb2.Testcase(
        toolchain="cpp",
        generator=deepsmith_pb2.Generator(name="generator"),
        harness=deepsmith_pb2.Harness(name="harness"),
        inputs={
            "src": "void main() {}",
            "data": "[1,2]"
        },
        invariant_opts={"config": "opt"},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client="localhost",
                type="generate",
                duration_ms=100,
                event_start_epoch_ms=1021312312,
            ),
            deepsmith_pb2.ProfilingEvent(
                client="localhost",
                type="foo",
                duration_ms=100,
                event_start_epoch_ms=1230812312,
            ),
        ],
    )
    t1 = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(session, proto)
    session.add(t1)
    session.flush()

    # Attempt to add a new testcase which is identical to the first in all fields
    # except for the profiling events.
    proto.profiling_events[0].duration_ms = -1
    t2 = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(session, proto)
    session.add(t2)
    session.flush()

    # Check that only one testcase was added.
    assert session.query(deeplearning.deepsmith.testcase.Testcase).count() == 1

    # Check that only the first testcase was added.
    t3 = session.query(deeplearning.deepsmith.testcase.Testcase).first()
    assert t3.profiling_events[0].duration_ms == 100
    assert t3.profiling_events[1].duration_ms == 100
示例#26
0
def test_duplicate_testcases_ignored(session):
    """Test that testcases are only added if they are unique."""
    proto = deepsmith_pb2.Testcase(
        toolchain='cpp',
        generator=deepsmith_pb2.Generator(name='generator'),
        harness=deepsmith_pb2.Harness(name='harness'),
        inputs={
            'src': 'void main() {}',
            'data': '[1,2]'
        },
        invariant_opts={'config': 'opt'},
        profiling_events=[
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='generate',
                duration_ms=100,
                event_start_epoch_ms=1021312312,
            ),
            deepsmith_pb2.ProfilingEvent(
                client='localhost',
                type='foo',
                duration_ms=100,
                event_start_epoch_ms=1230812312,
            ),
        ])
    t1 = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(session, proto)
    session.add(t1)
    session.flush()

    # Attempt to add a new testcase which is identical to the first in all fields
    # except for the profiling events.
    proto.profiling_events[0].duration_ms = -1
    t2 = deeplearning.deepsmith.testcase.Testcase.GetOrAdd(session, proto)
    session.add(t2)
    session.flush()

    # Check that only one testcase was added.
    assert session.query(deeplearning.deepsmith.testcase.Testcase).count() == 1

    # Check that only the first testcase was added.
    t3 = session.query(deeplearning.deepsmith.testcase.Testcase).first()
    assert t3.profiling_events[0].duration_ms == 100
    assert t3.profiling_events[1].duration_ms == 100
示例#27
0
def _AddRandomNewTestcase(session):
    deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session,
        deepsmith_pb2.Testcase(
            toolchain=str(random.random()),
            generator=deepsmith_pb2.Generator(
                name=str(random.random()),
                opts={
                    str(random.random()): str(random.random()),
                    str(random.random()): str(random.random()),
                    str(random.random()): str(random.random()),
                },
            ),
            harness=deepsmith_pb2.Harness(
                name=str(random.random()),
                opts={
                    str(random.random()): str(random.random()),
                    str(random.random()): str(random.random()),
                    str(random.random()): str(random.random()),
                },
            ),
            inputs={
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
            },
            invariant_opts={
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
                str(random.random()): str(random.random()),
            },
            profiling_events=[
                deepsmith_pb2.ProfilingEvent(
                    client=str(random.random()),
                    type=str(random.random()),
                    duration_ms=int(random.random() * 1000),
                    event_start_epoch_ms=int(random.random() * 1000000),
                ),
            ],
        ),
    )
    session.flush()
示例#28
0
def _AddExistingTestcase(session):
    deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session,
        deepsmith_pb2.Testcase(
            toolchain="cpp",
            generator=deepsmith_pb2.Generator(
                name="name",
                opts={
                    "a": "a",
                    "b": "b",
                    "c": "c",
                },
            ),
            harness=deepsmith_pb2.Harness(
                name="name",
                opts={
                    "a": "a",
                    "b": "b",
                    "c": "c",
                },
            ),
            inputs={
                "src": "void main() {}",
                "data": "[1,2]",
                "copt": "-DNDEBUG",
            },
            invariant_opts={
                "config": "opt",
                "working_dir": "/tmp",
                "units": "nanoseconds",
            },
            profiling_events=[
                deepsmith_pb2.ProfilingEvent(
                    client="localhost",
                    type="generate",
                    duration_ms=100,
                    event_start_epoch_ms=101231231,
                ),
            ],
        ),
    )
    session.flush()
示例#29
0
def _AddExistingTestcase(session):
    deeplearning.deepsmith.testcase.Testcase.GetOrAdd(
        session,
        deepsmith_pb2.Testcase(toolchain='cpp',
                               generator=deepsmith_pb2.Generator(
                                   name='name',
                                   opts={
                                       'a': 'a',
                                       'b': 'b',
                                       'c': 'c',
                                   },
                               ),
                               harness=deepsmith_pb2.Harness(
                                   name='name',
                                   opts={
                                       'a': 'a',
                                       'b': 'b',
                                       'c': 'c',
                                   },
                               ),
                               inputs={
                                   'src': 'void main() {}',
                                   'data': '[1,2]',
                                   'copt': '-DNDEBUG',
                               },
                               invariant_opts={
                                   'config': 'opt',
                                   'working_dir': '/tmp',
                                   'units': 'nanoseconds',
                               },
                               profiling_events=[
                                   deepsmith_pb2.ProfilingEvent(
                                       client='localhost',
                                       type='generate',
                                       duration_ms=100,
                                       event_start_epoch_ms=101231231,
                                   ),
                               ]))
    session.flush()
示例#30
0
 def __init__(self, config: generator_pb2.RandCharGenerator):
     super(RandCharGenerator, self).__init__(config)
     self.toolchain = self.config.model.corpus.language
     self.generator = deepsmith_pb2.Generator(
         name="randchar",
         opts={
             "toolchain":
             str(
                 pbutil.AssertFieldConstraint(self.config, "toolchain",
                                              lambda x: len(x))),
             "min_len":
             str(
                 pbutil.AssertFieldConstraint(self.config, "string_min_len",
                                              lambda x: x > 0)),
             "max_len":
             str(
                 pbutil.AssertFieldConstraint(
                     self.config,
                     "string_max_len",
                     lambda x: x > 0 and x >= self.config.string_min_len,
                 )),
         },
     )