ENH: patchCloud: return pTraits<Type>::max for unfound points
[OpenFOAM-1.7.x.git] / applications / test / DynamicList / DynamicListTest.C
blob3ce0246653d640ff018af1d50e1b0b97a2fe71ec
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Description
26 \*---------------------------------------------------------------------------*/
28 #include "DynamicList.H"
29 #include "IOstreams.H"
31 using namespace Foam;
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 // Main program:
36 int main(int argc, char *argv[])
38     List<DynamicList<label, 1, 0> > ldl(2);
40     ldl[0](0) = 0;
41     ldl[0](2) = 2;
42     ldl[0](3) = 3;
43     ldl[0](1) = 1;
45     ldl[0].setCapacity(5);    // increase allocated size
46     ldl[1].setCapacity(10);   // increase allocated size
47     ldl[0].reserve(15);       // should increase allocated size
48     ldl[1].reserve(5);        // should not decrease allocated size
49     ldl[1](3) = 2;            // allocates space and sets value
51     // this works without a segfault, but doesn't change the list size
52     ldl[0][4] = 4;
54     ldl[1] = 3;
56     Info<< "<ldl>" << ldl << "</ldl>" << nl << "sizes: ";
57     forAll(ldl, i)
58     {
59         Info<< " " << ldl[i].size() << "/" << ldl[i].capacity();
60     }
61     Info<< endl;
63     List<List<label> > ll(2);
64     ll[0].transfer(ldl[0]);
65     ll[1].transfer(ldl[1].shrink());
67     Info<< "<ldl>" << ldl << "</ldl>" << nl << "sizes: ";
68     forAll(ldl, i)
69     {
70         Info<< " " << ldl[i].size() << "/" << ldl[i].capacity();
71     }
72     Info<< endl;
74     Info<< "<ll>" << ll << "</ll>" << nl << endl;
77     // test the transfer between DynamicLists
78     DynamicList<label, 1, 0> dlA;
79     DynamicList<label, 1, 0> dlB;
81     for (label i = 0; i < 5; i++)
82     {
83         dlA.append(i);
84     }
85     dlA.setCapacity(10);
87     Info<< "<dlA>" << dlA << "</dlA>" << nl << "sizes: "
88         << " " << dlA.size() << "/" << dlA.capacity() << endl;
90     dlB.transfer(dlA);
92     // provokes memory error if previous transfer did not maintain
93     // the correct allocated space
94     dlB[6] = 6;
96     Info<< "Transferred to dlB" << endl;
97     Info<< "<dlA>" << dlA << "</dlA>" << nl << "sizes: "
98         << " " << dlA.size() << "/" << dlA.capacity() << endl;
99     Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
100         << " " << dlB.size() << "/" << dlB.capacity() << endl;
102     // try with a normal list:
103     List<label> lstA;
104     lstA.transfer(dlB);
105     Info<< "Transferred to normal list" << endl;
106     Info<< "<lstA>" << lstA << "</lstA>" << nl << "sizes: "
107         << " " << lstA.size() << endl;
108     Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
109         << " " << dlB.size() << "/" << dlB.capacity() << endl;
111     // Copy back and append a few time
112     for (label i=0; i < 3; i++)
113     {
114         dlB.append(lstA);
115     }
117     Info<< "appended list a few times" << endl;
118     Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
119         << " " << dlB.size() << "/" << dlB.capacity() << endl;
121     // assign the list (should maintain allocated space)
122     dlB = lstA;
123     Info<< "assigned list" << endl;
124     Info<< "<dlB>" << dlB << "</dlB>" << nl << "sizes: "
125         << " " << dlB.size() << "/" << dlB.capacity() << endl;
128     // Copy back and append a few time
129     for (label i=0; i < 3; i++)
130     {
131         dlB.append(lstA);
132     }
135     // check allocation granularity
136     DynamicList<label, 6, 0> dlC;
138     Info<< "<dlC>" << dlC << "</dlC>" << nl << "sizes: "
139         << " " << dlC.size() << "/" << dlC.capacity() << endl;
141     dlC.reserve(dlB.size());
142     dlC = dlB;
144     Info<< "<dlC>" << dlC << "</dlC>" << nl << "sizes: "
145         << " " << dlC.size() << "/" << dlC.capacity() << endl;
147     List<label> lstB(dlC.xfer());
149     Info<< "Transferred to normal list via the xfer() method" << endl;
150     Info<< "<lstB>" << lstB << "</lstB>" << nl << "sizes: "
151         << " " << lstB.size() << endl;
152     Info<< "<dlC>" << dlC << "</dlC>" << nl << "sizes: "
153         << " " << dlC.size() << "/" << dlC.capacity() << endl;
155     DynamicList<label> dlD(lstB.xfer());
157     Info<< "Transfer construct from normal list" << endl;
158     Info<< "<lstB>" << lstB << "</lstB>" << nl << "sizes: "
159         << " " << lstB.size() << endl;
160     Info<< "<dlD>" << dlD << "</dlD>" << nl << "sizes: "
161         << " " << dlD.size() << "/" << dlD.capacity() << endl;
163     DynamicList<label,10> dlE1(10);
164     DynamicList<label> dlE2(dlE1);   // construct dissimilar
166     Info<< "<dlE1>" << dlE1 << "</dlE1>" << nl << "sizes: "
167         << " " << dlE1.size() << "/" << dlE1.capacity() << endl;
168     Info<< "<dlE2>" << dlE2 << "</dlE2>" << nl << "sizes: "
169         << " " << dlE2.size() << "/" << dlE2.capacity() << endl;
171     for (label elemI=0; elemI < 5; ++elemI)
172     {
173         dlE1.append(4 - elemI);
174         dlE2.append(elemI);
175     }
177     Info<< "<dlE2>" << dlE2 << "</dlE2>" << endl;
179     DynamicList<label> dlE3(dlE2);   // construct identical
180     Info<< "<dlE3>" << dlE3 << "</dlE3>" << endl;
182     dlE3 = dlE1;   // assign dissimilar
183     Info<< "<dlE3>" << dlE3 << "</dlE3>" << endl;
185     dlE3 = dlE2;   // assign identical
186     Info<< "<dlE3>" << dlE3 << "</dlE3>" << endl;
189     Info<< "\nEnd\n";
191     return 0;
195 // ************************************************************************* //