The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use RPi::ADC::ADS;
use Test::More;

my $mod = 'RPi::ADC::ADS';

my %map = (
    0 => [
            49923,
            195,
            3,
        ],
    1 => [
            49955,
            195,
            35,
        ],
    2 => [
            49987,
            195,
            67,
        ],
    3 => [
            50019,
            195,
            99,
        ],
    4 => [
            50051,
            195,
            131,
        ],
    5 => [
            50083,
            195,
            163,
        ],
    6 => [
            50115,
            195,
            195,
        ],
    7 => [
            50147,
            195,
            227,
        ],
);

{ # rate (bits 2-0)

    my $o = $mod->new;

    is $o->bits, 49923, "default bits ok";

    # printf("xxx: %b\n", $o->bits);

    my ($m, $l) = $o->register;
    is $m, 195, "default msb ok";
    is $l, 3, "default lsb ok";

    for (qw(0 1 2 3 4 5 6 7)){
        $o->rate($_);
        is $o->bits, $map{$_}->[0], "$_ bits ok";

        # printf("$_: %b\n", $o->bits);

        my ($m, $l) = $o->register;
        is $m, $map{$_}->[1], "$_ msb ok";
        is $l, $map{$_}->[2], "$_ lsb ok";
    }

    $o->rate(0);
    # printf("0: %b\n", $o->bits);
    is $o->bits, 49923, "000 goes back to default bits ok";
}


{ # bad

    my $o = $mod->new;

    my $ok = eval { $o->rate(9); 1; };

    is $ok, undef, "dies on bad param";
    like $@, qr/rate param requires/, "...error msg ok";
}

done_testing();