#![feature(test)]
extern crate test;

extern crate gitdb;
extern crate tempfile;

// #[bench]
// fn time_to_first_write(b: &mut test::Bencher) {
//     b.iter(|| {
//         let dir = tempfile::tempdir().unwrap();
//         let dir_path = dir.path().to_owned();
//         let git_root = dir_path.join("db");
//         let db = gitdb::DB::init(&git_root).unwrap();
// 
//         let kdf = gitdb::crypto::KDF {
//             pbkdf2_iters: 100_000,
//             salt: gitdb::crypto::rand_256().unwrap(),
//             entropy: gitdb::crypto::create_entropy_file(&dir_path).unwrap()
//         };
// 
//         let sess = gitdb::Session {
//             site_id: 0,
//             master_key: kdf.master_key("super secret".as_bytes())
//         };
// 
//         db.create_key_salt(&sess).unwrap();
//         
//         let val = gitdb::ditto::Register::new(12.into(), sess.site_id);
//         db.write_block("val", &gitdb::Block::Val(val), &sess).unwrap();
//     })
// }
// 
// #[bench]
// fn write_100_blocks(b: &mut test::Bencher) {
//     let kdf = gitdb::crypto::KDF {
//         pbkdf2_iters: 100_000,
//         salt: gitdb::crypto::rand_256().unwrap(),
//         entropy: gitdb::crypto::rand_256().unwrap()
//     };
// 
//     let sess = gitdb::Session {
//         site_id: 0,
//         master_key: kdf.master_key("super secret".as_bytes())
//     };
// 
//     b.iter(|| {
//         let dir = tempfile::tempdir().unwrap();
//         let dir_path = dir.path().to_owned();
//         let git_root = dir_path.join("db");
//         let db = gitdb::DB::init(&git_root).unwrap();
//         db.create_key_salt(&sess).unwrap();
// 
//         for i in 0..100 {
//             let val = gitdb::ditto::Register::new(i.into(), sess.site_id);
//             db.write_block(&format!("val#{}", i), &gitdb::Block::Val(val), &sess).unwrap();
//         }
//     })
// }
// 
// #[bench]
// fn read_block(b: &mut test::Bencher) {
//     let kdf = gitdb::crypto::KDF {
//         pbkdf2_iters: 100_000,
//         salt: gitdb::crypto::rand_256().unwrap(),
//         entropy: gitdb::crypto::rand_256().unwrap()
//     };
// 
//     let sess = gitdb::Session {
//         site_id: 0,
//         master_key: kdf.master_key("super secret".as_bytes())
//     };
// 
//     let dir = tempfile::tempdir().unwrap();
//     let dir_path = dir.path().to_owned();
//     let git_root = dir_path.join("db");
//     let db = gitdb::DB::init(&git_root).unwrap();
//     db.create_key_salt(&sess).unwrap();
// 
//     let val = gitdb::ditto::Register::new(37.into(), sess.site_id);
//     db.write_block("val_key", &gitdb::Block::Val(val), &sess).unwrap();
// 
//     b.iter(|| {
//         db.read_block("val_key", &sess).unwrap();
//     })
// }
// 
// #[bench]
// fn read_1000_blocks(b: &mut test::Bencher) {
//     let kdf = gitdb::crypto::KDF {
//         pbkdf2_iters: 100_000,
//         salt: gitdb::crypto::rand_256().unwrap(),
//         entropy: gitdb::crypto::rand_256().unwrap()
//     };
// 
//     let sess = gitdb::Session {
//         site_id: 0,
//         master_key: kdf.master_key("super secret".as_bytes())
//     };
// 
//     let dir = tempfile::tempdir().unwrap();
//     let dir_path = dir.path().to_owned();
//     let git_root = dir_path.join("db");
//     let db = gitdb::DB::init(&git_root).unwrap();
//     db.create_key_salt(&sess).unwrap();
// 
//     for i in 0..1000 {
//         let val = gitdb::ditto::Register::new(i.into(), sess.site_id);
//         db.write_block(&format!("val#{}", i), &gitdb::Block::Val(val), &sess).unwrap();
//     }
// 
//     b.iter(|| {
//         for i in 0..1000 {
//             let block = db.read_block(&format!("val#{}", i), &sess).unwrap();
//             assert_eq!(block.to_val().unwrap().get(), &gitdb::Prim::U64(i));
//         }
//     })
// }
// 
// 
// #[bench]
// fn prefix_scan_1000_blocks(b: &mut test::Bencher) {
//     let kdf = gitdb::crypto::KDF {
//         pbkdf2_iters: 100_000,
//         salt: gitdb::crypto::rand_256().unwrap(),
//         entropy: gitdb::crypto::rand_256().unwrap()
//     };
// 
//     let sess = gitdb::Session {
//         site_id: 0,
//         master_key: kdf.master_key("super secret".as_bytes())
//     };
// 
//     let dir = tempfile::tempdir().unwrap();
//     let dir_path = dir.path().to_owned();
//     let git_root = dir_path.join("db");
//     let db = gitdb::DB::init(&git_root).unwrap();
//     db.create_key_salt(&sess).unwrap();
// 
//     for i in 0..1000 {
//         let val = gitdb::ditto::Register::new(gitdb::Prim::U64(i), sess.site_id);
//         db.write_block(&format!("val#{}", "x".repeat(i as usize)), &gitdb::Block::Val(val), &sess).unwrap();
//     }
// 
//     b.iter(|| {
//         let mut i: u64 = 0;
//         for (_key, block) in db.prefix_scan("val", &sess).unwrap() {
//             assert_eq!(block.to_val().unwrap().get(), &gitdb::Prim::U64(i));
//             i += 1;
//         }
// 
//         assert_eq!(i, 1000);
//     })
// }
// 
