]> git.ipfire.org Git - thirdparty/squid.git/blame - test-suite/syntheticoperators.cc
SourceFormat Enforcement
[thirdparty/squid.git] / test-suite / syntheticoperators.cc
CommitLineData
d2d59a68 1/*
4ac4a490 2 * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
d2d59a68 3 *
4e0938ef
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
d2d59a68 7 */
8
582c2af2 9#include "squid.h"
d2d59a68 10#include "mem_node.h"
602d9612 11#include "stmem.h"
27e059d4 12
d2d59a68 13#include <iostream>
14
26ac0430
AJ
15class HasExplicit
16{
17public:
d2d59a68 18 HasExplicit();
19 ~HasExplicit();
20 HasExplicit(HasExplicit const &);
21 HasExplicit &operator=(HasExplicit const &);
22 static int const &Instances();
23 static int const &Assignments();
24 static void Assignments(int const &);
26ac0430 25private:
d2d59a68 26 static void AddInstance();
27 static void RemoveInstance();
28 static void Assignment();
29 static int Instances_;
30 static int Assignments_;
31};
32
33int HasExplicit::Instances_(0);
34int HasExplicit::Assignments_(0);
35
26ac0430
AJ
36HasExplicit::HasExplicit()
37{
d2d59a68 38 AddInstance();
39}
40
26ac0430
AJ
41HasExplicit::~HasExplicit()
42{
d2d59a68 43 RemoveInstance();
44}
45
26ac0430
AJ
46HasExplicit::HasExplicit(HasExplicit const &)
47{
d2d59a68 48 AddInstance();
49}
50
51HasExplicit &
26ac0430
AJ
52HasExplicit::operator= (HasExplicit const &)
53{
d2d59a68 54 Assignment();
55 return *this;
56}
57
58void
59HasExplicit::AddInstance()
60{
61 ++Instances_;
62}
63
64void
65HasExplicit::RemoveInstance()
66{
67 --Instances_;
68}
69
70void
71HasExplicit::Assignment()
72{
73 ++Assignments_;
74}
75
76int const &
77HasExplicit::Instances()
78{
79 return Instances_;
80}
81
82int const &
83HasExplicit::Assignments()
84{
85 return Assignments_;
86}
87
88void
89HasExplicit::Assignments(int const &newValue)
90{
91 Assignments_ = newValue;
92}
93
94void
95CheckHasExplicitWorks()
96{
97 assert (HasExplicit::Instances() == 0);
98 HasExplicit *one = new HasExplicit;
99 assert (HasExplicit::Instances() == 1);
100 HasExplicit *two = new HasExplicit;
101 assert (HasExplicit::Instances() == 2);
102 *two = *one;
103 assert (HasExplicit::Instances() == 2);
104 assert (HasExplicit::Assignments() == 1);
105 *two = *one;
106 assert (HasExplicit::Instances() == 2);
107 assert (HasExplicit::Assignments() == 2);
108 HasExplicit *three = new HasExplicit(*two);
109 assert (HasExplicit::Instances() == 3);
110 delete three;
111 assert (HasExplicit::Instances() == 2);
112 delete one;
113 assert (HasExplicit::Instances() == 1);
114 delete two;
115 assert (HasExplicit::Instances() == 0);
116 HasExplicit::Assignments(0);
117 assert (HasExplicit::Assignments() == 0);
118}
119
26ac0430
AJ
120class SyntheticOwnsExplicit
121{
122public:
d2d59a68 123 HasExplicit aMember;
124};
125
126void
127CheckSyntheticWorks()
128{
129 assert (HasExplicit::Instances() == 0);
130 assert (HasExplicit::Assignments() == 0);
131 SyntheticOwnsExplicit *one = new SyntheticOwnsExplicit;
132 assert (HasExplicit::Instances() == 1);
133 SyntheticOwnsExplicit *two = new SyntheticOwnsExplicit;
134 assert (HasExplicit::Instances() == 2);
135 *two = *one;
136 assert (HasExplicit::Instances() == 2);
137 assert (HasExplicit::Assignments() == 1);
138 *two = *one;
139 assert (HasExplicit::Instances() == 2);
140 assert (HasExplicit::Assignments() == 2);
141 SyntheticOwnsExplicit *three = new SyntheticOwnsExplicit(*two);
142 assert (HasExplicit::Instances() == 3);
143 delete three;
144 assert (HasExplicit::Instances() == 2);
145 delete one;
146 assert (HasExplicit::Instances() == 1);
147 delete two;
148 assert (HasExplicit::Instances() == 0);
149 HasExplicit::Assignments(0);
150 assert (HasExplicit::Assignments() == 0);
151}
152
153int
b610642c 154main(int argc, char **argv)
d2d59a68 155{
156 CheckHasExplicitWorks();
157 CheckSyntheticWorks();
158 return 0;
159}
f53969cc 160