2020-12-06 20:51:20 -08:00
|
|
|
require "./spec_helper"
|
|
|
|
|
|
|
|
describe Array do
|
|
|
|
describe "#union" do
|
|
|
|
it "works with no elements" do
|
|
|
|
([] of Set(Int32)).union.should eq(Set(Int32).new)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "correctly performs a union" do
|
|
|
|
[Set { 1 }, Set { 2 }, Set {1, 2, 3}].union.should eq(Set { 1,2,3})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#intersect" do
|
|
|
|
expect_raises(Enumerable::EmptyError) do
|
|
|
|
([] of Set(Int32)).intersect
|
|
|
|
end
|
|
|
|
|
|
|
|
it "correctly performs an intersection" do
|
|
|
|
[Set {1}, Set {1,2}, Set {1,2,3}].intersect.should eq(Set{1})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#zip_with" do
|
|
|
|
it "performs as expected" do
|
|
|
|
[1,2,3].zip_with([2,3,4]) { |l,r| l*r }.should eq([2,6,12])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2020-12-07 17:05:05 -08:00
|
|
|
|
|
|
|
describe Tuple do
|
|
|
|
describe "#add" do
|
|
|
|
it "works for pairs" do
|
|
|
|
{1,2}.add({2,3}).should eq({3,5})
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for triples" do
|
|
|
|
{1,2,3}.add({3,4,5}).should eq({4, 6, 8})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#neg" do
|
|
|
|
it "works for pairs" do
|
|
|
|
{1,2}.neg.should eq({-1,-2})
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for triples" do
|
|
|
|
{1,2,3}.neg.should eq({-1, -2, -3})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#dot" do
|
|
|
|
it "works for pairs" do
|
|
|
|
{1,2}.dot({2,3}).should eq(8)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for triples" do
|
|
|
|
{1,2,3}.dot({2,3,4}).should eq(20)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#reduce_fraction" do
|
|
|
|
it "works with nonzero numbers" do
|
|
|
|
[{1, 3}, {2, 6}, {3, 9}].each(&.reduce_fraction.should eq({1,3}))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works when the denominator is zero" do
|
|
|
|
# This is technically not a fraction, but it helps to have
|
|
|
|
# consistent behavior
|
|
|
|
{5, 0}.reduce_fraction.should eq({1,0})
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works when the numerator is zero" do
|
|
|
|
{0, 5}.reduce_fraction.should eq({0, 1})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe Number do
|
|
|
|
describe "#signum" do
|
|
|
|
it "works properly for positive numbers" do
|
|
|
|
[1,2,3,4,5].each(&.signum.should eq(1))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works properly for negative numbers" do
|
|
|
|
[-1,-2,-3,-4].each(&.signum.should eq(-1))
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works properly for zero" do
|
|
|
|
0.signum.should eq(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|