2008-05-13 20:29:19 +00:00
/* -*- mode: C; c-basic-offset: 4 -*- */
# ident "Copyright (c) 2008 Tokutek Inc. All rights reserved."
2013-04-16 23:57:21 -04:00
# include "includes.h"
2008-05-13 20:29:19 +00:00
# include "test.h"
# include <unistd.h>
static TOKUTXN const null_txn = 0 ;
static DB * const null_db = 0 ;
static void test_flat ( void ) {
char fname [ ] = __FILE__ " .brt " ;
u_int64_t limit = 100 ;
u_int64_t ilimit = 100 ;
unlink ( fname ) ;
CACHETABLE ct ;
// set the cachetable to size 1 so that things won't fit.
int r = toku_brt_create_cachetable ( & ct , 1 , ZERO_LSN , NULL_LOGGER ) ; assert ( r = = 0 ) ;
BRT t ;
r = toku_brt_create ( & t ) ; assert ( r = = 0 ) ;
r = toku_brt_set_flags ( t , TOKU_DB_DUP + TOKU_DB_DUPSORT ) ; assert ( r = = 0 ) ;
r = toku_brt_set_nodesize ( t , 4096 ) ; assert ( r = = 0 ) ;
2008-05-22 21:28:00 +00:00
r = toku_brt_open ( t , fname , fname , 0 , 1 , 1 , ct , null_txn , ( DB * ) 0 ) ;
2008-05-13 20:29:19 +00:00
u_int64_t i ;
for ( i = 0 ; i < limit ; i + + ) {
u_int64_t j ;
for ( j = 0 ; j < ilimit ; j + + ) {
char key [ 100 ] , val [ 100 ] ;
snprintf ( key , 100 , " %08llu " , ( unsigned long long ) 2 * i + 1 ) ;
snprintf ( val , 100 , " %08llu " , ( unsigned long long ) 2 * j + 1 ) ;
DBT k , v ;
r = toku_brt_insert ( t , toku_fill_dbt ( & k , key , 1 + strlen ( key ) ) , toku_fill_dbt ( & v , val , 1 + strlen ( val ) ) , null_txn ) ;
assert ( r = = 0 ) ;
}
}
u_int64_t prevless = 0 ;
u_int64_t prevgreater = limit * ilimit ;
for ( i = 0 ; i < 2 * limit + 1 ; i + + ) {
char key [ 100 ] ;
snprintf ( key , 100 , " %08llu " , ( unsigned long long ) i ) ;
DBT k ;
u_int64_t less , equal , greater ;
r = toku_brt_keyrange ( t , toku_fill_dbt ( & k , key , 1 + strlen ( key ) ) , & less , & equal , & greater ) ;
assert ( r = = 0 ) ;
//printf("key %llu/%llu %llu %llu %llu\n", (unsigned long long)2*i+1, (unsigned long long)2*limit+1, (unsigned long long)less, (unsigned long long)equal, (unsigned long long)greater);
assert ( less < = ilimit * i ) ;
assert ( equal < = ilimit ) ;
assert ( less + equal + greater < = limit * ilimit ) ;
assert ( less > = prevless ) ; prevless = less ;
assert ( greater < = prevgreater ) ; prevgreater = greater ;
}
r = toku_close_brt ( t , 0 ) ; assert ( r = = 0 ) ;
r = toku_cachetable_close ( & ct ) ; assert ( r = = 0 ) ;
}
int main ( int argc , const char * argv [ ] ) {
default_parse_args ( argc , argv ) ;
test_flat ( ) ;
toku_malloc_cleanup ( ) ;
if ( verbose ) printf ( " test ok \n " ) ;
return 0 ;
}