From 6249e5822a105719a09b7ccebc14336f37a8917c Mon Sep 17 00:00:00 2001 From: Ernie Miller Date: Wed, 5 May 2010 14:12:22 -0400 Subject: Tests for ranges with excluded ends and complements --- spec/shared/relation_spec.rb | 65 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 5 deletions(-) (limited to 'spec/shared') diff --git a/spec/shared/relation_spec.rb b/spec/shared/relation_spec.rb index 0759700d8a..e0c74fc7ee 100644 --- a/spec/shared/relation_spec.rb +++ b/spec/shared/relation_spec.rb @@ -35,65 +35,120 @@ share_examples_for 'A Relation' do @relation.where(@relation[:age].eq(@pivot[@relation[:age]])).should have_rows(expected) end + it "finds rows with an equal to complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] } + @relation.where(@relation[:age].eq(@pivot[@relation[:age]]).complement).should have_rows(expected) + end + it "finds rows with a not eq predicate" do expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] } @relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected) end + + it "finds rows with an not eq complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] } + @relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected) + end it "finds rows with a less than predicate" do expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] } @relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected) end + + it "finds rows with a less than complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] } + @relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected) + end it "finds rows with a less than or equal to predicate" do expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] } @relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected) end + + it "finds rows with a less than or equal to complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] } + @relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected) + end it "finds rows with a greater than predicate" do expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] } @relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected) end + + it "finds rows with a greater than complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] } + @relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected) + end it "finds rows with a greater than or equal to predicate" do expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] } @relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected) end + + it "finds rows with a greater than or equal to complement predicate" do + expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] } + @relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected) + end it "finds rows with a matches predicate" do expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ } @relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) end + it "finds rows with a matches complement predicate" do + expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ } + @relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected) + end + it "finds rows with a not matches predicate" do expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ } @relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) end + + it "finds rows with a not matches complement predicate" do + expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ } + @relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected) + end it "finds rows with an in predicate" do expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20} @relation.where(@relation[:age].in(3..20)).should have_rows(expected) end + it "finds rows with an in complement predicate" do + expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)} + @relation.where(@relation[:age].in(3..20).complement).should have_rows(expected) + end + it "finds rows with a not in predicate" do expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)} @relation.where(@relation[:age].not_in(3..20)).should have_rows(expected) end - it "finds rows with a not predicate" do - expected = @expected.select {|r| !(r[@relation[:age]] >= 3 && r[@relation[:age]] <= 20)} - @relation.where(@relation[:age].in(3..20).not).should have_rows(expected) + it "finds rows with a not in complement predicate" do + expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20} + @relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected) end - it "finds rows with a grouped predicate of class Any" do + it "finds rows with a polyadic predicate of class Any" do expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])} @relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected) end - it "finds rows with a grouped predicate of class All" do + it "finds rows with a polyadic predicate of class Any complement" do + expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])} + @relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected) + end + + it "finds rows with a polyadic predicate of class All" do expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/} @relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected) end + + it "finds rows with a polyadic predicate of class All complement" do + expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)} + @relation.where(@relation[:name].matches_all(/Name/, /1/).complement).should have_rows(expected) + end end describe "#order" do -- cgit v1.2.3