pokereval 0.1.1

A Rust library for evaluating poker hands with 5 or 7 cards.
Documentation
#![feature(test)]
extern crate test;

extern crate pokereval;
extern crate cards;
extern crate holdem;

use test::Bencher;

use cards::card::Card;
use cards::deck::Deck;
use holdem::{CactusKevCard};
use pokereval::eval_5cards;
use pokereval::original::{eval_5cards_kev_array, eval_5cards_kev};
use pokereval::utils::{card_to_deck_number};

#[bench]
fn bench_eval_card(b: &mut Bencher) {
    let mut deck = Deck::new_shuffled();

    let mut cards : Vec<Card> = Vec::new();

    for i in 0..52 {
        cards.push(deck.draw().ok().unwrap());
    }

    b.iter(|| {
        for i in 0..10 {
            let c1 = &cards[i*5 + 0];
            let c2 = &cards[i*5 + 1];
            let c3 = &cards[i*5 + 2];
            let c4 = &cards[i*5 + 3];
            let c5 = &cards[i*5 + 4];

            let subhand = [c1, c2, c3, c4, c5];
            eval_5cards(&subhand);
        }
        deck.reset_unshuffled();
    });
}


#[bench]
fn bench_eval_kev_array(b: &mut Bencher) {
    let mut deck = Deck::new_shuffled();

    let mut cards :[CactusKevCard; 52] = [0; 52];

    for i in 0..52 {
        cards[i] = card_to_deck_number(&deck.draw().ok().unwrap());
    }

    b.iter(|| {
        for i in 0..10 {
            let c1 = cards[i*5 + 0];
            let c2 = cards[i*5 + 1];
            let c3 = cards[i*5 + 2];
            let c4 = cards[i*5 + 3];
            let c5 = cards[i*5 + 4];

            let subhand = [&c1, &c2, &c3, &c4, &c5];
            eval_5cards_kev_array(&subhand);
        }
    });
}

#[bench]
fn bench_eval_kev_array_no_creation(b: &mut Bencher) {
    let mut deck = Deck::new_shuffled();

    let mut cards :[CactusKevCard; 52] = [0; 52];

    for i in 0..52 {
        cards[i] = card_to_deck_number(&deck.draw().ok().unwrap());
    }

    let mut subhand = [&cards[0]; 5];

    b.iter(|| {
        for i in 0..10 {
            for j in 0..5 {
                subhand[j] = &cards[i*5 + j];
            }

            eval_5cards_kev_array(&subhand);
        }
    });
}

#[bench]
fn bench_eval_kev_no_array(b: &mut Bencher) {
    let mut deck = Deck::new_shuffled();

    let mut cards :[CactusKevCard; 52] = [0; 52];

    for i in 0..52 {
        cards[i] = card_to_deck_number(&deck.draw().ok().unwrap());
    }

    b.iter(|| {
        for i in 0..10 {
            let c1 = cards[i*5 + 0];
            let c2 = cards[i*5 + 1];
            let c3 = cards[i*5 + 2];
            let c4 = cards[i*5 + 3];
            let c5 = cards[i*5 + 4];

            eval_5cards_kev(&c1, &c2, &c3, &c4, &c5);
        }
    });
}