gcd-bitwise 0.1.9

The binary Euclidean algorithm for computing gcd.
Documentation
use gcd_bitwise::interface::*;
use std::convert::TryFrom;
use std::convert::TryInto;
use std::fmt::Debug;
use std::ops::*;

#[cfg(test)]
mod tests {
    use super::*;

    fn setup<T>(num1: T, num2: T, expected: T)
    where
        T: PartialEq
            + Debug
            + Copy
            + ShlAssign
            + PartialOrd
            + SubAssign
            + TryFrom<u32>
            + ShrAssign
            + TryInto<u32>,
        <T as TryFrom<u32>>::Error: Debug,
        <T as TryInto<u32>>::Error: Debug,
    {
        let result = gcd(num1, num2);
        assert_eq!(result, expected);
    }

    #[test]
    fn gcd1() {
        let num1: u8 = 15;
        let num2: u8 = 51;
        let expected = 3;
        setup(num1, num2, expected);
    }

    #[test]
    fn gcd2() {
        let num1: u16 = 65535;
        let num2: u16 = 125;
        let expected = 5;
        setup(num1, num2, expected);
    }

    #[test]
    fn gcd3() {
        let num1: u32 = 1456386644;
        let num2: u32 = 78907652;
        let expected = 4;
        setup(num1, num2, expected);
    }

    #[test]
    fn gcd4() {
        let num1: usize = 1235648;
        let num2: usize = 346848;
        let expected = 32;
        setup(num1, num2, expected);
    }

    #[test]
    fn gcd5() {
        let num1: u64 = 123;
        let num2: u64 = 3;
        let expected = 3;
        setup(num1, num2, expected);
    }
}