1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under the BSD-style license found in the
3 // LICENSE file in the root directory of this source tree. An additional grant
4 // of patent rights can be found in the PATENTS file in the same directory.
8 import org
.junit
.ClassRule
;
10 import org
.junit
.Test
;
11 import org
.junit
.rules
.TemporaryFolder
;
13 import java
.io
.IOException
;
14 import java
.nio
.file
.FileSystems
;
16 import static org
.assertj
.core
.api
.Assertions
.assertThat
;
18 public class ComparatorTest
{
21 public static final RocksMemoryResource rocksMemoryResource
=
22 new RocksMemoryResource();
25 public TemporaryFolder dbFolder
= new TemporaryFolder();
28 public void javaComparator() throws IOException
, RocksDBException
{
30 final AbstractComparatorTest comparatorTest
= new AbstractComparatorTest() {
32 public AbstractComparator
getAscendingIntKeyComparator() {
33 return new Comparator(new ComparatorOptions()) {
36 public String
name() {
37 return "test.AscendingIntKeyComparator";
41 public int compare(final Slice a
, final Slice b
) {
42 return compareIntKeys(a
.data(), b
.data());
48 // test the round-tripability of keys written and read with the Comparator
49 comparatorTest
.testRoundtrip(FileSystems
.getDefault().getPath(
50 dbFolder
.getRoot().getAbsolutePath()));
54 public void javaComparatorCf() throws IOException
, RocksDBException
{
56 final AbstractComparatorTest comparatorTest
= new AbstractComparatorTest() {
58 public AbstractComparator
getAscendingIntKeyComparator() {
59 return new Comparator(new ComparatorOptions()) {
62 public String
name() {
63 return "test.AscendingIntKeyComparator";
67 public int compare(final Slice a
, final Slice b
) {
68 return compareIntKeys(a
.data(), b
.data());
74 // test the round-tripability of keys written and read with the Comparator
75 comparatorTest
.testRoundtripCf(FileSystems
.getDefault().getPath(
76 dbFolder
.getRoot().getAbsolutePath()));
80 public void builtinForwardComparator()
81 throws RocksDBException
{
82 try (final Options options
= new Options()
83 .setCreateIfMissing(true)
84 .setComparator(BuiltinComparator
.BYTEWISE_COMPARATOR
);
85 final RocksDB rocksDb
= RocksDB
.open(options
,
86 dbFolder
.getRoot().getAbsolutePath())
88 rocksDb
.put("abc1".getBytes(), "abc1".getBytes());
89 rocksDb
.put("abc2".getBytes(), "abc2".getBytes());
90 rocksDb
.put("abc3".getBytes(), "abc3".getBytes());
92 try(final RocksIterator rocksIterator
= rocksDb
.newIterator()) {
93 // Iterate over keys using a iterator
94 rocksIterator
.seekToFirst();
95 assertThat(rocksIterator
.isValid()).isTrue();
96 assertThat(rocksIterator
.key()).isEqualTo(
98 assertThat(rocksIterator
.value()).isEqualTo(
100 rocksIterator
.next();
101 assertThat(rocksIterator
.isValid()).isTrue();
102 assertThat(rocksIterator
.key()).isEqualTo(
104 assertThat(rocksIterator
.value()).isEqualTo(
106 rocksIterator
.next();
107 assertThat(rocksIterator
.isValid()).isTrue();
108 assertThat(rocksIterator
.key()).isEqualTo(
110 assertThat(rocksIterator
.value()).isEqualTo(
112 rocksIterator
.next();
113 assertThat(rocksIterator
.isValid()).isFalse();
115 rocksIterator
.seekToLast();
116 assertThat(rocksIterator
.isValid()).isTrue();
117 assertThat(rocksIterator
.key()).isEqualTo(
119 assertThat(rocksIterator
.value()).isEqualTo(
122 rocksIterator
.seek("abc".getBytes());
123 assertThat(rocksIterator
.isValid()).isTrue();
124 assertThat(rocksIterator
.key()).isEqualTo(
126 assertThat(rocksIterator
.value()).isEqualTo(
133 public void builtinReverseComparator()
134 throws RocksDBException
{
135 try (final Options options
= new Options()
136 .setCreateIfMissing(true)
137 .setComparator(BuiltinComparator
.REVERSE_BYTEWISE_COMPARATOR
);
138 final RocksDB rocksDb
= RocksDB
.open(options
,
139 dbFolder
.getRoot().getAbsolutePath())
142 rocksDb
.put("abc1".getBytes(), "abc1".getBytes());
143 rocksDb
.put("abc2".getBytes(), "abc2".getBytes());
144 rocksDb
.put("abc3".getBytes(), "abc3".getBytes());
146 try (final RocksIterator rocksIterator
= rocksDb
.newIterator()) {
147 // Iterate over keys using a iterator
148 rocksIterator
.seekToFirst();
149 assertThat(rocksIterator
.isValid()).isTrue();
150 assertThat(rocksIterator
.key()).isEqualTo(
152 assertThat(rocksIterator
.value()).isEqualTo(
154 rocksIterator
.next();
155 assertThat(rocksIterator
.isValid()).isTrue();
156 assertThat(rocksIterator
.key()).isEqualTo(
158 assertThat(rocksIterator
.value()).isEqualTo(
160 rocksIterator
.next();
161 assertThat(rocksIterator
.isValid()).isTrue();
162 assertThat(rocksIterator
.key()).isEqualTo(
164 assertThat(rocksIterator
.value()).isEqualTo(
166 rocksIterator
.next();
167 assertThat(rocksIterator
.isValid()).isFalse();
169 rocksIterator
.seekToLast();
170 assertThat(rocksIterator
.isValid()).isTrue();
171 assertThat(rocksIterator
.key()).isEqualTo(
173 assertThat(rocksIterator
.value()).isEqualTo(
175 // Will be invalid because abc is after abc1
176 rocksIterator
.seek("abc".getBytes());
177 assertThat(rocksIterator
.isValid()).isFalse();
178 // Will be abc3 because the next one after abc999
180 rocksIterator
.seek("abc999".getBytes());
181 assertThat(rocksIterator
.key()).isEqualTo(
183 assertThat(rocksIterator
.value()).isEqualTo(
190 public void builtinComparatorEnum(){
191 assertThat(BuiltinComparator
.BYTEWISE_COMPARATOR
.ordinal())
194 BuiltinComparator
.REVERSE_BYTEWISE_COMPARATOR
.ordinal())
196 assertThat(BuiltinComparator
.values().length
).isEqualTo(2);
197 assertThat(BuiltinComparator
.valueOf("BYTEWISE_COMPARATOR")).
198 isEqualTo(BuiltinComparator
.BYTEWISE_COMPARATOR
);