NVBIO
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cache_test.cpp
Go to the documentation of this file.
1 /*
2  * nvbio
3  * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the NVIDIA CORPORATION nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 // packedstream_test.cpp
29 //
30 
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <nvbio/basic/types.h>
35 #include <nvbio/basic/cache.h>
36 
37 using namespace nvbio;
38 
40 {
41  // constructor
42  CacheManager() : m_size(0) {}
43 
44  // acquire element i
45  bool acquire(const uint32 i)
46  {
47  if (m_size >= 100u)
48  return false;
49 
50  ++m_size;
51  return true;
52  }
53 
54  // release element i
55  void release(const uint32 i)
56  {
57  --m_size;
58  }
59 
60  // is cache usage below the low-watermark?
61  bool low_watermark() const
62  {
63  return (m_size < 75u);
64  }
65 
67 };
68 
70 {
71  printf("cache test... started\n");
72  CacheManager manager;
73 
74  LRU<CacheManager> cache( manager );
75  for (uint32 i = 0; i < 1000; ++i)
76  {
77  cache.pin(i);
78  cache.unpin(i);
79  }
80 
81  printf(" test overflow... started\n");
82  bool overflow = false;
83 
84  try
85  {
86  for (uint32 i = 0; i < 200; ++i)
87  cache.pin(i);
88  }
89  catch (cache_overflow)
90  {
91  overflow = true;
92  }
93  if (overflow == false)
94  printf(" error: overflow was expected, but did not occurr!\n");
95  else
96  printf(" test overflow... done\n");
97  printf("cache test... done\n");
98  return 0u;
99 }