pike.git/
src/
testsuite.in
Branch:
Tag:
Non-build tags
All tags
No tags
2008-10-12
2008-10-12 21:52:02 by Martin Stjernholm <mast@lysator.liu.se>
6490fbb5884d38902c5d8acb606a77fafbf0eef2 (
295
lines) (+
190
/-
105
)
[
Show
|
Annotate
]
Branch:
7.9
Improved the tests for Pike.count_memory.
Rev: src/testsuite.in:1.857
1:
START_MARKER
-
test_true([["$Id: testsuite.in,v 1.
856
2008/10/
04
19
:52:
09
mast Exp $"]]);
+
test_true([["$Id: testsuite.in,v 1.
857
2008/10/
12
21
:52:
02
mast Exp $"]]);
// This triggered a bug only if run sufficiently early. test_compile_any([[#pike 7.2]])
6199:
]], 1) // Pike.count_memory
+
test_do([[
+
add_constant ("count_memory_stats",
+
lambda (int|mapping opts, mixed... things) {
+
if (intp (opts))
+
opts = (["lookahead": opts, "collect_stats": 1]);
+
else
+
opts += (["collect_stats": 1]);
+
Pike.count_memory (opts, @things);
+
return sprintf ("i:%d,c:%d,e:%d,v:%d,r:%d,rnd:%d",
+
opts->internal, opts->cyclic, opts->external,
+
opts->visits, opts->revisits, opts->rounds);
+
})
+
]])
// time(1) is used below to avoid constants with extra refs.
-
test_true([[Pike.count_memory (
0
) == 0]])
-
test_true([[Pike.count_memory (
0
, ({})) > 0]])
-
test_true([[Pike.count_memory (
0
, ({time(1)})) > 0]])
-
test_true([[Pike.count_memory (
0
, (<>)) > 0]])
-
test_true([[Pike.count_memory (
0
, (<time(1)>)) >
-
Pike.count_memory (
0
, (<>))]])
-
test_true([[Pike.count_memory (
0
, (<time(1)>)) >
-
Pike.count_memory (
0
, (<1>))]])
-
test_true([[Pike.count_memory (
0
, ([])) > 0]])
-
test_true([[Pike.count_memory (
0
, ([1: time(1)])) >
-
Pike.count_memory (
0
, ([]))]])
-
test_true([[Pike.count_memory (
0
, ([1: time(1)])) >
-
Pike.count_memory (
0
, ([1: 2]))]])
-
test_true([[Pike.count_memory (
0
, class {}) > 0]])
-
test_true([[Pike.count_memory (
0
, class {float f;}) >
-
Pike.count_memory (
0
, class {})]])
-
test_true([[Pike.count_memory (
0
, class {constant f = 0.0;}) >
-
Pike.count_memory (
0
, class {})]])
-
test_true([[Pike.count_memory (
0
, class {}()) > 0]])
-
test_true([[Pike.count_memory (
0
, class {float f;}()) >
-
Pike.count_memory (
0
, class {}())]])
-
test_true([[Pike.count_memory (
0
, class {constant f = 0.0;}()) ==
-
Pike.count_memory (
0
, class {}())]])
-
test_true([[Pike.count_memory (
0
, "foo") > 0]])
-
test_true([[Pike.count_memory (
0
, typeof (map)) > 0]])
-
test_true([[Pike.count_memory (
0
, 17) == 0]])
-
test_true([[Pike.count_memory (
0
, ({"some string with no other ref in memory "+
+
test_true([[Pike.count_memory (
-1
) == 0]])
+
test_true([[Pike.count_memory (
-1
, ({})) > 0]])
+
test_true([[Pike.count_memory (
-1
, ({time(1)})) > 0]])
+
test_true([[Pike.count_memory (
-1
, (<>)) > 0]])
+
test_true([[Pike.count_memory (
-1
, (<time(1)>)) >
+
Pike.count_memory (
-1
, (<>))]])
+
test_true([[Pike.count_memory (
-1
, (<time(1)>)) >
+
Pike.count_memory (
-1
, (<1>))]])
+
test_true([[Pike.count_memory (
-1
, ([])) > 0]])
+
test_true([[Pike.count_memory (
-1
, ([1: time(1)])) >
+
Pike.count_memory (
-1
, ([]))]])
+
test_true([[Pike.count_memory (
-1
, ([1: time(1)])) >
+
Pike.count_memory (
-1
, ([1: 2]))]])
+
test_true([[Pike.count_memory (
-1
, class {}) > 0]])
+
test_true([[Pike.count_memory (
-1
, class {float f;}) >
+
Pike.count_memory (
-1
, class {})]])
+
test_true([[Pike.count_memory (
-1
, class {constant f = 0.0;}) >
+
Pike.count_memory (
-1
, class {})]])
+
test_true([[Pike.count_memory (
-1
, class {}()) > 0]])
+
test_true([[Pike.count_memory (
-1
, class {float f;}()) >
+
Pike.count_memory (
-1
, class {}())]])
+
test_true([[Pike.count_memory (
-1
, class {constant f = 0.0;}()) ==
+
Pike.count_memory (
-1
, class {}())]])
+
test_true([[Pike.count_memory (
-1
, "foo") > 0]])
+
test_true([[Pike.count_memory (
-1
, typeof (map)) > 0]])
+
test_true([[Pike.count_memory (
-1
, 17) == 0]])
+
test_true([[Pike.count_memory (
-1
, ({"some string with no other ref in memory "+
Standards.UUID.make_version4()->str()})) ==
-
Pike.count_memory (
0
, ({""}))]])
-
test_true([[Pike.count_memory (
1
, ({"some string with no other ref in memory " +
+
Pike.count_memory (
-1
, ({""}))]])
+
test_true([[Pike.count_memory (
0
, ({"some string with no other ref in memory " +
Standards.UUID.make_version4()->str()})) >
-
Pike.count_memory (
1
, ({""}))]])
-
test_true([[Pike.count_memory (
0
, ({time(1)})) +
-
Pike.count_memory (
0
, ([1: time(1)])) ==
-
Pike.count_memory (
1
, ({([1: time(1)])}))]])
-
test_true([[Pike.count_memory (
1
, class X {mapping(X:array(int)) x;}) >
-
Pike.count_memory (
1
, class Y {int x;})]])
-
test_true([[Pike.count_memory (
1
, ({compile (
+
Pike.count_memory (
0
, ({""}))]])
+
test_true([[Pike.count_memory (
-1
, ({time(1)})) +
+
Pike.count_memory (
-1
, ([1: time(1)])) ==
+
Pike.count_memory (
0
, ({([1: time(1)])}))]])
+
test_true([[Pike.count_memory (
0
, class X {mapping(X:array(int)) x;}) >
+
Pike.count_memory (
0
, class Y {int x;})]])
+
test_true([[Pike.count_memory (
0
, ({compile (
"constant x = ([1: time(1)]);")})) >
-
Pike.count_memory (
1
, ({([1: time(1)])}))]])
+
Pike.count_memory (
0
, ({([1: time(1)])}))]])
+
test_eq([[count_memory_stats (-1, ({time(1)}))]],
+
[["i:1,c:0,e:0,v:1,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, (<time(1)>))]],
+
[["i:1,c:0,e:0,v:2,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, ([1: time(1)]))]],
+
[["i:1,c:0,e:0,v:2,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, class {float f;})]],
+
[["i:1,c:0,e:0,v:1,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, class {float f;}())]],
+
[["i:1,c:0,e:0,v:1,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, "foo")]],
+
[["i:1,c:0,e:0,v:1,r:0,rnd:1"]])
+
test_eq([[count_memory_stats (-1, typeof(all_constants()))]],
+
[["i:1,c:0,e:0,v:1,r:0,rnd:1"]])
test_any([[ array a1 = ({({time(1)})}), a2 = ({a1[0]});
-
return Pike.count_memory (
1
, a1, a2) >
-
Pike.count_memory (
1
, a1) + Pike.count_memory (
1
, a2);
+
return Pike.count_memory (
0
, a1, a2) >
+
Pike.count_memory (
0
, a1) + Pike.count_memory (
0
, a2);
]], 1) test_any([[ mapping m = ([1: time(1)]);
-
return Pike.count_memory (
1
, ({m})) == Pike.count_memory (
1
, ({0}));
+
return Pike.count_memory (
0
, ({m})) == Pike.count_memory (
0
, ({0}));
]], 1) test_any([[ array a = ({([1: time(1)])});
-
return Pike.count_memory (
1
, a) > Pike.count_memory (
1
, ({([])}));
+
return Pike.count_memory (
0
, a) > Pike.count_memory (
0
, ({([])}));
]], 1) test_any([[ program p = class {};
-
return Pike.count_memory (
1
, p) > Pike.count_memory (
1
, p());
+
return Pike.count_memory (
0
, p) > Pike.count_memory (
0
, p());
]], 1) test_any([[ class X (void|object a) {}; X o = X (X());
-
return
Pike.
count_memory
(1, o) == Pike.count
_
memory
(0, o)
* 2
;
-
]], 1)
+
return count_memory_
stats
(0, o);
+
]],
[["i:2,c:0,e:0,v:2,r:0,rnd:
1
"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X()));
-
o->a->a->a = o
->a
;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(0, o)
* 3
;
-
]], 1)
+
o->a->a->a = o;
+
return count_memory_
stats
(0, o);
+
]],
[["i:3,c:0,e:0,v:3,r:0,rnd:
1
"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X())); o->a->a->a = o->a;
-
return
Pike.
count_memory (2, o)
== Pike.count_memory (0, o)
;
-
]],
1
)
+
return count_memory
_stats
(2, o);
+
]],
[["i:3,c:2,e:0,v:7,r:4,rnd:2"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X()));
-
int size = Pike.count_memory (1, o);
+
o->a->a->a = o->a;
-
return
Pike.
count_memory (
(["lookahead": 3])
, o)
== size
;
-
]], 1)
+
return count_memory
_stats
(
1
, o);
+
]],
[["i:
1
,c:0,e:1,v:3,r:1,rnd:1"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X()));
-
int size = Pike.count_memory (
1
, o);
-
return Pike.count_memory ((["lookahead":
3, "block_objects": 1
]), o) == size;
+
int size = Pike.count_memory (
0
, o);
+
o->a->a->a = o->a;
+
return Pike.count_memory ((["lookahead":
2
]), o) == size;
]], 1) test_any([[ class X (void|object a) {}; X o = X (X (X()));
-
return
Pike.
count_memory ((["block_objects": 1]), o)
==
-
Pike.count_memory (1, o)
;
-
]], 1)
+
return count_memory
_stats
((["block_objects": 1]), o);
+
]],
[["i:3,c:0,e:0,v:3,r:0,rnd:
1
"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X())); o->a->a->a = o->a;
-
return
Pike.
count_memory ((["lookahead":
3
, "block_objects": 1]), o)
==
-
Pike.count_memory (0, o)
;
-
]], 1)
+
return count_memory
_stats
((["lookahead":
2
, "block_objects": 1]), o);
+
]],
[["i:
1
,c:0,e:0,v:1,r:0,rnd:1"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X())); o->a->a->a = o->a; X r = o->a->a;
-
return
Pike.
count_memory (10, o)
== Pike.count_memory (0, o)
;
-
]], 1)
+
return count_memory
_stats
(10, o);
+
]],
[["i:
1
,c:0,e:2,v:7,r:4,rnd:1"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X())); o->a->a->a = o->a;
-
X r = o->a;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
X r = o->a
->a
;
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:
1
,c:0,e:2,v:7,r:4,rnd:1"]]
)
test_any([[ class X (void|object a) {}; X o = X (X (X())); o->a->a->a = o->a;
-
X r = o->a
->a
;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
X r = o->a;
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:
1
,c:0,e:2,v:5,r:2,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X (X (X (X (X ())))));
6329:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory
(2, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
return count_memory_
stats
(
1
, o);
+
]],
[["i:
1
,c:0,e:1,v:3,r:1,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X (X (X (X (X ())))));
6339:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory
(3, o) == 6 * Pike.count
_
memory
(
0
, o);
-
]],
1
)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:6,c:5,e:0,v:19,r:13,rnd:2"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X (X (X (X (X ())))));
6350:
o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a; X p = o->a->a->a->a;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:
1
,c:0,e:5,v:17,r:11,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {constant pike_cycle_depth = 2;}; X o = X (X (X (X (X (X ())))));
6360:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory
(1, o) == 6 * Pike.count
_
memory
(0, o);
-
]],
1
)
+
return count_memory_
stats
(0, o);
+
]],
[["i:6,c:5,e:0,v:19,r:13,rnd:2"]]
)
test_any([[ class X (void|object a, void|object b) {constant pike_cycle_depth = 1;}; X o = X (X (X (X (X (X ())))));
6370:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory
(1, o) == Pike.count
_
memory
(0, o);
-
]], 1)
+
return count_memory_
stats
(0, o);
+
]],
[["i:
1
,c:0,e:1,v:3,r:1,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {constant pike_cycle_depth = 0;}; X o = X (X (X (X (X (X ())))));
6380:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:
1
,c:0,e:0,v:1,r:0,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {constant pike_cycle_depth = 2;}; X o = X (X (X (X (X (X ())))));
6390:
o->a->a->a->b = o->a->a; o->a->a->a->a->b = o->a->a->a; o->a->a->a->a->a->b = o->a->a->a->a;
-
return
Pike.
count_memory ((["block_pike_cycle_depth": 1]), o)
==
-
Pike.count_memory (0, o)
;
-
]], 1)
+
return count_memory
_stats
((["block_pike_cycle_depth": 1]), o);
+
]],
[["i:
1
,c:0,e:0,v:1,r:0,rnd:1"]]
)
test_any([[
-
+
class X (void|object a, void|object b) {constant pike_cycle_depth = 4;};
+
class Y (void|object a) {constant pike_cycle_depth = 0;};
+
X o = X (X(), X());
+
o->a->a = o->b;
+
o->b->a = o->a;
+
o->a->b = o->b->b = Y (Y());
+
return count_memory_stats (0, o);
+
]], [["i:5,c:2,e:0,v:8,r:3,rnd:2"]])
+
test_any([[
+
class X (void|object a, void|object b) {constant pike_cycle_depth = 4;};
+
class Y (void|object a) {constant pike_cycle_depth = 0;};
+
X o = X (X(), X());
+
o->a->a = o->b;
+
o->b->a = o->a;
+
o->a->b = o->b->b = Y (Y());
+
o->a->b->a->a = o->a->b;
+
return count_memory_stats (0, o);
+
]], [["i:3,c:2,e:0,v:6,r:3,rnd:2"]])
+
test_any([[
class X (void|object a, void|object b) {}; X o = X (X (X())); o->a->a->a = o->a;
6401:
o->b = o2; o2->a = o->a->a; o2 = 0;
-
return
Pike.
count_memory
(3, o) == 4 * Pike.count
_
memory
(
0
, o);
-
]],
1
)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:4,c:2,e:0,v:7,r:3,rnd:2"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X (X()));
6410:
X o2 = X(); o->b = o2; o2->a = o->a->a;
-
return
Pike.
count_memory
(3, o) == Pike.count
_
memory
(
0
, o);
-
]], 1)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:
1
,c:0,e:3,v:9,r:5,rnd:1"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X(), X()); o->a->b = o->b; o->b->a = o->a; o->a->a = o->b->b = X();
-
return
Pike.
count_memory
(3, o) == 4 * Pike.count
_
memory
(
0
, o);
-
]],
1
)
+
return count_memory_
stats
(
2
, o);
+
]],
[["i:4,c:3,e:0,v:8,r:4,rnd:2"]]
)
test_any([[ class X (void|object a, void|object b) {}; X o = X (X(), X());
6431:
o2->a->a = o2->b->b = X(); o->a->a = o->b->b = o2; o2 = 0;
-
mapping m = (["lookahead":
2
, "collect_stats": 1]);
+
return count_memory_stats (1, o);
+
]], [["i:7,c:6,e:0,v:15,r:8,rnd:2"]])
+
test_any([[
+
class X (void|object a, void|object b) {};
+
X o = X (X(), X());
+
o->a->b = o->b;
+
o->b->a = o->a;
+
X o2 = X (X(), X());
+
o2->a->b = o2->b;
+
o2->b->a = o2->a;
+
o2->a->a = o2->b->b = X();
+
o->a->a = o->b->b = o2;
+
o2 = o2->b;
+
mapping m = (["lookahead":
1
,
+
"collect_stats": 1
,
+
"collect_direct_externals": 1
]);
Pike.count_memory (m, o);
-
return m->
rounds
==
2
&& m->
internal
==
7
;
+
//werror ("%O\n", m);
+
return m->
internal
==
4
&& m->
cyclic
==
3 && m->external == 3 &&
+
equal (m->collect_direct_externals, ({o2}))
;
]], 1) test_any([[ mixed r = ([]), p = r;
6443:
p = p->next; p->next = ([]); p->next->prev = p; p = p->next; p->next = ([]); p->next->prev = p; p = 0;
-
return
Pike.
count_memory
(2, r) == Pike.count
_
memory
(
0
, r);
-
]], 1)
+
return count_memory_
stats
(
1
, r);
+
]],
[["i:
1
,c:0,e:1,v:6,r:2,rnd:1"]]
)
test_any([[ mixed r = ([]), p = r; p->next = ([]); p->next->prev = p;
6453:
p = p->next; p->next = ([]); p->next->prev = p; p = p->next; p->next = ([]); p->next->prev = p; p = 0;
-
return
Pike.
count_memory
(3, r) == 6 * Pike.count
_
memory
(
0
, r);
-
]],
1
)
+
return count_memory
_stats
(
2
, r)
;
+
]],
[["i:
6
,c:5,e:
0,
v:38,
r
:26,rnd:2"
]])
test_any([[ mixed r = ([]), p = r; p->next = ([]); p->next->prev = p;
6463:
p = p->next; p->next = ([]); p->next->prev = p; p = p->next; p->next = ([]); p->next->prev = p; p = 0;
-
return Pike.count_memory ((["lookahead":
3
, "return_count": 1]), r);
+
return Pike.count_memory ((["lookahead":
2
, "return_count": 1]), r);
]], 6)
-
+
test_any([[
+
class X (void|array|object a, void|array|object b) {};
+
array a = ({X (X())});
+
object o = a[0];
+
o->a->a = o; o->b = ({X (X())}); o = o->b[0];
+
o->a->a = o; o->b = ({X (X())}); o = o->b[0];
+
o->a->a = o; o->b = ({X (X())}); o = o->b[0];
+
o->a->a = o; o->b = ({X (X())}); o = o->b[0];
+
o->a->a = o; o = 0;
+
return count_memory_stats ((["lookahead": 2, "block_arrays": 1]), a);
+
]], [["i:15,c:10,e:0,v:35,r:20,rnd:6"]])
+
test_any([[
+
class X (void|array|object a, void|array|object b) {};
+
array a = ({X (X())});
+
object o = a[0];
+
o->a->a = o; o->a->b = ({X (X())}); o = o->a->b[0];
+
o->a->a = o; o->a->b = ({X (X())}); o = o->a->b[0];
+
o->a->a = o; o->a->b = ({X (X())}); o = o->a->b[0];
+
o->a->a = o; o->a->b = ({X (X())}); o = o->a->b[0];
+
o->a->a = o; o = 0;
+
return count_memory_stats ((["lookahead": 2, "block_arrays": 1]), a);
+
]], [["i:15,c:10,e:0,v:35,r:20,rnd:6"]])
test_true([[Pike.count_memory (Int.NATIVE_MAX, ({master()})) ==
-
Pike.count_memory (
0
, ({0}))]])
-
test_
do
([[
+
Pike.count_memory (
-1
, ({0}))]])
+
test_
any
([[
mapping m = (["lookahead": Int.NATIVE_MAX, "block_programs": 0, "collect_stats": 1]); Pike.count_memory (m, master());
-
]])
+
return m->rounds;
+
]]
, 2
)
cond([[has_value (cpp ("__AUTO_BIGNUM__"), "1")]], [[
-
test_true([[Pike.count_memory (
0
, Int.NATIVE_MAX + 1) >
-
Pike.count_memory (
0
, 17)]])
-
test_true([[Pike.count_memory (
0
, Int.NATIVE_MAX << 100) >
-
Pike.count_memory (
0
, Int.NATIVE_MAX + 1)]])
+
test_true([[Pike.count_memory (
-1
, Int.NATIVE_MAX + 1) >
+
Pike.count_memory (
-1
, 17)]])
+
test_true([[Pike.count_memory (
-1
, Int.NATIVE_MAX << 100) >
+
Pike.count_memory (
-1
, Int.NATIVE_MAX + 1)]])
]])
-
+
test_do([[add_constant("count_memory_stats")]])
// Numerical limits. test_true([[Int.NATIVE_MIN <= -2147483648]])