about summary refs log tree commit diff
path: root/src/libstd/num
diff options
context:
space:
mode:
authorgifnksm <makoto.nksm+github@gmail.com>2013-05-12 10:15:14 +0900
committergifnksm <makoto.nksm+github@gmail.com>2013-05-12 10:17:23 +0900
commita2b81ccba45fc2dbeee83815f5463e48f29c7569 (patch)
tree1594e3b8158cf6975de7697397b5c00be5e2f439 /src/libstd/num
parent9ee8d506d99f5e992bd0010ad68d3014d959c4ec (diff)
downloadrust-a2b81ccba45fc2dbeee83815f5463e48f29c7569.tar.gz
rust-a2b81ccba45fc2dbeee83815f5463e48f29c7569.zip
libstd: Fix BigUint::is_even
Diffstat (limited to 'src/libstd/num')
-rw-r--r--src/libstd/num/bigint.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs
index e64e97adfa3..0f3a6f63c47 100644
--- a/src/libstd/num/bigint.rs
+++ b/src/libstd/num/bigint.rs
@@ -447,7 +447,7 @@ impl Integer for BigUint {
         if self.data.is_empty() {
             true
         } else {
-            self.data.last().is_even()
+            self.data[0].is_even()
         }
     }
 
@@ -1448,6 +1448,17 @@ mod biguint_tests {
         check(99, 17, 1683);
     }
 
+    #[test]
+    fn test_is_even() {
+        assert!(FromStr::from_str::<BigUint>("1").get().is_odd());
+        assert!(FromStr::from_str::<BigUint>("2").get().is_even());
+        assert!(FromStr::from_str::<BigUint>("1000").get().is_even());
+        assert!(FromStr::from_str::<BigUint>("1000000000000000000000").get().is_even());
+        assert!(FromStr::from_str::<BigUint>("1000000000000000000001").get().is_odd());
+        assert!((BigUint::from_uint(1) << 64).is_even());
+        assert!(((BigUint::from_uint(1) << 64) + BigUint::from_uint(1)).is_odd());
+    }
+
     fn to_str_pairs() -> ~[ (BigUint, ~[(uint, ~str)]) ] {
         let bits = BigDigit::bits;
         ~[( Zero::zero(), ~[