test/tc_ludy_ext.rb in ludy-0.0.2 vs test/tc_ludy_ext.rb in ludy-0.0.3

- old
+ new

@@ -1,6 +1,6 @@ -#!/usr/bin/ruby +#!/usr/bin/env ruby # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,20 +19,22 @@ require_ludy 'ludy_ext' class TestLudyExt < Test::Unit::TestCase def test_object_tap assert_equal '11', 10.tap{|i| assert_equal '10', i.to_s}.succ.to_s end - def test_nil - assert_nil nil.XD.Orz.zzz + def test_blackhole + assert_equal nil, nil.XD.Orz.zzz end def test_fixnum_collect - a, b, c = 3.collect{|i| i} + # a, b, c = 3.collect{|i| i} + a, b, c = (0..2).to_a assert_equal 0, a assert_equal 1, b assert_equal 2, c - array = 5.collect{Array.new} + # array = 5.collect{Array.new} + array = Array.new(5).map{[]} assert_equal 5, array.size 5.times{|y| 5.times{|x| break if x == y assert_not_equal array[x].object_id, array[y].object_id @@ -40,14 +42,67 @@ assert_equal Array, array[y].class } end def test_if assert_equal "XD", (true ).if{"XD"} - assert ! (false).if{"XD"} + assert (false).if{"XD"}.nil? assert_equal "Orz", (false).if{"XD"}.else{"Orz"} assert_equal "XD", (true ).if{"XD"}.else{"Orz"} assert_equal "XD", (true ).if{"xd"}.upcase - assert ! (false).if{"xd"}.upcase + assert (false).if{"xd"}.upcase.nil? assert_equal "OTL", (false).if{"xd"}.else{"otl"}.upcase assert_equal "XD", (true ).if{"xd"}.else{"otl"}.upcase + end + def test_filter + assert_equal [1,2,3], [1,18,29,9,4,3,2,1,3,7].filter{|i| i<=3}.sort.uniq + end + def test_folds + assert_equal 6, [1,2,3].foldl(:+.to_proc, 0) + assert_equal -6, [1,2,3].foldl(:-.to_proc, 0) + assert_equal 6, [1,2,3].foldr(:+.to_proc, 0) + assert_equal 2, [1,2,3].foldr(:-.to_proc, 0) + end + def test_proc_curry + multiply = lambda{|l,r| l*r} + + double = multiply.curry 2 + assert_equal 8, double[4] + assert_equal 6, double[3] + + xd = multiply.curry 'XD', 5 + assert_equal 'XDXDXDXDXD', xd.call + + assert_equal 29, :+.to_proc.curry(18)[11] + end + + def test_proc_chain + f1 = lambda{|v| v+1} + assert_equal 5, f1[4] + + f2 = lambda{|v| v+2} + assert_equal 6, f2[4] + + f3 = f1.chain f2 + assert_equal [6,7], f3[5] + + f4 = f3.chain f1 + assert_equal [2,3,2], f4[1] + + f5 = f4.chain{|v|[10,11,v]} + assert_equal [1,2,1,10,11,0], f5[0] + end + + def test_proc_compose + f1 = lambda{|v| v+1} + f2 = lambda{|v| v*2} + f3 = f1.compose f2 + assert_equal 21, f3[10] + + f4 = lambda{|a,b| a*b} + f5 = lambda{|a,b| [a*b, a-b]} + f6 = f4.compose f5 + assert_equal -30, f6[3,5] + + f7 = lambda{|a| a*2}.compose f6.compose{|a,b| [b,a]} + assert_equal 60, f7[3,5] end end