public function testMap()
 {
     // from js
     $this->assertEquals(array(2, 4, 6), __u::map(array(1, 2, 3), function ($num) {
         return $num * 2;
     }), 'doubled numbers');
     $ifnull = __u::map(null, function () {
     });
     $this->assertTrue(is_array($ifnull) && count($ifnull) === 0, 'handles a null property');
     $multiplier = 3;
     $func = function ($num) use($multiplier) {
         return $num * $multiplier;
     };
     $tripled = __u::map(array(1, 2, 3), $func);
     $this->assertEquals(array(3, 6, 9), $tripled);
     $doubled = __u(array(1, 2, 3))->map(function ($num) {
         return $num * 2;
     });
     $this->assertEquals(array(2, 4, 6), $doubled, 'OO-style doubled numbers');
     $this->assertEquals(array(2, 4, 6), __u::map(array(1, 2, 3), function ($n) {
         return $n * 2;
     }));
     $this->assertEquals(array(2, 4, 6), __u(array(1, 2, 3))->map(function ($n) {
         return $n * 2;
     }));
     $doubled = __u::collect(array(1, 2, 3), function ($num) {
         return $num * 2;
     });
     $this->assertEquals(array(2, 4, 6), $doubled, 'aliased as "collect"');
     // docs
     $this->assertEquals(array(3, 6, 9), __u::map(array(1, 2, 3), function ($num) {
         return $num * 3;
     }));
     $this->assertEquals(array(3, 6, 9), __u::map(array('one' => 1, 'two' => 2, 'three' => 3), function ($num, $key) {
         return $num * 3;
     }));
 }
 public function testUniq()
 {
     // from js
     $list = array(1, 2, 1, 3, 1, 9);
     $this->assertEquals(array(1, 2, 3, 9), __u::uniq($list), 'can find the unique values of an unsorted array');
     $list = array(1, 1, 1, 2, 2, 3);
     $this->assertEquals(array(1, 2, 3), __u::uniq($list), 'can find the unique values of a sorted array faster');
     $func = function () {
         return __u::uniq(func_get_args());
     };
     $result = $func(1, 2, 1, 3, 1, 4);
     $this->assertEquals(array(1, 2, 3, 4), $result, 'works on an arguments object');
     $list = array((object) array('name' => 'moe'), (object) array('name' => 'curly'), (object) array('name' => 'larry'), (object) array('name' => 'curly'));
     $iterator = function ($value) {
         return $value->name;
     };
     $this->assertEquals(array('moe', 'curly', 'larry'), __u::map(__u::uniq($list, false, $iterator), $iterator), 'can find the unique values of an array using a custom iterator');
     $iterator = function ($value) {
         return $value + 1;
     };
     $list = array(1, 2, 2, 3, 4, 4);
     $this->assertEquals(array(1, 2, 3, 4), __u::uniq($list, true, $iterator), 'iterator works with sorted array');
     // extra
     $this->assertEquals(array(4, 5, 6), __u(array(4, 5, 4, 4, 5, 5, 6))->uniq(), 'works with OO call');
     $this->assertEquals(array(4, 5, 6), __u(array(4, 5, 4, 4, 5, 5, 6))->unique(), 'aliased as "unique"');
     // docs
     $this->assertEquals(array(2, 4, 1), __u::uniq(array(2, 2, 4, 4, 4, 1, 1, 1)));
 }