Merge "Report tests using Draw*BaseVertex as NotSupported" am: f96636fdfa
[platform/upstream/VK-GL-CTS.git] / framework / delibs / decpp / deRingBuffer.cpp
1 /*-------------------------------------------------------------------------
2  * drawElements C++ Base Library
3  * -----------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Ring buffer template.
22  *//*--------------------------------------------------------------------*/
23
24 #include "deRingBuffer.hpp"
25 #include "deRandom.hpp"
26
27 #include <vector>
28
29 using std::vector;
30
31 namespace de
32 {
33
34 void RingBuffer_selfTest (void)
35 {
36         const int numIterations = 16;
37
38         for (int iterNdx = 0; iterNdx < numIterations; iterNdx++)
39         {
40                 Random                  rnd                     (iterNdx);
41                 int                             bufSize         = rnd.getInt(1, 2048);
42                 int                             dataSize        = rnd.getInt(100, 10000);
43                 RingBuffer<int> buffer          (bufSize);
44                 vector<int>             data            (dataSize);
45
46                 for (int i = 0; i < dataSize; i++)
47                         data[i] = i;
48
49                 int                             writePos        = 0;
50                 int                             readPos         = 0;
51
52                 while (writePos < dataSize || readPos < dataSize)
53                 {
54                         bool    canRead         = buffer.getNumElements() > 0;
55                         bool    canWrite        = writePos < dataSize && buffer.getNumFree() > 0;
56                         bool    doRead          = canRead && (!canWrite || rnd.getBool());
57
58                         // Free count must match.
59                         DE_TEST_ASSERT(buffer.getNumFree() == bufSize - (writePos-readPos));
60
61                         if (doRead)
62                         {
63                                 int                     numBytes        = rnd.getInt(1, buffer.getNumElements());
64                                 vector<int>     tmp                     (numBytes);
65
66                                 buffer.popBack(&tmp[0], numBytes);
67
68                                 for (int i = 0; i < numBytes; i++)
69                                         DE_TEST_ASSERT(tmp[i] == data[readPos+i]);
70
71                                 readPos += numBytes;
72                         }
73                         else
74                         {
75                                 DE_TEST_ASSERT(canWrite);
76
77                                 int numBytes = rnd.getInt(1, de::min(dataSize-writePos, buffer.getNumFree()));
78                                 buffer.pushFront(&data[writePos], numBytes);
79                                 writePos += numBytes;
80                         }
81                 }
82         }
83 }
84
85 } // de