Esempio n. 1
0
    def test_build_with_partial_functions(self):
        artifacts = {'a': 42, 'b': lambda A: A * 2}
        with self.assertRaises(UnresolvedDependencyError):
            _ = build(artifacts, solver='linear')

        result = build(artifacts, allow_partial_functions=True)
        self.assertIsInstance(result['b'], partial)
Esempio n. 2
0
    def test_solvers(self):
        def subtract(p, q):
            return p - q

        solvers = ['linear', 'bfs', 'bfs_parallel', 'async']
        results = [
            build(
                {
                    'a': -11,
                    'b': 7.5,
                    'a - b': At('a', 'b', subtract),
                    'b - a': At('b', 'a', subtract),
                },
                solver=solver) for solver in solvers
        ]

        # make sure we have as many results as there are solvers
        self.assertEqual(len(results), len(solvers))

        # serialize results and add them to set
        # if results are the same, there should be only one element in the set
        result_set = set(
            json.dumps(result, sort_keys=True) for result in results)
        self.assertEqual(len(result_set), 1)

        result = json.loads(next(iter(result_set)))
        self.assertEqual(result['a - b'], -18.5)
        self.assertEqual(result['b - a'], 18.5)
Esempio n. 3
0
    def test_artifact_immutability(self):
        artifacts = {'a': lambda: 42, 'b': lambda a: a()**2}

        results = build(artifacts, solver='async')

        self.assertTrue(isinstance(artifacts, dict))
        self.assertEqual(len(artifacts), 2)
        self.assertEqual(set(artifacts.keys()), {'a', 'b'})
        self.assertTrue(callable(artifacts['b']))
        self.assertFalse(callable(results['b']))
Esempio n. 4
0
 def test_partial_build(self):
     artifacts = {
         'A': lambda x: x**2,
         'B': lambda A, x: A(x),
         'C': lambda A, x: 'A(4)-{} is equal to {}'.format(x,
                                                           A(4) - x)
     }
     result = build(artifacts, allow_partial_functions=True)
     self.assertTrue(callable(result['A']))
     self.assertEqual(result['A'](4), 16)
     self.assertEqual(result['B'](-5), 25)
     self.assertEqual(result['C'](6), 'A(4)-6 is equal to 10')
Esempio n. 5
0
    def test_deep_build(self):
        for solver in ['linear', 'bfs', 'bfs_parallel', 'async']:
            results = build(
                {
                    'a': 'a',
                    'b': 'b',
                    'x': lambda a: 'x',
                    'c': lambda x, b: 'c',
                },
                solver=solver)

            self.assertEqual(results['c'], 'c')
Esempio n. 6
0
    def test_at_constructor(self):
        def subtract(p, q):
            return p - q

        result = build({
            'p': 3,
            'q': 5,
            'p - q': subtract,
            'q - p': lambda p, q: subtract(q, p),
        })

        self.assertEqual(result['p - q'], -2)
        self.assertEqual(result['q - p'], 2)

        result = build({
            'a': -11,
            'b': 7.5,
            'a - b': At('a', 'b', subtract),
            'b - a': At('b', 'a', subtract),
        })

        self.assertEqual(result['a - b'], -18.5)
        self.assertEqual(result['b - a'], 18.5)
Esempio n. 7
0
 def test_sample_build(self):
     artifacts = {
         'A': 42,
         'B': lambda: 7,
         'C': lambda: 10,
         'AB': lambda A, B: A + B(),
         'C minus B': lambda B, C: C() - B(),
         'greet': 'Hello',
         'msg':
         lambda greet, A: '{} World! The answer is {}.'.format(greet, A),
     }
     result = build(artifacts)
     self.assertEqual(result['AB'], 49)
     self.assertEqual(result['C minus B'], 3)
     self.assertEqual(result['msg'], 'Hello World! The answer is 42.')
Esempio n. 8
0
 def test_constant_artifacts_build(self):
     obj = object()
     artifacts = {
         'int': 42,
         'string': 'Hello',
         'obj': obj,
         'list': [1, 2, 3],
         'dictionary': {
             'answer': 42
         },
         'set': set([1, 2, 3.14])
     }
     result = build(
         artifacts,
         solver='linear')  # async solver copies objects to subprocess!!
     for k in artifacts:
         self.assertEqual(result[k], artifacts[k])
Esempio n. 9
0
 def test_empty_build(self):
     artifacts = {}
     result = build(artifacts)
     self.assertEqual(result, {})
Esempio n. 10
0
 def test_single_artifact_build(self):
     artifacts = {'a': 42}
     result = build(artifacts)
     self.assertEqual(len(result), 1)
     self.assertEqual(result, {'a': 42})