about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-05-11 22:40:36 -0700
committerbors <bors@rust-lang.org>2013-05-11 22:40:36 -0700
commit36771ef60997b5882ad391839b5f7854d077cc42 (patch)
tree47150bad4dd0ef6295b730e463f595b30db50f44
parent1f62b23411abcfbe66eeea294f4258f1bb169e7d (diff)
parenta2b81ccba45fc2dbeee83815f5463e48f29c7569 (diff)
downloadrust-36771ef60997b5882ad391839b5f7854d077cc42.tar.gz
rust-36771ef60997b5882ad391839b5f7854d077cc42.zip
auto merge of #6429 : gifnksm/rust/bigint-is_even, r=catamorphism
`BigUint::is_even()` didn't return correct value.
-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 7b39b200079..498c86dd8e1 100644
--- a/src/libstd/num/bigint.rs
+++ b/src/libstd/num/bigint.rs
@@ -445,7 +445,7 @@ impl Integer for BigUint {
         if self.data.is_empty() {
             true
         } else {
-            self.data.last().is_even()
+            self.data[0].is_even()
         }
     }
 
@@ -1446,6 +1446,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(), ~[