Completed
Push — master ( dbc3e8...c58680 )
by Klaus
37s
created

test_captured_function_call_doesnt_modify_kwargs()   B

Complexity

Conditions 5

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 5
c 1
b 1
f 0
dl 0
loc 12
rs 8.5454
1
#!/usr/bin/env python
2
# coding=utf-8
3
from __future__ import division, print_function, unicode_literals
4
import datetime
5
import mock
6
import random
7
from sacred.config.captured_function import create_captured_function
8
9
10
def test_create_captured_function():
11
    def foo():
12
        """my docstring"""
13
        return 42
14
15
    cf = create_captured_function(foo)
16
17
    assert cf.__name__ == 'foo'
18
    assert cf.__doc__ == 'my docstring'
19
    assert cf.prefix is None
20
    assert cf.config == {}
21
    assert not cf.uses_randomness
22
    assert callable(cf)
23
24
25
def test_call_captured_function():
26
    def foo(a, b, c, d=4, e=5, f=6):
27
        return a, b, c, d, e, f
28
29
    cf = create_captured_function(foo)
30
    cf.logger = mock.MagicMock()
31
    cf.config = {'a': 11, 'b': 12, 'd': 14}
32
33
    assert cf(21, c=23, f=26) == (21, 12, 23, 14, 5, 26)
34
    cf.logger.debug.assert_has_calls([
35
        mock.call("Started"),
36
        mock.call("Finished after %s.", datetime.timedelta(0))])
37
38
39
def test_captured_function_randomness():
40
    def foo(_rnd, _seed):
41
        return _rnd.randint(0, 1000), _seed
42
43
    cf = create_captured_function(foo)
44
    assert cf.uses_randomness
45
    cf.logger = mock.MagicMock()
46
    cf.rnd = random.Random(1234)
47
48
    nr1, seed1 = cf()
49
    nr2, seed2 = cf()
50
    assert nr1 != nr2
51
    assert seed1 != seed2
52
53
    cf.rnd = random.Random(1234)
54
55
    assert cf() == (nr1, seed1)
56
    assert cf() == (nr2, seed2)
57
58
59
def test_captured_function_magic_logger_argument():
60
    def foo(_log):
61
        return _log
62
63
    cf = create_captured_function(foo)
64
    cf.logger = mock.MagicMock()
65
66
    assert cf() == cf.logger
67
68
69
def test_captured_function_magic_config_argument():
70
    def foo(_config):
71
        return _config
72
73
    cf = create_captured_function(foo)
74
    cf.logger = mock.MagicMock()
75
    cf.config = {'a': 2, 'b': 2}
76
77
    assert cf() == cf.config
78
79
80
def test_captured_function_magic_run_argument():
81
    def foo(_run):
82
        return _run
83
84
    cf = create_captured_function(foo)
85
    cf.logger = mock.MagicMock()
86
    cf.run = mock.MagicMock()
87
88
    assert cf() == cf.run
89
90
91
def test_captured_function_call_doesnt_modify_kwargs():
92
    def foo(a, _log):
93
        if _log is not None:
94
            return a
95
96
    cf = create_captured_function(foo)
97
    cf.logger = mock.MagicMock()
98
    cf.run = mock.MagicMock()
99
100
    d = {'a': 7}
101
    assert cf(**d) == 7
102
    assert d == {'a': 7}
103