16#include "CLHEP/Utility/memory.h"
28#if defined(_MSC_VER) && (_MSC_VER >= 1310)
29# pragma warning (disable : 4675)
60 assert(pi?
false:
true);
62 assert(pi.
get() == 0);
68 assert(pv?
false:
true);
70 assert(pv.
get() == 0);
76 assert(px?
false:
true);
78 assert(px.
get() == 0);
104 X & operator= (
X const &);
129 Y & operator= (
Y const &);
140 assert(pt?
false:
true);
142 assert(pt.
get() == 0);
152 pc0_test(
static_cast<int const*
>(0));
153 pc0_test(
static_cast<int volatile*
>(0));
154 pc0_test(
static_cast<int const volatile*
>(0));
158 assert(pi?
false:
true);
160 assert(pi.
get() == 0);
167 assert(pi?
false:
true);
169 assert(pi.
get() == 0);
176 assert(pv?
false:
true);
178 assert(pv.
get() == 0);
185 assert(pv?
false:
true);
187 assert(pv.
get() == 0);
195 pc0_test(
static_cast<X const volatile*
>(0));
199 assert(px?
false:
true);
201 assert(px.
get() == 0);
208 assert(px?
false:
true);
210 assert(px.
get() == 0);
217 assert(px?
false:
true);
219 assert(px.
get() == 0);
226 assert(pv?
false:
true);
228 assert(pv.
get() == 0);
235 assert(pv?
false:
true);
237 assert(pv.
get() == 0);
243 int * p =
new int(7);
245 assert(pi?
true:
false);
247 assert(pi.
get() == p);
254 int * p =
new int(7);
256 assert(pi?
true:
false);
258 assert(pi.
get() == p);
265 int * p =
new int(7);
267 assert(pv?
true:
false);
269 assert(pv.
get() == p);
275 int * p =
new int(7);
277 assert(pv?
true:
false);
279 assert(pv.
get() == p);
289 assert(px?
true:
false);
291 assert(px.
get() == p);
302 assert(px?
true:
false);
304 assert(px.
get() == p);
315 assert(pv?
true:
false);
317 assert(pv.
get() == p);
328 assert(pv?
true:
false);
330 assert(pv.
get() == p);
342 assert(px?
true:
false);
344 assert(px.
get() == p);
357 assert(px?
true:
false);
359 assert(px.
get() == p);
400 assert(pi?
false:
true);
402 assert(pi.
get() == 0);
409 assert(pv?
false:
true);
411 assert(pv.
get() == 0);
418 assert(pv?
false:
true);
420 assert(pv.
get() == 0);
427 assert(px?
false:
true);
429 assert(px.
get() == 0);
436 assert(pv?
false:
true);
438 assert(pv.
get() == 0);
445 assert(pv?
false:
true);
447 assert(pv.
get() == 0);
456 assert(pi?
true:
false);
458 assert(pi.
get() == &
m);
467 assert(pi?
true:
false);
469 assert(pi.
get() == &
m);
478 assert(pv?
true:
false);
480 assert(pv.
get() == &
m);
489 assert(pv?
true:
false);
491 assert(pv.
get() == &
m);
507 assert(pi2?
false:
true);
509 assert(pi2.
get() == 0);
514 assert(pi3?
false:
true);
516 assert(pi3.
get() == 0);
521 assert(pi4?
false:
true);
523 assert(pi4.
get() == 0);
532 assert(pv2?
false:
true);
534 assert(pv2.
get() == 0);
543 assert(px2?
false:
true);
545 assert(px2.
get() == 0);
550 assert(px3?
false:
true);
552 assert(px3.
get() == 0);
561 assert(pi2?
false:
true);
563 assert(pi2.
get() == 0);
567 assert(!(pi < pi2 || pi2 < pi));
571 assert(pi3?
false:
true);
573 assert(pi3.
get() == 0);
577 assert(!(pi < pi3 || pi3 < pi));
581 assert(pi4?
false:
true);
583 assert(pi4.
get() == 0);
587 assert(!(pi2 < pi4 || pi4 < pi2));
590 assert(!(pi3 < pi4 || pi4 < pi3));
598 assert(px2?
false:
true);
600 assert(px2.
get() == 0);
604 assert(!(px < px2 || px2 < px));
608 assert(px3?
false:
true);
610 assert(px3.
get() == 0);
614 assert(!(px < px3 || px3 < px));
618 assert(px4?
false:
true);
620 assert(px4.
get() == 0);
624 assert(!(px2 < px4 || px4 < px2));
627 assert(!(px3 < px4 || px4 < px3));
631 int * p =
new int(7);
636 assert(pi2?
true:
false);
638 assert(pi2.
get() == p);
643 assert(!(pi < pi2 || pi2 < pi));
647 int * p =
new int(7);
649 assert(pv.
get() == p);
653 assert(pv2?
true:
false);
655 assert(pv2.
get() == p);
659 assert(!(pv < pv2 || pv2 < pv));
667 assert(px.
get() == p);
671 assert(px2?
true:
false);
673 assert(px2.
get() == p);
680 assert(!(px < px2 || px2 < px));
684 assert(px3?
true:
false);
686 assert(px3.
get() == p);
690 assert(!(px < px3 || px3 < px));
694 assert(px4?
true:
false);
696 assert(px4.
get() == p);
700 assert(!(px2 < px4 || px4 < px2));
703 assert(!(px3 < px4 || px4 < px3));
712 assert(py.
get() == p);
716 assert(px?
true:
false);
718 assert(px.
get() == p);
722 assert(!(px < py || py < px));
729 assert(pv?
true:
false);
731 assert(pv.
get() == px.
get());
735 assert(!(px < pv || pv < px));
739 assert(pv2?
true:
false);
741 assert(pv2.
get() == py.
get());
745 assert(!(py < pv2 || pv2 < py));
748 assert(!(pv < pv2 || pv2 < pv));
765 throw "shared_ptr<Y> p2(wp) failed to throw";
774 throw "shared_ptr<X> p3(wp) failed to throw";
789 assert(p2.
get() == 0);
793 assert(p3.
get() == 0);
803 assert(p2?
true:
false);
805 assert(p2.
get() == p.
get());
811 assert(!(p < p2 || p2 < p));
814 assert(p3?
true:
false);
816 assert(p3.
get() == p.
get());
830 throw "shared_ptr<Y> p2(wp) failed to throw";
839 throw "shared_ptr<X> p3(wp) failed to throw";
851 std::auto_ptr<int> p;
853 assert(pi?
false:
true);
855 assert(pi.
get() == 0);
858 assert(p.get() == 0);
862 std::auto_ptr<int> p;
864 assert(pi?
false:
true);
866 assert(pi.
get() == 0);
869 assert(p.get() == 0);
873 std::auto_ptr<int> p;
875 assert(pv?
false:
true);
877 assert(pv.
get() == 0);
880 assert(p.get() == 0);
884 std::auto_ptr<int> p;
886 assert(pv?
false:
true);
888 assert(pv.
get() == 0);
891 assert(p.get() == 0);
897 assert(px?
false:
true);
899 assert(px.
get() == 0);
902 assert(p.get() == 0);
908 assert(px?
false:
true);
910 assert(px.
get() == 0);
913 assert(p.get() == 0);
919 assert(px?
false:
true);
921 assert(px.
get() == 0);
924 assert(p.get() == 0);
930 assert(px?
false:
true);
932 assert(px.
get() == 0);
935 assert(p.get() == 0);
941 assert(pv?
false:
true);
943 assert(pv.
get() == 0);
946 assert(p.get() == 0);
952 assert(pv?
false:
true);
954 assert(pv.
get() == 0);
957 assert(p.get() == 0);
961 std::auto_ptr<int> p(
new int(7));
964 assert(pi?
true:
false);
966 assert(pi.
get() == q);
971 assert(p.get() == 0);
975 std::auto_ptr<int> p(
new int(7));
978 assert(pi?
true:
false);
980 assert(pi.
get() == q);
985 assert(p.get() == 0);
989 std::auto_ptr<int> p(
new int(7));
992 assert(pv?
true:
false);
994 assert(pv.
get() == q);
998 assert(p.get() == 0);
1002 std::auto_ptr<int> p(
new int(7));
1005 assert(pv?
true:
false);
1007 assert(pv.
get() == q);
1011 assert(p.get() == 0);
1017 std::auto_ptr<X> p(
new X);
1020 assert(px?
true:
false);
1022 assert(px.
get() == q);
1027 assert(p.get() == 0);
1033 std::auto_ptr<X> p(
new X);
1036 assert(px?
true:
false);
1038 assert(px.
get() == q);
1043 assert(p.get() == 0);
1049 std::auto_ptr<X> p(
new X);
1052 assert(pv?
true:
false);
1054 assert(pv.
get() == q);
1059 assert(p.get() == 0);
1065 std::auto_ptr<X> p(
new X);
1068 assert(pv?
true:
false);
1070 assert(pv.
get() == q);
1075 assert(p.get() == 0);
1082 std::auto_ptr<Y> p(
new Y);
1085 assert(px?
true:
false);
1087 assert(px.
get() == q);
1093 assert(p.get() == 0);
1100 std::auto_ptr<Y> p(
new Y);
1103 assert(px?
true:
false);
1105 assert(px.
get() == q);
1111 assert(p.get() == 0);
1157 X & operator= (
X const &);
1180 Y & operator= (
Y const &);
1194 assert(p1?
false:
true);
1196 assert(p1.
get() == 0);
1203 assert(p1?
false:
true);
1205 assert(p1.
get() == 0);
1212 assert(p1?
false:
true);
1214 assert(p1.
get() == 0);
1223 assert(p1?
false:
true);
1225 assert(p1.
get() == 0);
1232 assert(p1?
false:
true);
1234 assert(p1.
get() == 0);
1241 assert(p1?
false:
true);
1243 assert(p1.
get() == 0);
1251 assert(!(p1 < p4 || p4 < p1));
1267 assert(p1?
false:
true);
1269 assert(p1.
get() == 0);
1276 assert(p1?
false:
true);
1278 assert(p1.
get() == 0);
1285 assert(p1?
false:
true);
1287 assert(p1.
get() == 0);
1300 assert(!(p1 < p4 || p4 < p1));
1327 assert(p1?
false:
true);
1329 assert(p1.
get() == 0);
1340 assert(!(p1 < p5 || p5 < p1));
1358 assert(p1?
false:
true);
1360 assert(p1.
get() == 0);
1380 assert(!(p1 < p5 || p5 < p1));
1407 std::auto_ptr<int> p2;
1410 assert(p1?
false:
true);
1412 assert(p1.
get() == 0);
1416 std::auto_ptr<int> p3(p);
1419 assert(p1.
get() == p);
1422 assert(p3.get() == 0);
1425 assert(p1?
false:
true);
1427 assert(p1.
get() == 0);
1434 std::auto_ptr<int> p2;
1437 assert(p1?
false:
true);
1439 assert(p1.
get() == 0);
1443 std::auto_ptr<int> p3(p);
1446 assert(p1.
get() == p);
1449 assert(p3.get() == 0);
1452 assert(p1?
false:
true);
1454 assert(p1.
get() == 0);
1462 std::auto_ptr<Y> p2;
1465 assert(p1?
false:
true);
1467 assert(p1.
get() == 0);
1473 std::auto_ptr<Y> p3(p);
1479 assert(p1.
get() == p);
1484 assert(p3.get() == 0);
1487 assert(p1?
false:
true);
1489 assert(p1.
get() == 0);
1534 X & operator= (
X const &);
1545 assert(pi?
false:
true);
1547 assert(pi.
get() == 0);
1554 assert(pi?
false:
true);
1556 assert(pi.
get() == 0);
1563 assert(pi?
false:
true);
1565 assert(pi.
get() == 0);
1572 assert(px?
false:
true);
1574 assert(px.
get() == 0);
1581 assert(px?
false:
true);
1583 assert(px.
get() == 0);
1590 assert(px?
false:
true);
1592 assert(px.
get() == 0);
1601 assert(px?
false:
true);
1603 assert(px.
get() == 0);
1611 assert(pv?
false:
true);
1613 assert(pv.
get() == 0);
1622 assert(pv?
false:
true);
1624 assert(pv.
get() == 0);
1653 Y & operator= (
Y const &);
1664 pi.
reset(
static_cast<int*
>(0));
1665 assert(pi?
false:
true);
1667 assert(pi.
get() == 0);
1673 assert(pi?
true:
false);
1675 assert(pi.
get() == p);
1679 pi.
reset(
static_cast<int*
>(0));
1680 assert(pi?
false:
true);
1682 assert(pi.
get() == 0);
1690 px.
reset(
static_cast<X*
>(0));
1691 assert(px?
false:
true);
1693 assert(px.
get() == 0);
1700 assert(px?
true:
false);
1702 assert(px.
get() == p);
1707 px.
reset(
static_cast<X*
>(0));
1708 assert(px?
false:
true);
1710 assert(px.
get() == 0);
1718 assert(px?
true:
false);
1720 assert(px.
get() == q);
1726 px.
reset(
static_cast<Y*
>(0));
1727 assert(px?
false:
true);
1729 assert(px.
get() == 0);
1739 pv.
reset(
static_cast<X*
>(0));
1740 assert(pv?
false:
true);
1742 assert(pv.
get() == 0);
1749 assert(pv?
true:
false);
1751 assert(pv.
get() == p);
1756 pv.
reset(
static_cast<X*
>(0));
1757 assert(pv?
false:
true);
1759 assert(pv.
get() == 0);
1767 assert(pv?
true:
false);
1769 assert(pv.
get() == q);
1775 pv.
reset(
static_cast<Y*
>(0));
1776 assert(pv?
false:
true);
1778 assert(pv.
get() == 0);
1802 assert(pi?
false:
true);
1804 assert(pi.
get() == 0);
1813 assert(pi?
true:
false);
1815 assert(pi.
get() == &
m);
1821 assert(pi?
false:
true);
1823 assert(pi.
get() == 0);
1835 assert(px?
false:
true);
1837 assert(px.
get() == 0);
1846 assert(px?
true:
false);
1848 assert(px.
get() == &x);
1854 assert(px?
false:
true);
1856 assert(px.
get() == 0);
1863 assert(px?
true:
false);
1865 assert(px.
get() == &y);
1871 assert(px?
false:
true);
1873 assert(px.
get() == 0);
1885 assert(pv?
false:
true);
1887 assert(pv.
get() == 0);
1896 assert(pv?
true:
false);
1898 assert(pv.
get() == &x);
1904 assert(pv?
false:
true);
1906 assert(pv.
get() == 0);
1913 assert(pv?
true:
false);
1915 assert(pv.
get() == &y);
1921 assert(pv?
false:
true);
1923 assert(pv.
get() == 0);
1935 assert(px?
false:
true);
1937 assert(px.
get() == 0);
1969 assert(px.
get() == 0);
1970 assert(px?
false:
true);
1978 assert(px.
get() == 0);
1979 assert(px?
false:
true);
1988 assert(px.
get() == 0);
1989 assert(px?
false:
true);
1999 assert(px.
get() == p);
2000 assert(px?
true:
false);
2002 assert(&*px == px.
get());
2003 assert(px.operator ->() == px.
get());
2012 assert(px.
get() == p);
2013 assert(px?
true:
false);
2015 assert(&*px == px.
get());
2016 assert(px.operator ->() == px.
get());
2092 assert(px.
get() == 0);
2093 assert(px2.
get() == 0);
2098 assert(px.
get() == 0);
2099 assert(px2.
get() == 0);
2110 assert(px.
get() == p);
2112 assert(px2.
get() == 0);
2113 assert(px3.
get() == p);
2119 assert(px.
get() == 0);
2120 assert(px2.
get() == p);
2122 assert(px3.
get() == p);
2135 assert(px.
get() == p2);
2137 assert(px2.
get() == p1);
2139 assert(px3.
get() == p2);
2145 assert(px.
get() == p1);
2147 assert(px2.
get() == p2);
2149 assert(px3.
get() == p2);
2181 assert(!(px != px));
2186 assert(px.
get() == px2.
get());
2188 assert(!(px != px2));
2189 assert(!(px < px2 && px2 < px));
2197 assert(!(px2 != px2));
2198 assert(!(px2 < px2));
2200 assert(px.
get() == px2.
get());
2202 assert(!(px != px2));
2203 assert(!(px < px2 && px2 < px));
2211 assert(!(px2 != px2));
2212 assert(!(px2 < px2));
2214 assert(px.
get() != px2.
get());
2216 assert(!(px == px2));
2217 assert(px < px2 || px2 < px);
2218 assert(!(px < px2 && px2 < px));
2225 assert(px.
get() != px2.
get());
2227 assert(!(px == px2));
2228 assert(px < px2 || px2 < px);
2229 assert(!(px < px2 && px2 < px));
2237 assert(!(px2 != px2));
2238 assert(!(px2 < px2));
2240 assert(px.
get() == px2.
get());
2242 assert(!(px != px2));
2243 assert(!(px < px2 || px2 < px));
2251 assert(px.
get() != pz.
get());
2253 assert(!(px == pz));
2255 assert(py.
get() != pz.
get());
2257 assert(!(py == pz));
2259 assert(px < py || py < px);
2260 assert(px < pz || pz < px);
2261 assert(py < pz || pz < py);
2263 assert(!(px < py && py < px));
2264 assert(!(px < pz && pz < px));
2265 assert(!(py < pz && pz < py));
2270 assert(!(pvx != pvx));
2271 assert(!(pvx < pvx));
2276 assert(pvx < pvy || pvy < pvx);
2277 assert(pvx < pvz || pvz < pvx);
2278 assert(pvy < pvz || pvz < pvy);
2280 assert(!(pvx < pvy && pvy < pvx));
2281 assert(!(pvx < pvz && pvz < pvx));
2282 assert(!(pvy < pvz && pvz < pvy));
2290 assert(!(px != px));
2295 assert(px.
get() == pz.
get());
2297 assert(!(px != pz));
2299 assert(py.
get() == pz.
get());
2301 assert(!(py != pz));
2303 assert(!(px < py || py < px));
2304 assert(!(px < pz || pz < px));
2305 assert(!(py < pz || pz < py));
2312 assert(pvx.
get() != pvy.
get());
2314 assert(!(pvx == pvy));
2317 assert(!(pvx < pvy || pvy < pvx));
2320 assert(!(pvx < pvz || pvz < pvx));
2321 assert(!(pvy < pvz || pvz < pvy));
2345 assert(pi.
get() == 0);
2348 assert(px.
get() == 0);
2356 assert(pi.
get() == pi2.
get());
2357 assert(!(pi < pi2 || pi2 < pi));
2368 assert(px.
get() == px2.
get());
2369 assert(!(px < px2 || px2 < px));
2379 assert(px.
get() == py.
get());
2384 assert(!(px < px2 || px2 < px));
2402 assert(px2.
get() == 0);
2409 assert(px2.
get() == 0);
2416 assert(px2.
get() == 0);
2423 assert(px.
get() == px2.
get());
2424 assert(!(px < px2 || px2 < px));
2433 assert(px.
get() == px2.
get());
2434 assert(!(px < px2 || px2 < px));
2460 assert(pw.
get() == 0);
2467 assert(pw.
get() == 0);
2470 assert(pv < pv2 || pv2 < pv);
2477 assert(pw.
get() == 0);
2480 assert(pv < pv2 || pv2 < pv);
2487 assert(pw.
get() == 0);
2490 assert(pv < pv2 || pv2 < pv);
2497 assert(pw.
get() == pv.
get());
2502 assert(!(pv < pv2 || pv2 < pv));
2518 std::vector< shared_ptr<int> > vi;
2538 std::vector< shared_ptr<X> > vx;
2558 std::map< shared_ptr<void>,
long >
m;
2561 for(std::vector<
shared_ptr<int> >::iterator i = vi.begin(); i != vi.end(); ++i)
2568 for(std::vector<
shared_ptr<X> >::iterator i = vx.begin(); i != vx.end(); ++i)
2577 assert(i->first.use_count() == i->second + 1);
2598 assert(!p->next->next);
2626 foo * foo_ptr =
new foo;
2705 fread(pf, 0, 17041);
2724 file(
char const * name,
char const * mode);
2728 void read(
void * data,
long size);
2741 file f(
"name",
"mode");
2749 assert(
f.total_size() == 152+894);
2752 file f3(
"name2",
"mode2");
2771 virtual void f(
int) = 0;
2772 virtual int g() = 0;
2796 assert(px->g() == 170);
2829 void operator()(
X * p) {
delete p; }
2903 void operator delete(
void *)
2905 throw "n_spt_static::X::operator delete() called.";
2955 if(--p->
count == 0)
delete p;
2982 assert(p->
count == 0);
2984 assert(px.
get() == p);
2985 assert(p->
count == 1);
2987 assert(px2.
get() == p);
2988 assert(p->
count == 1);
3135namespace n_spt_shared_from_this
3142 virtual void f() = 0;
3161 :
public X,
public Y
3167 impl & operator=(impl
const &);
3193 assert(py.
get() != 0);
3197 assert(px.
get() != 0);
3201 assert(py.
get() == py2.
get());
3202 assert(!(py < py2 || py2 < py));
3285 pf->fread_called =
true;
3303 impl(
char const *,
char const *): total_size_(0)
3315 total_size_ += size;
3331 pimpl_->read(data, size);
3336 return pimpl_->total_size();
void swap(shared_ptr< P > &)
shared_ptr< P > lock() const
void setWeak(shared_ptr< foo > s)
virtual void handle(int event)
virtual void handle(int event)=0
smart_pointer_deleter(P const &p)
void operator()(void const *)
void read(void *, long size)
impl(char const *, char const *)
file(char const *name, char const *mode)
void read(void *data, long size)
static shared_ptr< X > create()
P * get_pointer(shared_ptr< P > const &)
void swap(shared_ptr< P > &, shared_ptr< P > &)
void auto_ptr_assignment()
void conversion_assignment()
void weak_ptr_constructor()
void auto_ptr_constructor()
void pointer_constructor()
void deleter_constructor()
void default_constructor()
void deleter(incomplete *)
shared_ptr< X > createX()
void handle_event(int event)
void install_event_handler(shared_ptr< event_handler > p)
void remove_event_handler()
another_ptr< event_handler > get_event_handler()
shared_ptr< event_handler > current_handler
void fread(shared_ptr< file > f, void *data, long size)
shared_ptr< file > fopen(char const *name, char const *mode)
shared_ptr< X > make_shared_from_intrusive(X *p)
void intrusive_ptr_release(X *p)
void intrusive_ptr_add_ref(X *p)
void operator()(incomplete *p)
void operator()(void const *) const