#!/usr/bin/ruby
func chebft1 (callback, a, b, n) {
var bma = (b-a)/2
var bpa = (b+a)/2
var pi_n = (@^n |>> (:add, 0.5) |>> (:mul, Num.pi / n))
var f = (pi_n |>> :cos |>> (:mul, bma) |>> (:add, bpa) |>> callback)
var sums = (@^n |>> {|i| pi_n |>> (:mul, i) |>> :cos ~Z* f |> :sum })
sums |>> (:mul, 2/n)
}
func chebft2 (callback, a, b, n) {
var bma = (0.5 * b-a)
var bpa = (0.5 * b+a)
var pi_n = ((@^n »+» 0.5) »*» (Num.pi / n))
var f = (pi_n »cos»() »*» bma »+» bpa «call« callback)
var sums = (@^n «run« {|i| f »*« ((pi_n »*» i) »cos»()) «+» })
sums »*» 2/n
}
assert_eq(
chebft1(func(v){v.cos}, 0, 1, 10).map{ .round(-40) }
chebft2(func(v){v.cos}, 0, 1, 10).map{ .round(-40) }
)
say "** Test passed!"