~ubuntu-branches/ubuntu/raring/ceph/raring

« back to all changes in this revision

Viewing changes to src/leveldb/util/arena_test.cc

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-07-19 08:28:18 UTC
  • Revision ID: package-import@ubuntu.com-20120719082818-rdnt9r2hc0ced8n5
Tags: 0.48-1ubuntu2
* Drop use of in-tree dependencies, re-align with Debian:
  - d/patches/{intree_leveldb|add-powerpc-support}.patch: Dropped.
  - d/patches/series: Use patches to support lib{leveldb|s3}-dev usage.
  - d/control: BD on libsnappy-dev, liblevedb-dev, libs3-dev.
  - d/rules: Use system provided leveldb and libs3.
  - d/rules: Enable hardening.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
 
// Use of this source code is governed by a BSD-style license that can be
3
 
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4
 
 
5
 
#include "util/arena.h"
6
 
 
7
 
#include "util/random.h"
8
 
#include "util/testharness.h"
9
 
 
10
 
namespace leveldb {
11
 
 
12
 
class ArenaTest { };
13
 
 
14
 
TEST(ArenaTest, Empty) {
15
 
  Arena arena;
16
 
}
17
 
 
18
 
TEST(ArenaTest, Simple) {
19
 
  std::vector<std::pair<size_t, char*> > allocated;
20
 
  Arena arena;
21
 
  const int N = 100000;
22
 
  size_t bytes = 0;
23
 
  Random rnd(301);
24
 
  for (int i = 0; i < N; i++) {
25
 
    size_t s;
26
 
    if (i % (N / 10) == 0) {
27
 
      s = i;
28
 
    } else {
29
 
      s = rnd.OneIn(4000) ? rnd.Uniform(6000) :
30
 
          (rnd.OneIn(10) ? rnd.Uniform(100) : rnd.Uniform(20));
31
 
    }
32
 
    if (s == 0) {
33
 
      // Our arena disallows size 0 allocations.
34
 
      s = 1;
35
 
    }
36
 
    char* r;
37
 
    if (rnd.OneIn(10)) {
38
 
      r = arena.AllocateAligned(s);
39
 
    } else {
40
 
      r = arena.Allocate(s);
41
 
    }
42
 
 
43
 
    for (int b = 0; b < s; b++) {
44
 
      // Fill the "i"th allocation with a known bit pattern
45
 
      r[b] = i % 256;
46
 
    }
47
 
    bytes += s;
48
 
    allocated.push_back(std::make_pair(s, r));
49
 
    ASSERT_GE(arena.MemoryUsage(), bytes);
50
 
    if (i > N/10) {
51
 
      ASSERT_LE(arena.MemoryUsage(), bytes * 1.10);
52
 
    }
53
 
  }
54
 
  for (int i = 0; i < allocated.size(); i++) {
55
 
    size_t num_bytes = allocated[i].first;
56
 
    const char* p = allocated[i].second;
57
 
    for (int b = 0; b < num_bytes; b++) {
58
 
      // Check the "i"th allocation for the known bit pattern
59
 
      ASSERT_EQ(int(p[b]) & 0xff, i % 256);
60
 
    }
61
 
  }
62
 
}
63
 
 
64
 
}  // namespace leveldb
65
 
 
66
 
int main(int argc, char** argv) {
67
 
  return leveldb::test::RunAllTests();
68
 
}