Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 1 | // Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT |
Graydon Hoare | 00c856c | 2012-12-04 00:48:01 | [diff] [blame] | 2 | // file at the top-level directory of this distribution and at |
| 3 | // http://rust-lang.org/COPYRIGHT. |
| 4 | // |
| 5 | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| 6 | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| 7 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your |
| 8 | // option. This file may not be copied, modified, or distributed |
| 9 | // except according to those terms. |
| 10 | |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 11 | use core::container::{Container, Mutable}; |
Patrick Walton | 2db3abd | 2013-01-09 03:37:25 | [diff] [blame] | 12 | use core::prelude::*; |
Patrick Walton | 57c5999 | 2012-12-23 22:41:37 | [diff] [blame] | 13 | use core::vec; |
Marijn Haverbeke | 26610db | 2012-01-11 11:49:33 | [diff] [blame] | 14 | |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 15 | const initial_capacity: uint = 32u; // 2^5 |
| 16 | |
| 17 | pub struct Deque<T> { |
| 18 | priv nelts: uint, |
| 19 | priv lo: uint, |
| 20 | priv hi: uint, |
| 21 | priv elts: ~[Option<T>] |
Marijn Haverbeke | 26610db | 2012-01-11 11:49:33 | [diff] [blame] | 22 | } |
Roy Frostig | 9c81889 | 2010-07-21 01:03:09 | [diff] [blame] | 23 | |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 24 | impl<T> Container for Deque<T> { |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 25 | /// Return the number of elements in the deque |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 26 | pure fn len(&self) -> uint { self.nelts } |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 27 | |
| 28 | /// Return true if the deque contains no elements |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 29 | pure fn is_empty(&self) -> bool { self.len() == 0 } |
| 30 | } |
Roy Frostig | 9c81889 | 2010-07-21 01:03:09 | [diff] [blame] | 31 | |
Daniel Micay | ed7c9c4 | 2013-02-16 23:55:25 | [diff] [blame] | 32 | impl<T> Mutable for Deque<T> { |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 33 | /// Clear the deque, removing all values. |
Daniel Micay | ed7c9c4 | 2013-02-16 23:55:25 | [diff] [blame] | 34 | fn clear(&mut self) { |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 35 | for self.elts.each_mut |x| { *x = None } |
Daniel Micay | ed7c9c4 | 2013-02-16 23:55:25 | [diff] [blame] | 36 | self.nelts = 0; |
| 37 | self.lo = 0; |
| 38 | self.hi = 0; |
| 39 | } |
| 40 | } |
| 41 | |
Patrick Walton | 107bf96 | 2013-02-27 01:47:41 | [diff] [blame] | 42 | pub impl<T> Deque<T> { |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 43 | /// Create an empty Deque |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 44 | static pure fn new() -> Deque<T> { |
| 45 | Deque{nelts: 0, lo: 0, hi: 0, |
| 46 | elts: vec::from_fn(initial_capacity, |_| None)} |
Roy Frostig | 9c81889 | 2010-07-21 01:03:09 | [diff] [blame] | 47 | } |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 48 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 49 | /// Return a reference to the first element in the deque |
| 50 | /// |
| 51 | /// Fails if the deque is empty |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 52 | fn peek_front(&self) -> &self/T { get(self.elts, self.lo) } |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 53 | |
| 54 | /// Return a reference to the last element in the deque |
| 55 | /// |
| 56 | /// Fails if the deque is empty |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 57 | fn peek_back(&self) -> &self/T { get(self.elts, self.hi - 1u) } |
Daniel Micay | 6190661 | 2013-02-17 00:43:29 | [diff] [blame] | 58 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 59 | /// Retrieve an element in the deque by index |
| 60 | /// |
| 61 | /// Fails if there is no element with the given index |
Daniel Micay | a257329 | 2013-02-17 01:50:14 | [diff] [blame] | 62 | fn get(&self, i: int) -> &self/T { |
| 63 | let idx = (self.lo + (i as uint)) % self.elts.len(); |
| 64 | get(self.elts, idx) |
| 65 | } |
| 66 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 67 | /// Remove and return the first element in the deque |
| 68 | /// |
| 69 | /// Fails if the deque is empty |
Daniel Micay | 6190661 | 2013-02-17 00:43:29 | [diff] [blame] | 70 | fn pop_front(&mut self) -> T { |
| 71 | let mut result = self.elts[self.lo].swap_unwrap(); |
| 72 | self.lo = (self.lo + 1u) % self.elts.len(); |
| 73 | self.nelts -= 1u; |
| 74 | result |
| 75 | } |
| 76 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 77 | /// Remove and return the last element in the deque |
| 78 | /// |
| 79 | /// Fails if the deque is empty |
Daniel Micay | 6190661 | 2013-02-17 00:43:29 | [diff] [blame] | 80 | fn pop_back(&mut self) -> T { |
| 81 | if self.hi == 0u { |
| 82 | self.hi = self.elts.len() - 1u; |
| 83 | } else { self.hi -= 1u; } |
| 84 | let mut result = self.elts[self.hi].swap_unwrap(); |
| 85 | self.elts[self.hi] = None; |
| 86 | self.nelts -= 1u; |
| 87 | result |
| 88 | } |
Marijn Haverbeke | 26610db | 2012-01-11 11:49:33 | [diff] [blame] | 89 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 90 | /// Prepend an element to the deque |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 91 | fn add_front(&mut self, t: T) { |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 92 | let oldlo = self.lo; |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 93 | if self.lo == 0u { |
| 94 | self.lo = self.elts.len() - 1u; |
| 95 | } else { self.lo -= 1u; } |
| 96 | if self.lo == self.hi { |
| 97 | self.elts = grow(self.nelts, oldlo, self.elts); |
| 98 | self.lo = self.elts.len() - 1u; |
| 99 | self.hi = self.nelts; |
| 100 | } |
| 101 | self.elts[self.lo] = Some(t); |
| 102 | self.nelts += 1u; |
Erick Tryzelaar | e84576b | 2013-01-22 16:44:24 | [diff] [blame] | 103 | } |
Marijn Haverbeke | 26610db | 2012-01-11 11:49:33 | [diff] [blame] | 104 | |
Daniel Micay | b3ee49c | 2013-03-15 17:41:02 | [diff] [blame^] | 105 | /// Append an element to the deque |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 106 | fn add_back(&mut self, t: T) { |
| 107 | if self.lo == self.hi && self.nelts != 0u { |
| 108 | self.elts = grow(self.nelts, self.lo, self.elts); |
| 109 | self.lo = 0u; |
| 110 | self.hi = self.nelts; |
Graydon Hoare | 2880ecd | 2010-09-22 22:44:13 | [diff] [blame] | 111 | } |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 112 | self.elts[self.hi] = Some(t); |
| 113 | self.hi = (self.hi + 1u) % self.elts.len(); |
| 114 | self.nelts += 1u; |
Graydon Hoare | ce72993 | 2011-06-15 18:19:50 | [diff] [blame] | 115 | } |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | /// Grow is only called on full elts, so nelts is also len(elts), unlike |
| 119 | /// elsewhere. |
Daniel Micay | 5aa0463 | 2013-02-17 02:34:09 | [diff] [blame] | 120 | fn grow<T>(nelts: uint, lo: uint, elts: &mut [Option<T>]) -> ~[Option<T>] { |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 121 | fail_unless!(nelts == elts.len()); |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 122 | let mut rv = ~[]; |
| 123 | |
Daniel Micay | 6956e81 | 2013-02-17 19:08:04 | [diff] [blame] | 124 | do rv.grow_fn(nelts + 1) |i| { |
Daniel Micay | 5aa0463 | 2013-02-17 02:34:09 | [diff] [blame] | 125 | let mut element = None; |
| 126 | element <-> elts[(lo + i) % nelts]; |
| 127 | element |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 128 | } |
| 129 | |
| 130 | rv |
| 131 | } |
| 132 | |
Daniel Micay | 5929f15 | 2013-02-17 00:03:27 | [diff] [blame] | 133 | fn get<T>(elts: &r/[Option<T>], i: uint) -> &r/T { |
| 134 | match elts[i] { Some(ref t) => t, _ => fail!() } |
Roy Frostig | 9c81889 | 2010-07-21 01:03:09 | [diff] [blame] | 135 | } |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 136 | |
| 137 | #[cfg(test)] |
| 138 | mod tests { |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 139 | use super::*; |
Alex Crichton | 2df07dd | 2013-02-25 19:11:21 | [diff] [blame] | 140 | use core::cmp::Eq; |
| 141 | use core::kinds::{Durable, Copy}; |
Patrick Walton | fa5ee93 | 2012-12-28 02:24:18 | [diff] [blame] | 142 | |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 143 | #[test] |
| 144 | fn test_simple() { |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 145 | let mut d = Deque::new(); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 146 | fail_unless!(d.len() == 0u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 147 | d.add_front(17); |
| 148 | d.add_front(42); |
| 149 | d.add_back(137); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 150 | fail_unless!(d.len() == 3u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 151 | d.add_back(137); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 152 | fail_unless!(d.len() == 4u); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 153 | debug!(d.peek_front()); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 154 | fail_unless!(*d.peek_front() == 42); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 155 | debug!(d.peek_back()); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 156 | fail_unless!(*d.peek_back() == 137); |
Niko Matsakis | dc07280 | 2012-03-22 15:39:41 | [diff] [blame] | 157 | let mut i: int = d.pop_front(); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 158 | debug!(i); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 159 | fail_unless!(i == 42); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 160 | i = d.pop_back(); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 161 | debug!(i); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 162 | fail_unless!(i == 137); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 163 | i = d.pop_back(); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 164 | debug!(i); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 165 | fail_unless!(i == 137); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 166 | i = d.pop_back(); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 167 | debug!(i); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 168 | fail_unless!(i == 17); |
| 169 | fail_unless!(d.len() == 0u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 170 | d.add_back(3); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 171 | fail_unless!(d.len() == 1u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 172 | d.add_front(2); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 173 | fail_unless!(d.len() == 2u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 174 | d.add_back(4); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 175 | fail_unless!(d.len() == 3u); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 176 | d.add_front(1); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 177 | fail_unless!(d.len() == 4u); |
Brian Anderson | 82f1903 | 2013-03-08 20:39:42 | [diff] [blame] | 178 | debug!(d.get(0)); |
| 179 | debug!(d.get(1)); |
| 180 | debug!(d.get(2)); |
| 181 | debug!(d.get(3)); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 182 | fail_unless!(*d.get(0) == 1); |
| 183 | fail_unless!(*d.get(1) == 2); |
| 184 | fail_unless!(*d.get(2) == 3); |
| 185 | fail_unless!(*d.get(3) == 4); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 186 | } |
| 187 | |
Kevin Cantu | c43426e | 2012-09-13 05:09:55 | [diff] [blame] | 188 | #[test] |
| 189 | fn test_boxes() { |
| 190 | let a: @int = @5; |
| 191 | let b: @int = @72; |
| 192 | let c: @int = @64; |
| 193 | let d: @int = @175; |
| 194 | |
Daniel Micay | b47e1e9 | 2013-02-16 22:55:55 | [diff] [blame] | 195 | let mut deq = Deque::new(); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 196 | fail_unless!(deq.len() == 0); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 197 | deq.add_front(a); |
| 198 | deq.add_front(b); |
| 199 | deq.add_back(c); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 200 | fail_unless!(deq.len() == 3); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 201 | deq.add_back(d); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 202 | fail_unless!(deq.len() == 4); |
| 203 | fail_unless!(*deq.peek_front() == b); |
| 204 | fail_unless!(*deq.peek_back() == d); |
| 205 | fail_unless!(deq.pop_front() == b); |
| 206 | fail_unless!(deq.pop_back() == d); |
| 207 | fail_unless!(deq.pop_back() == c); |
| 208 | fail_unless!(deq.pop_back() == a); |
| 209 | fail_unless!(deq.len() == 0); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 210 | deq.add_back(c); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 211 | fail_unless!(deq.len() == 1); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 212 | deq.add_front(b); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 213 | fail_unless!(deq.len() == 2); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 214 | deq.add_back(d); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 215 | fail_unless!(deq.len() == 3); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 216 | deq.add_front(a); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 217 | fail_unless!(deq.len() == 4); |
| 218 | fail_unless!(*deq.get(0) == a); |
| 219 | fail_unless!(*deq.get(1) == b); |
| 220 | fail_unless!(*deq.get(2) == c); |
| 221 | fail_unless!(*deq.get(3) == d); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 222 | } |
| 223 | |
Patrick Walton | bf2a225 | 2013-02-21 01:07:17 | [diff] [blame] | 224 | fn test_parameterized<T:Copy + Eq + Durable>(a: T, b: T, c: T, d: T) { |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 225 | let mut deq = Deque::new(); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 226 | fail_unless!(deq.len() == 0); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 227 | deq.add_front(a); |
| 228 | deq.add_front(b); |
| 229 | deq.add_back(c); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 230 | fail_unless!(deq.len() == 3); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 231 | deq.add_back(d); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 232 | fail_unless!(deq.len() == 4); |
| 233 | fail_unless!(*deq.peek_front() == b); |
| 234 | fail_unless!(*deq.peek_back() == d); |
| 235 | fail_unless!(deq.pop_front() == b); |
| 236 | fail_unless!(deq.pop_back() == d); |
| 237 | fail_unless!(deq.pop_back() == c); |
| 238 | fail_unless!(deq.pop_back() == a); |
| 239 | fail_unless!(deq.len() == 0); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 240 | deq.add_back(c); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 241 | fail_unless!(deq.len() == 1); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 242 | deq.add_front(b); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 243 | fail_unless!(deq.len() == 2); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 244 | deq.add_back(d); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 245 | fail_unless!(deq.len() == 3); |
Daniel Micay | 373c072 | 2013-02-17 00:10:10 | [diff] [blame] | 246 | deq.add_front(a); |
Patrick Walton | d7e74b5 | 2013-03-06 21:58:02 | [diff] [blame] | 247 | fail_unless!(deq.len() == 4); |
| 248 | fail_unless!(*deq.get(0) == a); |
| 249 | fail_unless!(*deq.get(1) == b); |
| 250 | fail_unless!(*deq.get(2) == c); |
| 251 | fail_unless!(*deq.get(3) == d); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 252 | } |
| 253 | |
Patrick Walton | eb4d39e | 2013-01-26 00:57:39 | [diff] [blame] | 254 | #[deriving_eq] |
Ben Striegel | a605fd0 | 2012-08-11 14:08:42 | [diff] [blame] | 255 | enum Taggy { One(int), Two(int, int), Three(int, int, int), } |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 256 | |
Patrick Walton | eb4d39e | 2013-01-26 00:57:39 | [diff] [blame] | 257 | #[deriving_eq] |
Ben Striegel | a605fd0 | 2012-08-11 14:08:42 | [diff] [blame] | 258 | enum Taggypar<T> { |
| 259 | Onepar(int), Twopar(int, int), Threepar(int, int, int), |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 260 | } |
| 261 | |
Patrick Walton | eb4d39e | 2013-01-26 00:57:39 | [diff] [blame] | 262 | #[deriving_eq] |
Erick Tryzelaar | e84576b | 2013-01-22 16:44:24 | [diff] [blame] | 263 | struct RecCy { |
| 264 | x: int, |
| 265 | y: int, |
Patrick Walton | eb4d39e | 2013-01-26 00:57:39 | [diff] [blame] | 266 | t: Taggy |
Patrick Walton | 9117dcb | 2012-09-20 01:00:26 | [diff] [blame] | 267 | } |
Kevin Cantu | c43426e | 2012-09-13 05:09:55 | [diff] [blame] | 268 | |
| 269 | #[test] |
| 270 | fn test_param_int() { |
| 271 | test_parameterized::<int>(5, 72, 64, 175); |
| 272 | } |
| 273 | |
| 274 | #[test] |
| 275 | fn test_param_at_int() { |
| 276 | test_parameterized::<@int>(@5, @72, @64, @175); |
| 277 | } |
| 278 | |
| 279 | #[test] |
| 280 | fn test_param_taggy() { |
| 281 | test_parameterized::<Taggy>(One(1), Two(1, 2), Three(1, 2, 3), |
| 282 | Two(17, 42)); |
| 283 | } |
| 284 | |
| 285 | #[test] |
| 286 | fn test_param_taggypar() { |
| 287 | test_parameterized::<Taggypar<int>>(Onepar::<int>(1), |
Ben Striegel | a605fd0 | 2012-08-11 14:08:42 | [diff] [blame] | 288 | Twopar::<int>(1, 2), |
| 289 | Threepar::<int>(1, 2, 3), |
| 290 | Twopar::<int>(17, 42)); |
Kevin Cantu | c43426e | 2012-09-13 05:09:55 | [diff] [blame] | 291 | } |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 292 | |
Kevin Cantu | c43426e | 2012-09-13 05:09:55 | [diff] [blame] | 293 | #[test] |
| 294 | fn test_param_reccy() { |
Erick Tryzelaar | e84576b | 2013-01-22 16:44:24 | [diff] [blame] | 295 | let reccy1 = RecCy { x: 1, y: 2, t: One(1) }; |
| 296 | let reccy2 = RecCy { x: 345, y: 2, t: Two(1, 2) }; |
| 297 | let reccy3 = RecCy { x: 1, y: 777, t: Three(1, 2, 3) }; |
| 298 | let reccy4 = RecCy { x: 19, y: 252, t: Two(17, 42) }; |
Kevin Cantu | c43426e | 2012-09-13 05:09:55 | [diff] [blame] | 299 | test_parameterized::<RecCy>(reccy1, reccy2, reccy3, reccy4); |
Brian Anderson | 6e27b27 | 2012-01-18 03:05:07 | [diff] [blame] | 300 | } |
Michael Sullivan | c854d6e | 2012-07-03 17:52:32 | [diff] [blame] | 301 | } |