quant 0.0.3

A library that makes it easy to work w/ Dimensions, Units, and Physical Quantities.
#![feature(plugin)]
#![plugin(stainless)]
extern crate num;
extern crate quant;

#[cfg(test)]
mod test {
  describe! stainless_tests {
    it "makes it easy to work w/ metres" {
      use quant::Metre;

      let metre: Metre = 1.0f64 * Metre::new();
      assert_eq!(metre.to_string(), "1 metre".to_string());
    }

    it "makes it easy to convert to other units such as angstroms" {
      use quant::{BigExponentiation, Metre};
      use num::bigint::{Sign};

      let metre = BigExponentiation::new_base10(Sign::Minus, 10) * Metre::new();
      assert_eq!(metre.as_angstrom(), "1 angstrom".to_string());
    }

    describe! derived_units {
      it "makes it super simple to work w/ derived units" {
        use quant::{kilogram, metre, second};

        let kilogram = kilogram();
        let distance = metre();
        let time = second();
        let interval = time.clone();

        let f = format!("One newton (N) is the force needed to accelerate \
          {} of mass at the rate of {} per {} per {}.",
          kilogram, distance, time, interval);

        assert_eq!(f, 
          "One newton (N) is the force needed to accelerate \
          1 kilogram of mass at the rate of 1 metre per 1 second per 1 second."
        )
      }

      it "makes it simple to work w/ derived units such as newtons" {
        use quant::{kilogram, metre, second};

        let newton = 1.0f64 * kilogram() * metre() * second().pow(-2);
        assert_eq!(newton.to_string(), "1 kilogram * metre * second^-2".to_string())
      }

      it "also makes it simple to work w/ named derived units such as newtons" {
        use quant::{kilogram, metre, second};

        let newton = 1.0f64 * kilogram() * metre() * second().pow(-2);
        assert_eq!(newton.named(), "1 newton".to_string())
      }
    }
  }
}