git-svn-id: https://leveldb.googlecode.com/svn/trunk@33 62dab493-f737-651d-591e-8d6aee1b9529main
							parent
							
								
									ccf0fcd5c2
								
							
						
					
					
						commit
						e0cbd242cb
					
				| @ -0,0 +1,115 @@ | |||||||
|  | // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
 | ||||||
|  | // Use of this source code is governed by a BSD-style license that can be
 | ||||||
|  | // found in the LICENSE file. See the AUTHORS file for names of contributors.
 | ||||||
|  | 
 | ||||||
|  | #include "db/version_set.h" | ||||||
|  | #include "util/logging.h" | ||||||
|  | #include "util/testharness.h" | ||||||
|  | #include "util/testutil.h" | ||||||
|  | 
 | ||||||
|  | namespace leveldb { | ||||||
|  | 
 | ||||||
|  | class FindFileTest { | ||||||
|  |  public: | ||||||
|  |   std::vector<FileMetaData*> files_; | ||||||
|  | 
 | ||||||
|  |   ~FindFileTest() { | ||||||
|  |     for (int i = 0; i < files_.size(); i++) { | ||||||
|  |       delete files_[i]; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void Add(const char* smallest, const char* largest) { | ||||||
|  |     FileMetaData* f = new FileMetaData; | ||||||
|  |     f->number = files_.size() + 1; | ||||||
|  |     f->smallest = InternalKey(smallest, 100, kTypeValue); | ||||||
|  |     f->largest = InternalKey(largest, 100, kTypeValue); | ||||||
|  |     files_.push_back(f); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   int Find(const char* key) { | ||||||
|  |     InternalKey target(key, 100, kTypeValue); | ||||||
|  |     InternalKeyComparator cmp(BytewiseComparator()); | ||||||
|  |     return FindFile(cmp, files_, target.Encode()); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   bool Overlaps(const char* smallest, const char* largest) { | ||||||
|  |     InternalKey s(smallest, 100, kTypeValue); | ||||||
|  |     InternalKey l(largest, 100, kTypeValue); | ||||||
|  |     InternalKeyComparator cmp(BytewiseComparator()); | ||||||
|  |     return SomeFileOverlapsRange(cmp, files_, s, l); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | TEST(FindFileTest, Empty) { | ||||||
|  |   ASSERT_EQ(0, Find("foo")); | ||||||
|  |   ASSERT_TRUE(! Overlaps("a", "z")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(FindFileTest, Single) { | ||||||
|  |   Add("p", "q"); | ||||||
|  |   ASSERT_EQ(0, Find("a")); | ||||||
|  |   ASSERT_EQ(0, Find("p")); | ||||||
|  |   ASSERT_EQ(0, Find("p1")); | ||||||
|  |   ASSERT_EQ(0, Find("q")); | ||||||
|  |   ASSERT_EQ(1, Find("q1")); | ||||||
|  |   ASSERT_EQ(1, Find("z")); | ||||||
|  | 
 | ||||||
|  |   ASSERT_TRUE(! Overlaps("a", "b")); | ||||||
|  |   ASSERT_TRUE(! Overlaps("z1", "z2")); | ||||||
|  |   ASSERT_TRUE(Overlaps("a", "p")); | ||||||
|  |   ASSERT_TRUE(Overlaps("a", "q")); | ||||||
|  |   ASSERT_TRUE(Overlaps("a", "z")); | ||||||
|  |   ASSERT_TRUE(Overlaps("p", "p1")); | ||||||
|  |   ASSERT_TRUE(Overlaps("p", "q")); | ||||||
|  |   ASSERT_TRUE(Overlaps("p", "z")); | ||||||
|  |   ASSERT_TRUE(Overlaps("p1", "p2")); | ||||||
|  |   ASSERT_TRUE(Overlaps("p1", "z")); | ||||||
|  |   ASSERT_TRUE(Overlaps("q", "q")); | ||||||
|  |   ASSERT_TRUE(Overlaps("q", "q1")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | TEST(FindFileTest, Multiple) { | ||||||
|  |   Add("150", "200"); | ||||||
|  |   Add("200", "250"); | ||||||
|  |   Add("300", "350"); | ||||||
|  |   Add("400", "450"); | ||||||
|  |   ASSERT_EQ(0, Find("100")); | ||||||
|  |   ASSERT_EQ(0, Find("150")); | ||||||
|  |   ASSERT_EQ(0, Find("151")); | ||||||
|  |   ASSERT_EQ(0, Find("199")); | ||||||
|  |   ASSERT_EQ(0, Find("200")); | ||||||
|  |   ASSERT_EQ(1, Find("201")); | ||||||
|  |   ASSERT_EQ(1, Find("249")); | ||||||
|  |   ASSERT_EQ(1, Find("250")); | ||||||
|  |   ASSERT_EQ(2, Find("251")); | ||||||
|  |   ASSERT_EQ(2, Find("299")); | ||||||
|  |   ASSERT_EQ(2, Find("300")); | ||||||
|  |   ASSERT_EQ(2, Find("349")); | ||||||
|  |   ASSERT_EQ(2, Find("350")); | ||||||
|  |   ASSERT_EQ(3, Find("351")); | ||||||
|  |   ASSERT_EQ(3, Find("400")); | ||||||
|  |   ASSERT_EQ(3, Find("450")); | ||||||
|  |   ASSERT_EQ(4, Find("451")); | ||||||
|  | 
 | ||||||
|  |   ASSERT_TRUE(! Overlaps("100", "149")); | ||||||
|  |   ASSERT_TRUE(! Overlaps("251", "299")); | ||||||
|  |   ASSERT_TRUE(! Overlaps("451", "500")); | ||||||
|  |   ASSERT_TRUE(! Overlaps("351", "399")); | ||||||
|  | 
 | ||||||
|  |   ASSERT_TRUE(Overlaps("100", "150")); | ||||||
|  |   ASSERT_TRUE(Overlaps("100", "200")); | ||||||
|  |   ASSERT_TRUE(Overlaps("100", "300")); | ||||||
|  |   ASSERT_TRUE(Overlaps("100", "400")); | ||||||
|  |   ASSERT_TRUE(Overlaps("100", "500")); | ||||||
|  |   ASSERT_TRUE(Overlaps("375", "400")); | ||||||
|  |   ASSERT_TRUE(Overlaps("450", "450")); | ||||||
|  |   ASSERT_TRUE(Overlaps("450", "500")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(int argc, char** argv) { | ||||||
|  |   return leveldb::test::RunAllTests(); | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue
	
	 gabor@google.com
						gabor@google.com