cql_tiny_text 0.2.1

TinyText storage support for CQL Database - a lightweight array-based database
Documentation
#![feature(test)]
mod constants;
extern crate test;

use std::io::{ Cursor, SeekFrom, Seek };
use constants::DATABASE_LOCATION;
use test::Bencher;
use std::convert::TryFrom;
use cql_tiny_text::{ TinyText, unpack_stream };

#[bench]
fn _1d_tiny_text_stream_read_0_char_location_1_to_1(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 1;
    let point1 = [1];

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1]
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::new()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _1d_tiny_text_stream_read_1_char_location_1_to_1(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 1;
    let point1 = [1];
    let value1 = "1";

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1]
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _1d_tiny_text_stream_read_255_char_location_1_to_1(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 1;
    let point1 = [1];
    let value1 = "1".repeat(255);

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1]
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _1d_tiny_text_stream_read_1_char_location_50000_to_100000(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 50000;
    let point1 = [50000];
    let value1 = "1";

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[100000]
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _1d_tiny_text_stream_read_255_char_location_50000_to_100000(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 50000;
    let point1 = [50000];
    let value1 = "1".repeat(255);

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[100000]
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _4d_tiny_text_stream_read_1_char_location_1_1_1_1_to_1_1_1_1(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 1;
    let point1 = [1, 1, 1, 1];
    let value1 = "1".to_string();

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1, 1, 1, 1]
    ).unwrap();

    cql_db::link_dimensions_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1[0..3],
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _4d_tiny_text_stream_read_1_char_location_1_1_1_50000_to_1_1_1_100000(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 50000;
    let point1 = [1, 1, 1, 50000];
    let value1 = "1";

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1, 1, 1, 100000]
    ).unwrap();

    cql_db::link_dimensions_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1[0..3],
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}

#[bench]
fn _4d_tiny_text_stream_read_255_char_location_1_1_1_50000_to_1_1_1_100000(b: &mut Bencher) {
    const N_VALUES_TO_READ: usize = 50000;
    let point1 = [1, 1, 1, 50000];
    let value1 = "1".repeat(255);

    cql_db::create_db_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &[1, 1, 1, 100000]
    ).unwrap();

    cql_db::link_dimensions_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1[0..3],
    ).unwrap();

    cql_db::write_value_unchecked::<TinyText>(
        DATABASE_LOCATION,
        &point1,
        TinyText::try_from(value1).unwrap()
    ).unwrap();

    let mut result = Vec::with_capacity(N_VALUES_TO_READ);
    let mut stream = Cursor::new(Vec::new());

    b.iter(|| {
        cql_db::read_to_stream_unchecked::<TinyText>(
            DATABASE_LOCATION,
            &mut stream,
            &point1,
            N_VALUES_TO_READ as u64
        ).unwrap();

        stream.seek(SeekFrom::Start(0)).unwrap();

        unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
            result.push(value)
        }).unwrap();
    });
}