Statistiques
| Révision :

root / pobysoPythonSage / src / testPobyso.sage @ 118

Historique | Voir | Annoter | Télécharger (6,58 ko)

1
"""
2
Test module for pobyso.py functions.
3

    
4
AUTHORS:
5
- S.T. (2014-02-26): initial version
6

    
7
TODO:
8
- everything!
9

    
10
"""
11

    
12
print "\ntestPobyso loading..."
13
#
14
import inspect
15
import resource
16
import timeit
17

    
18

    
19
def memory_usage_resource():
20
    rusage_denom = RR("1024")
21
    if sys.platform == 'darwin':
22
        # ... it seems that in OSX the output is different units ...
23
        rusage_denom = rusage_denom * rusage_denom
24
    mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / rusage_denom
25
    return mem
26
# End memory_usage_resource()
27

    
28
def test_pobyso_wrapper(func, *args, **kwargs):
29
    def wrapped():
30
        return func(*args, **kwargs)
31
    return wrapped
32

    
33
#
34
def test_pobyso_absolute_so_so():
35
    for index in xrange(0,1000000):
36
        absoluteSo = pobyso_absolute_so_so()
37
        sollya_lib_clear_obj(absoluteSo)
38
# End test_absolute_so_so
39

    
40
def test_pobyso_autoprint_so_so(iterationsNum=1000):
41
    absoluteSo = pobyso_absolute_so_so()
42
    for index in xrange(0,iterationsNum):
43
        pobyso_autoprint(absoluteSo)
44
    sollya_lib_clear_obj(absoluteSo)
45
# End test_pobyso_autoprint
46

    
47
def test_pobyso_bounds_to_range_sa_so(repeat=1000, number=10):
48
    functionName =  inspect.stack()[0][3]
49
    print "Running", inspect.stack()[0][3], "..."
50
    lowerBoundSa = RR(1)
51
    upperBoundSa = RR(2)
52
    precSo = pobyso_get_prec_so()
53
    #pobyso_autoprint(precSo)
54
    #
55
    def test(lowerBoundSa, upperBoundSa):
56
        rangeSo = pobyso_bounds_to_range_sa_so(lowerBoundSa, upperBoundSa)
57
        sollya_lib_clear_obj(rangeSo)
58
    #
59
    wrapped = test_pobyso_wrapper(test,lowerBoundSa, upperBoundSa)
60
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
61
    #
62
    precSo = pobyso_get_prec_so()
63
    #pobyso_autoprint(precSo)
64
    sollya_lib_clear_obj(precSo)
65
    print "\t...", functionName, "done."
66
    return timing
67
# End test_pobyso_bounds_to_range_sa_so
68

    
69
def test_pobyso_get_list_elements_so_so(repeat = 1000, number=10):
70
    functionName = inspect.stack()[0][3]
71
    print "Running", functionName, "..."
72
    def test():
73
        listSo = pobyso_parse_string_sa_so("[|0,1,2,3,4,5,6|];")
74
        (listSaSo, elementsNumSa, isEndEllipticSa) = \
75
            pobyso_get_list_elements(listSo)
76
        for elementSo in listSaSo:
77
            sollya_lib_clear_obj(elementSo)
78
        # Notice that we use sollya_lib_clear_obj and not
79
        # sollya_lib_clear_object_list.
80
        sollya_lib_clear_obj(listSo, None)
81
    #
82
    wrapped = test_pobyso_wrapper(test)
83
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
84
    print "\t...", functionName, "done."
85
    return timing
86
# End test_pobyso_get_list_elements    
87

    
88
def test_pobyso_get_prec_so_sa(iterationsNum=10000):
89
    print "Running", inspect.stack()[0][3]
90
    for index in xrange(0,iterationsNum):
91
        precSa = pobyso_get_prec_so_sa()
92
# End test_pobyso_get_prec_so_sa  
93

    
94
def test_pobyso_get_prec_of_constant_so_sa(iterationsNum=10000):
95
    print "Running", inspect.stack()[0][3]
96
    constSo = pobyso_constant_from_int_sa_so(2)
97
    for index in xrange(0,iterationsNum):
98
        precSa = pobyso_get_prec_of_constant_so_sa(constSo)
99
    sollya_lib_clear_obj(constSo)
100
# End test_pobyso_get_prec_of_constant_so_sa
101

    
102
def test_pobyso_lib_init(iterationsNum=10000):
103
    """
104
    Must be called exactly once. Leaks lots of memory otherwise.
105
    """
106
    print "Running", inspect.stack()[0][3]
107
    for index in xrange(0,iterationsNum):
108
        pobyso_lib_init()
109
        #pobyso_lib_close()
110
# End test_pobyso_lib_init
111

    
112
def test_pobyso_parse_string_sa_so(iterationsNum=10000):
113
    print "Running", inspect.stack()[0][3]
114
    for index in xrange(0,iterationsNum):
115
        expressionSo = pobyso_parse_string_sa_so('exp(x)+2*x*sin(x)')
116
        sollya_lib_clear_obj(expressionSo)
117
# End pobyso_parse_string_sa_so
118

    
119
def test_pobyso_taylor_expansion_no_change_var_so_so(repeat=1000, number=10):
120
    functionName = inspect.stack()[0][3]
121
    print "Running", functionName, "..."
122
    functionSo  = pobyso_parse_string('exp(x)')
123
    degreeSo    = pobyso_constant_from_int_sa_so(20)
124
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
125
    errorTypeSo = pobyso_absolute_so_so()
126
    def test(functionSo, degreeSo, rangeSo, errorTypeSo):
127
        teSo = pobyso_taylor_expansion_no_change_var_so_so(functionSo,
128
                                                           degreeSo,
129
                                                           rangeSo,
130
                                                           errorTypeSo)
131
        sollya_lib_clear_obj(teSo[0])
132
        sollya_lib_clear_obj(teSo[1])
133
        sollya_lib_clear_obj(teSo[2])
134
    # End test
135
    wrapped = test_pobyso_wrapper(test, 
136
                                  functionSo, 
137
                                  degreeSo, 
138
                                  rangeSo, 
139
                                  errorTypeSo)
140
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
141
    sollya_lib_clear_obj(functionSo)
142
    sollya_lib_clear_obj(degreeSo)
143
    sollya_lib_clear_obj(rangeSo)
144
    sollya_lib_clear_obj(errorTypeSo)
145
    print "\t...", functionName, "done."
146
    return timing
147
# End test_pobyso_taylor_expansion_no_change_var_so_so
148

    
149
def test_pobyso_taylor_form_so_so_2(repeat=1000, number=10):
150
    functionName = inspect.stack()[0][3]
151
    print "Running", functionName, "..."
152
    functionSo  = pobyso_parse_string('exp(x)')
153
    degreeSo    = pobyso_constant_from_int_sa_so(20)
154
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
155
    intervalCenterSo = sollya_lib_mid(rangeSo, None)
156
    errorTypeSo = pobyso_absolute_so_so()
157
    
158
    def test(functionSo, degreeSo, intervalCenterSo, errorTypeSo):
159
        taylorformSo = pobyso_taylorform_so_so(functionSo, 
160
                                               degreeSo, 
161
                                               intervalCenterSo, 
162
                                               errorTypeSo)
163
        sollya_lib_clear_obj(taylorformSo)
164
    wrapped = test_pobyso_wrapper(test, 
165
                                  functionSo, 
166
                                  degreeSo, 
167
                                  intervalCenterSo, 
168
                                  errorTypeSo)
169
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
170
    sollya_lib_clear_obj(functionSo,None)
171
    sollya_lib_clear_obj(degreeSo,None)
172
    sollya_lib_clear_obj(rangeSo,None)
173
    sollya_lib_clear_obj(intervalCenterSo,None)
174
    sollya_lib_clear_obj(errorTypeSo,None)
175
    return timing
176
# End   test_pobyso_taylor_so_so_2
177
 
178
def test_pobyso_dummy_test(iterationsNum=1, executionsNum=1):
179
    aString = "2+3"
180
    def test():
181
        return 2+3
182
    wrapped = test_pobyso_wrapper(test)
183
    timing = timeit.timeit(wrapped, number=executionsNum)
184
    return timing
185
print "\t...testPobyso loaded"