1   /*
2    * Copyright 2006-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package net.sourceforge.domian.specification;
17  
18  
19  import java.util.Date;
20  
21  import org.junit.Test;
22  
23  import net.sourceforge.domian.test.domain.Customer;
24  import net.sourceforge.domian.test.domain.Order;
25  
26  import static java.lang.Thread.sleep;
27  import static net.sourceforge.domian.specification.SpecificationFactory.after;
28  import static net.sourceforge.domian.specification.SpecificationFactory.afterOrAtTheSameTimeAs;
29  import static net.sourceforge.domian.specification.SpecificationFactory.allInstancesOfType;
30  import static net.sourceforge.domian.specification.SpecificationFactory.before;
31  import static net.sourceforge.domian.specification.SpecificationFactory.beforeOrAtTheSameTimeAs;
32  import static net.sourceforge.domian.specification.SpecificationFactory.blankString;
33  import static net.sourceforge.domian.specification.SpecificationFactory.createAlwaysFalseSpecification;
34  import static net.sourceforge.domian.specification.SpecificationFactory.createAlwaysTrueSpecification;
35  import static net.sourceforge.domian.specification.SpecificationFactory.createContradiction;
36  import static net.sourceforge.domian.specification.SpecificationFactory.createDateStringSpecification;
37  import static net.sourceforge.domian.specification.SpecificationFactory.createDefaultNumberSpecification;
38  import static net.sourceforge.domian.specification.SpecificationFactory.createTautology;
39  import static net.sourceforge.domian.specification.SpecificationFactory.equalIgnoringCase;
40  import static net.sourceforge.domian.specification.SpecificationFactory.equalTo;
41  import static net.sourceforge.domian.specification.SpecificationFactory.equalsIgnoringCase;
42  import static net.sourceforge.domian.specification.SpecificationFactory.greaterThan;
43  import static net.sourceforge.domian.specification.SpecificationFactory.greaterThanOrEqualTo;
44  import static net.sourceforge.domian.specification.SpecificationFactory.is;
45  import static net.sourceforge.domian.specification.SpecificationFactory.isBlankString;
46  import static net.sourceforge.domian.specification.SpecificationFactory.isEnum;
47  import static net.sourceforge.domian.specification.SpecificationFactory.isEqualIgnoringCase;
48  import static net.sourceforge.domian.specification.SpecificationFactory.isNotNull;
49  import static net.sourceforge.domian.specification.SpecificationFactory.isNull;
50  import static net.sourceforge.domian.specification.SpecificationFactory.lessThan;
51  import static net.sourceforge.domian.specification.SpecificationFactory.lessThanOrEqualTo;
52  import static net.sourceforge.domian.specification.SpecificationFactory.like;
53  import static net.sourceforge.domian.specification.SpecificationFactory.matchesWildcardExpression;
54  import static net.sourceforge.domian.specification.SpecificationFactory.not;
55  import static net.sourceforge.domian.test.domain.Testdata.customer12;
56  import static net.sourceforge.domian.test.domain.Testdata.order22;
57  import static net.sourceforge.domian.test.domain.Testdata.theDayAfterTomorrow;
58  import static net.sourceforge.domian.test.domain.Testdata.theDayBeforeTheDayBeforeYesterday;
59  import static net.sourceforge.domian.test.domain.Testdata.today;
60  import static net.sourceforge.domian.test.domain.Testdata.tomorrow;
61  import static net.sourceforge.domian.test.domain.Testdata.yesterday;
62  import static org.junit.Assert.assertEquals;
63  import static org.junit.Assert.assertFalse;
64  import static org.junit.Assert.assertTrue;
65  import static org.junit.Assert.fail;
66  
67  
68  public class IsDisjointWith_ValueBoundSpecifications_Test {
69  
70      @Test
71      public void shouldNotAcceptNull() {
72          try {
73              equalTo(101L).isDisjointWith(null);
74              fail("Should have thrown exception");
75  
76          } catch (IllegalArgumentException e) {
77              String expectedMessage = "Specification parameter cannot be null";
78              String actualMessage = e.getMessage();
79              assertEquals(expectedMessage, actualMessage);
80          }
81      }
82  
83  
84      @Test
85      public void specificationsOfDifferentTypesAreAlwaysDisjoint() {
86          assertTrue(equalTo(new Date()).isDisjointWith(equalTo(42)));
87          assertTrue(equalTo(42).isDisjointWith(equalTo(new Date())));
88          assertTrue(lessThan(10).isDisjointWith(lessThan(11.795d)));
89          assertTrue(lessThan(11.795d).isDisjointWith(lessThan(10)));
90      }
91  
92  
93      @Test
94      public void shouldNotBeReflexive() {
95          Specification rawDateSpec = equalTo(tomorrow);
96          Specification anotherRawDateSpec = equalTo(tomorrow);
97          assertFalse(rawDateSpec.isDisjointWith(rawDateSpec));
98          assertFalse(rawDateSpec.isDisjointWith(anotherRawDateSpec));
99  
100         Specification<Integer> numberSpec = equalTo(42);
101         Specification rawNumberSpec = equalTo(42);
102         assertFalse(numberSpec.isDisjointWith(numberSpec));
103         assertFalse(numberSpec.isDisjointWith(rawNumberSpec));
104 
105         Specification<String> stringSpec = equalTo("Yo");
106         Specification rawStringSpec = equalTo("Yo");
107         assertFalse(stringSpec.isDisjointWith(stringSpec));
108         assertFalse(stringSpec.isDisjointWith(rawStringSpec));
109     }
110 
111 
112     @Test
113     public void testNullSpecifications() {
114         Specification nullSpec = isNull();
115         Specification notNullSpec = isNotNull();
116 
117         assertFalse(nullSpec.isDisjointWith(nullSpec));
118         assertTrue(nullSpec.isDisjointWith(notNullSpec));
119 
120         assertTrue(notNullSpec.isDisjointWith(nullSpec));
121         assertFalse(notNullSpec.isDisjointWith(notNullSpec));
122     }
123 
124 
125     @Test
126     public void testContradictionsAndTautologies() {
127         Specification<?> contradiction1 = createAlwaysFalseSpecification();
128         Specification<?> contradiction2 = createContradiction();
129 
130         assertFalse(contradiction1.isDisjointWith(contradiction1));
131         assertFalse(contradiction1.isDisjointWith(contradiction2));
132         assertFalse(contradiction2.isDisjointWith(contradiction1));
133 
134         Specification<?> tautology1 = createAlwaysTrueSpecification();
135         Specification<?> tautology2 = createTautology();
136 
137         assertFalse(tautology1.isDisjointWith(tautology1));
138         assertFalse(tautology1.isDisjointWith(tautology2));
139         assertFalse(tautology2.isDisjointWith(tautology1));
140 
141         // Special case
142         assertTrue(contradiction1.isDisjointWith(tautology1));
143         assertTrue(tautology2.isDisjointWith(contradiction1));
144 
145         assertFalse(tautology1.isDisjointWith(allInstancesOfType(Customer.class)));
146         assertFalse(tautology1.isDisjointWith(is(customer12)));
147         assertFalse(tautology1.isDisjointWith(equalTo(10)));
148         assertFalse(tautology1.isDisjointWith(blankString()));
149         assertFalse(tautology1.isDisjointWith(createDateStringSpecification("yyyy-M-d")));
150 
151         ////////////////////////////////////////
152         // Negated
153         ////////////////////////////////////////
154 
155         Specification<?> negatedContradiction1 = not(contradiction1);
156         Specification<?> negatedContradiction2 = not(contradiction2);
157 
158         Specification<?> negatedTautology1 = not(tautology1);
159         Specification<?> negatedTautology2 = not(tautology2);
160 
161         assertFalse(negatedContradiction1.isDisjointWith(negatedContradiction1));
162         assertFalse(negatedContradiction1.isDisjointWith(negatedContradiction2));
163         assertFalse(negatedContradiction2.isDisjointWith(negatedContradiction1));
164 
165         assertFalse(negatedTautology1.isDisjointWith(negatedTautology1));
166         assertFalse(negatedTautology1.isDisjointWith(negatedTautology2));
167         assertFalse(negatedTautology2.isDisjointWith(negatedTautology1));
168 
169         assertTrue(negatedContradiction1.isDisjointWith(negatedTautology1));
170         assertTrue(negatedTautology2.isDisjointWith(negatedContradiction1));
171 
172         assertTrue(contradiction1.isDisjointWith(negatedContradiction1));
173     }
174 
175 
176     @Test
177     public void testDefaultValueSpecifications() {
178         Specification blankString = isBlankString();
179         Specification zero = createDefaultNumberSpecification();
180         assertFalse(blankString.isDisjointWith(blankString));
181         assertTrue(blankString.isDisjointWith(zero));
182 
183         ////////////////////////////////////////
184         // Negated
185         ////////////////////////////////////////
186 
187         Specification negatedBlankString = not(blankString);
188         Specification negatedZero = not(zero);
189         assertFalse(negatedBlankString.isDisjointWith(negatedBlankString));
190         assertTrue(negatedBlankString.isDisjointWith(blankString));
191         assertTrue(negatedZero.isDisjointWith(zero));
192         assertFalse(negatedBlankString.isDisjointWith(zero));
193         assertFalse(negatedZero.isDisjointWith(blankString));
194     }
195 
196 
197     @Test
198     public void testEqualIgnoreCaseSpecifications() {
199         Specification<String> someStringSpec = isEqualIgnoringCase("someString");
200         Specification<String> anotherStringSpec = equalTo("somestring");
201         assertFalse(someStringSpec.isDisjointWith(someStringSpec));
202         assertFalse(someStringSpec.isDisjointWith(anotherStringSpec));
203         assertFalse(anotherStringSpec.isDisjointWith(someStringSpec));
204 
205         Specification<String> yetAnotherStringSpec = isEqualIgnoringCase("SOMEString");
206 
207         assertFalse(someStringSpec.equals(yetAnotherStringSpec));                       // extra
208         assertFalse(anotherStringSpec.equals(yetAnotherStringSpec));                    // extra
209         assertFalse(yetAnotherStringSpec.equals(anotherStringSpec));                    // extra
210         assertFalse(isEqualIgnoringCase("SOME_STRING").equals(yetAnotherStringSpec));   // extra
211 
212         assertFalse(yetAnotherStringSpec.isDisjointWith(someStringSpec));
213         assertFalse(someStringSpec.isDisjointWith(yetAnotherStringSpec));
214         assertFalse(yetAnotherStringSpec.isDisjointWith(anotherStringSpec));
215         assertFalse(anotherStringSpec.isDisjointWith(yetAnotherStringSpec));
216 
217         Specification<String> yetyetAnotherStringSpec = isEqualIgnoringCase("anotherString");
218         assertTrue(yetyetAnotherStringSpec.isDisjointWith(someStringSpec));
219         assertTrue(someStringSpec.isDisjointWith(yetyetAnotherStringSpec));
220         assertTrue(yetyetAnotherStringSpec.isDisjointWith(anotherStringSpec));
221         assertTrue(anotherStringSpec.isDisjointWith(yetyetAnotherStringSpec));
222 
223         ////////////////////////////////////////
224         // Negated
225         ////////////////////////////////////////
226 
227         Specification<String> negatedSomeStringSpec = not(equalIgnoringCase("someString"));
228         Specification<String> negatedAnotherStringSpec = not(equalTo("somestring"));
229         assertFalse(negatedSomeStringSpec.isDisjointWith(negatedSomeStringSpec));
230         assertTrue(someStringSpec.isDisjointWith(negatedSomeStringSpec));
231         assertTrue(negatedSomeStringSpec.isDisjointWith(someStringSpec));
232         assertFalse(negatedAnotherStringSpec.isDisjointWith(negatedSomeStringSpec));
233         assertFalse(negatedSomeStringSpec.isDisjointWith(negatedAnotherStringSpec));
234     }
235 
236 
237     @Test
238     public void testDateStringSpecifications() {
239         Specification<String> dateStringSpec1 = createDateStringSpecification("yyyy-M-d");
240         Specification<String> dateStringSpec2 = createDateStringSpecification("yyyy-MM-dd");
241         assertFalse(dateStringSpec1.isDisjointWith(dateStringSpec1));
242         assertTrue(dateStringSpec1.isDisjointWith(dateStringSpec2));
243         assertTrue(dateStringSpec2.isDisjointWith(dateStringSpec1));
244 
245         ////////////////////////////////////////
246         // Negated
247         ////////////////////////////////////////
248 
249         Specification<String> negatedDateString1 = not(dateStringSpec1);
250         assertFalse(negatedDateString1.isDisjointWith(negatedDateString1));
251         assertTrue(dateStringSpec1.isDisjointWith(negatedDateString1));
252         assertTrue(negatedDateString1.isDisjointWith(dateStringSpec1));
253     }
254 
255 
256     enum Colour {
257         BLACK, WHITE
258     }
259 
260 
261     enum Shape {
262         CIRCLE, TRIANGEL
263     }
264 
265 
266     @Test
267     public void testEnumNameStringSpecification() {
268         Specification<String> colour = isEnum(Colour.class);
269         Specification<String> shape = isEnum(Shape.class);
270         try {
271             colour.isDisjointWith(null);
272             fail("Should have thrown exception");
273 
274         } catch (IllegalArgumentException e) {
275             String expectedMessage = "Specification parameter cannot be null";
276             String actualMessage = e.getMessage();
277             assertEquals(expectedMessage, actualMessage);
278         }
279         assertFalse(colour.isDisjointWith(colour));
280         assertTrue(colour.isDisjointWith(shape));
281 
282         ////////////////////////////////////////
283         // Negated
284         ////////////////////////////////////////
285 
286         Specification<String> notColour = not(colour);
287         try {
288             notColour.isDisjointWith(null);
289             fail("Should have thrown exception");
290 
291         } catch (IllegalArgumentException e) {
292             String expectedMessage = "Specification parameter cannot be null";
293             String actualMessage = e.getMessage();
294             assertEquals(expectedMessage, actualMessage);
295         }
296         assertFalse(notColour.isDisjointWith(notColour));
297         assertTrue(colour.isDisjointWith(notColour));
298     }
299 
300 
301     @Test
302     public void testWildcardSpecification() {
303         Specification<String> allStringsEndingWithWW = like("*WW");
304         Specification<String> allStringsEndingWithWWW = like("*WWW");
305         assertFalse(allStringsEndingWithWW.isDisjointWith(allStringsEndingWithWW));
306         assertFalse(allStringsEndingWithWW.isDisjointWith(allStringsEndingWithWWW));
307         assertFalse(allStringsEndingWithWWW.isDisjointWith(allStringsEndingWithWW));
308 
309         Specification<String> startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong = matchesWildcardExpression("A?????*a");
310         Specification<String> startsWithMajorA = matchesWildcardExpression("A*");
311         assertFalse(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong.isDisjointWith(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong));
312         assertFalse(startsWithMajorA.isDisjointWith(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong));
313         assertFalse(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong.isDisjointWith(startsWithMajorA));
314 
315         Specification<String> endsWithMajorA = matchesWildcardExpression("*A");
316         assertTrue(endsWithMajorA.isDisjointWith(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong));
317         assertTrue(startsWithMajorA_EndsWithMinorA_AtLeastSevenCharsLong.isDisjointWith(endsWithMajorA));
318 
319         Specification<String> t_mmy = like("T?mmy");
320         assertTrue(t_mmy.isDisjointWith(endsWithMajorA));
321         assertTrue(endsWithMajorA.isDisjointWith(t_mmy));
322 
323         Specification<String> likeCapitalAnna = like("Anna");
324         assertTrue(t_mmy.isDisjointWith(likeCapitalAnna));
325         assertTrue(likeCapitalAnna.isDisjointWith(t_mmy));
326 
327         Specification<String> capitalAnna = equalTo("Anna");
328         assertTrue(t_mmy.isDisjointWith(capitalAnna));
329         assertTrue(capitalAnna.isDisjointWith(t_mmy));
330 
331         Specification<String> capitalTommy = equalTo("Tommy");
332         assertFalse(t_mmy.isDisjointWith(capitalTommy));
333         assertFalse(capitalTommy.isDisjointWith(t_mmy));
334 
335         Specification<String> tommyIgnoringCase = equalsIgnoringCase("tommy");
336         assertFalse(t_mmy.isDisjointWith(tommyIgnoringCase));
337         assertFalse(tommyIgnoringCase.isDisjointWith(t_mmy));
338 
339         Specification<String> annaIgnoringCase = equalsIgnoringCase("anna");
340         assertTrue(t_mmy.isDisjointWith(annaIgnoringCase));
341         assertTrue(annaIgnoringCase.isDisjointWith(t_mmy));
342 
343         ////////////////////////////////////////
344         // Negated (using specification)
345         ////////////////////////////////////////
346 
347         Specification<String> notAllStringsEndingWithWW = not(like("*WW"));
348         assertFalse(notAllStringsEndingWithWW.isDisjointWith(notAllStringsEndingWithWW));
349         assertTrue(notAllStringsEndingWithWW.isDisjointWith(allStringsEndingWithWWW));
350         assertTrue(allStringsEndingWithWWW.isDisjointWith(notAllStringsEndingWithWW));
351         assertFalse(notAllStringsEndingWithWW.isDisjointWith(startsWithMajorA));
352         assertFalse(startsWithMajorA.isDisjointWith(notAllStringsEndingWithWW));
353     }
354 
355 
356     @Test
357     public void testEqualityValueBoundSpecifications() {
358         Specification<Integer> ten = equalTo(10);
359         Specification<Integer> eleven = equalTo(11);
360         assertTrue(ten.isDisjointWith(eleven));
361         assertTrue(eleven.isDisjointWith(ten));
362 
363         Specification<Integer> notTen = not(equalTo(10));
364         assertTrue(ten.isDisjointWith(notTen));
365         assertTrue(notTen.isDisjointWith(ten));
366         assertFalse(eleven.isDisjointWith(notTen));
367         assertFalse(notTen.isDisjointWith(eleven));
368 
369         Specification<Date> todaySpec = equalTo(today);
370         Specification<Date> yesterdaySpec = equalTo(yesterday);
371         assertTrue(todaySpec.isDisjointWith(yesterdaySpec));
372         assertTrue(yesterdaySpec.isDisjointWith(todaySpec));
373 
374         Specification<Date> notTodaySpec = not(equalTo(today));
375         assertTrue(todaySpec.isDisjointWith(notTodaySpec));
376         assertTrue(notTodaySpec.isDisjointWith(todaySpec));
377         assertFalse(yesterdaySpec.isDisjointWith(notTodaySpec));
378         assertFalse(notTodaySpec.isDisjointWith(yesterdaySpec));
379 
380         Specification<String> someStringSpec = equalTo("aString");
381         Specification<String> anotherStringSpec = equalTo("anotherString");
382         assertTrue(someStringSpec.isDisjointWith(anotherStringSpec));
383         assertTrue(anotherStringSpec.isDisjointWith(someStringSpec));
384 
385         Specification<String> invertedSomeStringSpec = not(equalTo("aString"));
386         assertTrue(someStringSpec.isDisjointWith(invertedSomeStringSpec));
387         assertTrue(invertedSomeStringSpec.isDisjointWith(someStringSpec));
388         assertFalse(anotherStringSpec.isDisjointWith(invertedSomeStringSpec));
389         assertFalse(invertedSomeStringSpec.isDisjointWith(anotherStringSpec));
390     }
391 
392 
393     @Test
394     public void testEqualityValueBoundSpecificationsAgainstComparisonValueBoundSpecifications() {
395         Specification<Integer> ten = equalTo(10);
396         Specification<Double> elevenPoint795 = equalTo(11.795d);
397 
398         assertTrue(ten.isDisjointWith(lessThan(10)));
399         assertFalse(ten.isDisjointWith(lessThanOrEqualTo(10)));
400         assertTrue(ten.isDisjointWith(greaterThan(10)));
401         assertFalse(ten.isDisjointWith(greaterThanOrEqualTo(10)));
402 
403         assertFalse(ten.isDisjointWith(not(lessThan(10))));
404         assertTrue(ten.isDisjointWith(not(lessThanOrEqualTo(10))));
405         assertFalse(ten.isDisjointWith(not(greaterThan(10))));
406         assertTrue(ten.isDisjointWith(not(greaterThanOrEqualTo(10))));
407 
408         assertTrue(elevenPoint795.isDisjointWith(lessThan(11.795d)));
409         assertFalse(elevenPoint795.isDisjointWith(lessThanOrEqualTo(11.795d)));
410         assertTrue(elevenPoint795.isDisjointWith(greaterThan(11.795d)));
411         assertFalse(elevenPoint795.isDisjointWith(greaterThanOrEqualTo(11.795d)));
412 
413         Specification<Date> todaySpec = equalTo(today);
414 
415         assertTrue(todaySpec.isDisjointWith(before(today)));
416         assertFalse(todaySpec.isDisjointWith(beforeOrAtTheSameTimeAs(today)));
417         assertTrue(todaySpec.isDisjointWith(after(today)));
418         assertFalse(todaySpec.isDisjointWith(afterOrAtTheSameTimeAs(today)));
419 
420         ////////////////////////////////////////
421         // Negated
422         ////////////////////////////////////////
423 
424         Specification<Integer> notTen = not(ten);
425         Specification<Double> notElevenPoint795 = not(elevenPoint795);
426 
427         assertFalse(notTen.isDisjointWith(notTen));
428 
429         assertFalse(notTen.isDisjointWith(lessThan(10)));
430         assertFalse(ten.isDisjointWith(lessThanOrEqualTo(10)));         // extra (also present above)
431         assertFalse(notTen.isDisjointWith(lessThanOrEqualTo(10)));
432         assertFalse(notTen.isDisjointWith(not(lessThanOrEqualTo(10)))); // extra
433         assertFalse(notTen.isDisjointWith(greaterThan(10)));
434         assertFalse(notTen.isDisjointWith(greaterThanOrEqualTo(10)));
435 
436         assertFalse(notElevenPoint795.isDisjointWith(lessThan(11.795d)));
437         assertFalse(notElevenPoint795.isDisjointWith(lessThanOrEqualTo(11.795d)));
438         assertFalse(notElevenPoint795.isDisjointWith(greaterThan(11.795d)));
439         assertFalse(notElevenPoint795.isDisjointWith(greaterThanOrEqualTo(11.795d)));
440 
441         Specification<Date> notToday = not(equalTo(today));
442         assertFalse(notToday.isDisjointWith(notToday));
443         assertFalse(notToday.isDisjointWith(before(today)));
444         assertFalse(notToday.isDisjointWith(beforeOrAtTheSameTimeAs(today)));
445         assertFalse(notToday.isDisjointWith(after(today)));
446         assertFalse(notToday.isDisjointWith(afterOrAtTheSameTimeAs(today)));
447     }
448 
449 
450     @Test
451     public void testEqualityValueBoundSpecificationsAgainstAgainstNegatedComparisonValueBoundSpecifications() {
452         Specification<Integer> ten = equalTo(10);
453         Specification<Double> elevenPoint795 = equalTo(11.795d);
454 
455         assertFalse(ten.isDisjointWith(not(lessThan(10))));
456         assertTrue(ten.isDisjointWith(not(lessThanOrEqualTo(10))));
457         assertFalse(ten.isDisjointWith(not(greaterThan(10))));
458         assertTrue(ten.isDisjointWith(not(greaterThanOrEqualTo(10))));
459 
460         assertFalse(elevenPoint795.isDisjointWith(not(lessThan(11.795d))));
461         assertTrue(elevenPoint795.isDisjointWith(not(lessThanOrEqualTo(11.795d))));
462         assertFalse(elevenPoint795.isDisjointWith(not(greaterThan(11.795d))));
463         assertTrue(elevenPoint795.isDisjointWith(not(greaterThanOrEqualTo(11.795d))));
464 
465         Specification<Date> todaySpec = equalTo(today);
466 
467         assertFalse(todaySpec.isDisjointWith(not(before(today))));
468         assertTrue(todaySpec.isDisjointWith(not(beforeOrAtTheSameTimeAs(today))));
469         assertFalse(todaySpec.isDisjointWith(not(after(today))));
470         assertTrue(todaySpec.isDisjointWith(not(afterOrAtTheSameTimeAs(today))));
471     }
472 
473 
474     @Test
475     public void testComparableValueBoundSpecifications_Integer() {
476         Specification<Integer> lessThan10 = lessThan(10);
477         Specification<Integer> lessThanOrEqualTo10 = lessThanOrEqualTo(10);
478         Specification<Integer> greaterThan10 = greaterThan(10);
479         Specification<Integer> greaterThanOrEqualTo10 = greaterThanOrEqualTo(10);
480 
481         Specification<Integer> lessThan11 = lessThan(11);
482         Specification<Integer> lessThanOrEqualTo11 = lessThanOrEqualTo(11);
483         Specification<Integer> greaterThan11 = greaterThan(11);
484         Specification<Integer> greaterThanOrEqualTo11 = greaterThanOrEqualTo(11);
485 
486         Specification<Integer> lessThan6 = lessThan(6);
487         Specification<Integer> lessThanOrEqualTo6 = lessThanOrEqualTo(6);
488         Specification<Integer> greaterThan6 = greaterThan(6);
489         Specification<Integer> greaterThanOrEqualTo6 = greaterThanOrEqualTo(6);
490 
491         // <
492         assertFalse(lessThan10.isDisjointWith(lessThan10));
493         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo10));
494         assertTrue(lessThan10.isDisjointWith(greaterThan10));
495         assertTrue(lessThan10.isDisjointWith(greaterThanOrEqualTo10));
496 
497         assertFalse(lessThan10.isDisjointWith(lessThan11));
498         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo11));
499         assertTrue(lessThan10.isDisjointWith(greaterThan11));
500         assertTrue(lessThan10.isDisjointWith(greaterThanOrEqualTo11));
501 
502         assertFalse(lessThan10.isDisjointWith(lessThan6));
503         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo6));
504         assertFalse(lessThan10.isDisjointWith(greaterThan6));
505         assertFalse(lessThan10.isDisjointWith(greaterThanOrEqualTo6));
506 
507         // <=
508         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan10));
509         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo10));
510         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThan10));
511         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo10));
512 
513         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan11));
514         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo11));
515         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThan11));
516         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo11));
517 
518         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan6));
519         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo6));
520         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThan6));
521         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo6));
522 
523         // >
524         assertTrue(greaterThan10.isDisjointWith(lessThan10));
525         assertTrue(greaterThan10.isDisjointWith(lessThanOrEqualTo10));
526         assertFalse(greaterThan10.isDisjointWith(greaterThan10));
527         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo10));
528 
529         assertTrue(greaterThan10.isDisjointWith(lessThan11));
530         assertFalse(greaterThan10.isDisjointWith(lessThanOrEqualTo11));
531         assertFalse(greaterThan10.isDisjointWith(greaterThan11));
532         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo11));
533 
534         assertTrue(greaterThan10.isDisjointWith(lessThan6));
535         assertTrue(greaterThan10.isDisjointWith(lessThanOrEqualTo6));
536         assertFalse(greaterThan10.isDisjointWith(greaterThan6));
537         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo6));
538 
539         // >=
540         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThan10));
541         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo10));
542         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan10));
543         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo10));
544 
545         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThan11));
546         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo11));
547         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan11));
548         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo11));
549 
550         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThan6));
551         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo6));
552         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan6));
553         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo6));
554     }
555 
556 
557     @Test
558     public void testNegatedComparableValueBoundSpecifications_Integer() {
559         Specification<Integer> lessThan10 = lessThan(10);
560         Specification<Integer> lessThanOrEqualTo10 = lessThanOrEqualTo(10);
561         Specification<Integer> greaterThan10 = greaterThan(10);
562         Specification<Integer> greaterThanOrEqualTo10 = greaterThanOrEqualTo(10);
563 
564         Specification<Integer> lessThan11 = lessThan(11);
565         Specification<Integer> lessThanOrEqualTo11 = lessThanOrEqualTo(11);
566         Specification<Integer> greaterThan11 = greaterThan(11);
567         Specification<Integer> greaterThanOrEqualTo11 = greaterThanOrEqualTo(11);
568 
569         Specification<Integer> lessThan6 = lessThan(6);
570         Specification<Integer> lessThanOrEqualTo6 = lessThanOrEqualTo(6);
571         Specification<Integer> greaterThan6 = greaterThan(6);
572         Specification<Integer> greaterThanOrEqualTo6 = greaterThanOrEqualTo(6);
573 
574 
575         // <
576         assertTrue(lessThan10.isDisjointWith(not(lessThan10)));
577         assertTrue(lessThan10.isDisjointWith(not(lessThanOrEqualTo10)));
578         assertFalse(lessThan10.isDisjointWith(not(greaterThan10)));
579         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo10)));
580 
581         assertFalse(lessThan10.isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                              // extra
582 
583         assertTrue(not(lessThan10).isDisjointWith(lessThan10));
584         assertFalse(not(lessThan10).isDisjointWith(lessThanOrEqualTo10));
585         assertFalse(not(lessThan10).isDisjointWith(greaterThan10));
586         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo10));
587 
588         assertFalse(not(lessThan10).isDisjointWith(not(lessThan10)));
589         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo10)));
590         assertFalse(not(lessThan10).isDisjointWith(not(greaterThan10)));
591         assertTrue(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo10)));
592 
593         assertFalse(not(not(lessThan10)).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                    // extra
594         assertTrue(not(not(not(lessThan10))).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                // extra
595 
596 
597         assertTrue(lessThan10.isDisjointWith(not(lessThan11)));
598         assertTrue(lessThan10.isDisjointWith(not(lessThanOrEqualTo11)));
599         assertFalse(lessThan10.isDisjointWith(not(greaterThan11)));
600         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo11)));
601 
602         assertFalse(not(lessThan10).isDisjointWith(lessThan11));
603         assertFalse(not(lessThan10).isDisjointWith(lessThanOrEqualTo11));
604         assertFalse(not(lessThan10).isDisjointWith(greaterThan11));
605         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo11));
606 
607         assertFalse(not(lessThan10).isDisjointWith(not(lessThan11)));
608         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo11)));
609         assertFalse(not(lessThan10).isDisjointWith(not(greaterThan11)));
610         assertFalse(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo11)));
611 
612 
613         assertFalse(lessThan10.isDisjointWith(not(lessThan6)));
614         assertFalse(lessThan10.isDisjointWith(not(lessThanOrEqualTo6)));
615         assertFalse(lessThan10.isDisjointWith(not(greaterThan6)));
616         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo6)));
617 
618         assertTrue(not(lessThan10).isDisjointWith(lessThan6));
619         assertTrue(not(lessThan10).isDisjointWith(lessThanOrEqualTo6));
620         assertFalse(not(lessThan10).isDisjointWith(greaterThan6));
621         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo6));
622 
623         assertFalse(not(lessThan10).isDisjointWith(not(lessThan6)));
624         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo6)));
625         assertTrue(not(lessThan10).isDisjointWith(not(greaterThan6)));
626         assertTrue(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo6)));
627 
628 
629         // =<
630         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThan10)));
631         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo10)));
632         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan10)));
633         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo10)));
634 
635         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                     // extra
636 
637         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan10));
638         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo10));
639         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan10));
640         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo10));
641 
642         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan10)));
643         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo10)));
644         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan10)));
645         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo10)));
646 
647         assertFalse(not(not(lessThanOrEqualTo10)).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));           // extra
648         assertTrue(not(not(not(lessThanOrEqualTo10))).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));       // extra
649 
650 
651         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThan11)));
652         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo11)));
653         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan11)));
654         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo11)));
655 
656         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan11));
657         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo11));
658         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan11));
659         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo11));
660 
661         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan11)));
662         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo11)));
663         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan11)));
664 
665         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan11)); // remove
666         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo11)));
667 
668 
669         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThan6)));
670         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo6)));
671         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan6)));
672         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo6)));
673 
674         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan6));
675         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo6));
676         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan6));
677         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo6));
678 
679         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan6)));
680         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo6)));
681         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan6)));
682         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo6)));
683 
684 
685         // >
686         assertFalse(greaterThan10.isDisjointWith(not(lessThan10)));
687         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo10)));
688         assertTrue(greaterThan10.isDisjointWith(not(greaterThan10)));
689         assertTrue(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo10)));
690 
691         assertTrue(greaterThan10.isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                            // extra
692 
693         assertFalse(not(greaterThan10).isDisjointWith(lessThan10));
694         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo10));
695         assertTrue(not(greaterThan10).isDisjointWith(greaterThan10));
696         assertFalse(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo10));
697 
698         assertFalse(not(greaterThan10).isDisjointWith(not(lessThan10)));
699         assertTrue(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo10)));
700         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan10)));
701         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo10)));
702 
703         assertTrue(not(not(greaterThan10)).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                  // extra
704         assertFalse(not(not(not(greaterThan10))).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));            // extra
705 
706 
707         assertFalse(greaterThan10.isDisjointWith(not(lessThan11)));
708         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo11)));
709         assertFalse(greaterThan10.isDisjointWith(not(greaterThan11)));
710         assertTrue(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo11)));
711 
712         assertFalse(not(greaterThan10).isDisjointWith(lessThan11));
713         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo11));
714         assertTrue(not(greaterThan10).isDisjointWith(greaterThan11));
715         assertTrue(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo11));
716 
717         assertTrue(not(greaterThan10).isDisjointWith(not(lessThan11)));
718         assertTrue(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo11)));
719         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan11)));
720         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo11)));
721 
722 
723         assertFalse(greaterThan10.isDisjointWith(not(lessThan6)));
724         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo6)));
725         assertTrue(greaterThan10.isDisjointWith(not(greaterThan6)));
726         assertTrue(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo6)));
727 
728         assertFalse(not(greaterThan10).isDisjointWith(lessThan6));
729         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo6));
730         assertFalse(not(greaterThan10).isDisjointWith(greaterThan6));
731         assertFalse(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo6));
732 
733         assertFalse(not(greaterThan10).isDisjointWith(not(lessThan6)));
734         assertFalse(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo6)));
735         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan6)));
736         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo6)));
737 
738 
739         // >=
740         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan10)));
741         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo10)));
742         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan10)));
743         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo10)));
744 
745         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));                   // extra
746 
747         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan10));
748         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo10));
749         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan10));
750         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo10));
751 
752         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan10)));
753         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo10)));
754         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan10)));
755         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo10)));
756 
757         assertTrue(not(not(greaterThanOrEqualTo10)).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));         // extra
758         assertFalse(not(not(not(greaterThanOrEqualTo10))).isDisjointWith(not(not(not(greaterThanOrEqualTo10)))));   // extra
759 
760 
761         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan11)));
762         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo11)));
763         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan11)));
764         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo11)));
765 
766         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan11));
767         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo11));
768         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan11));
769         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo11));
770 
771         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan11)));
772         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo11)));
773         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan11)));
774         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo11)));
775 
776 
777         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan6)));
778         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo6)));
779         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan6)));
780         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo6)));
781 
782         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan6));
783         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo6));
784         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan6));
785         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo6));
786 
787         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan6)));
788         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo6)));
789         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan6)));
790         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo6)));
791     }
792 
793 
794     @Test
795     public void testComparableValueBoundSpecifications_Double() {
796         Specification<Double> lessThan10 = lessThan(10.00D);
797         Specification<Double> lessThanOrEqualTo10 = lessThanOrEqualTo(10.00D);
798         Specification<Double> greaterThan10 = greaterThan(10.00D);
799         Specification<Double> greaterThanOrEqualTo10 = greaterThanOrEqualTo(10.00D);
800 
801         Specification<Double> lessThan11 = lessThan(11.00D);
802         Specification<Double> lessThanOrEqualTo11 = lessThanOrEqualTo(11.00D);
803         Specification<Double> greaterThan11 = greaterThan(11.00D);
804         Specification<Double> greaterThanOrEqualTo11 = greaterThanOrEqualTo(11.00D);
805 
806         Specification<Double> lessThan6 = lessThan(6.00D);
807         Specification<Double> lessThanOrEqualTo6 = lessThanOrEqualTo(6.00D);
808         Specification<Double> greaterThan6 = greaterThan(6.00D);
809         Specification<Double> greaterThanOrEqualTo6 = greaterThanOrEqualTo(6.00D);
810 
811         ////////////////////////////////////////
812         // Ordinary
813         ////////////////////////////////////////
814 
815         // <
816         assertFalse(lessThan10.isDisjointWith(lessThan10));
817         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo10));
818         assertTrue(lessThan10.isDisjointWith(greaterThan10));
819         assertTrue(lessThan10.isDisjointWith(greaterThanOrEqualTo10));
820 
821         assertFalse(lessThan10.isDisjointWith(lessThan11));
822         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo11));
823         assertTrue(lessThan10.isDisjointWith(greaterThan11));
824         assertTrue(lessThan10.isDisjointWith(greaterThanOrEqualTo11));
825 
826         assertFalse(lessThan10.isDisjointWith(lessThan6));
827         assertFalse(lessThan10.isDisjointWith(lessThanOrEqualTo6));
828         assertFalse(lessThan10.isDisjointWith(greaterThan6));
829         assertFalse(lessThan10.isDisjointWith(greaterThanOrEqualTo6));
830 
831         // <=
832         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan10));
833         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo10));
834         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThan10));
835         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo10));
836 
837         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan11));
838         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo11));
839         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThan11));
840         assertTrue(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo11));
841 
842         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThan6));
843         assertFalse(lessThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo6));
844         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThan6));
845         assertFalse(lessThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo6));
846 
847         // >
848         assertTrue(greaterThan10.isDisjointWith(lessThan10));
849         assertTrue(greaterThan10.isDisjointWith(lessThanOrEqualTo10));
850         assertFalse(greaterThan10.isDisjointWith(greaterThan10));
851         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo10));
852 
853         assertFalse(greaterThan10.isDisjointWith(lessThan11));
854         assertFalse(greaterThan10.isDisjointWith(lessThanOrEqualTo11));
855         assertFalse(greaterThan10.isDisjointWith(greaterThan11));
856         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo11));
857 
858         assertTrue(greaterThan10.isDisjointWith(lessThan6));
859         assertTrue(greaterThan10.isDisjointWith(lessThanOrEqualTo6));
860         assertFalse(greaterThan10.isDisjointWith(greaterThan6));
861         assertFalse(greaterThan10.isDisjointWith(greaterThanOrEqualTo6));
862 
863         // >=
864         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThan10));
865         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo10));
866         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan10));
867         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo10));
868 
869         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThan11));
870         assertFalse(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo11));
871         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan11));
872         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo11));
873 
874         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThan6));
875         assertTrue(greaterThanOrEqualTo10.isDisjointWith(lessThanOrEqualTo6));
876         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThan6));
877         assertFalse(greaterThanOrEqualTo10.isDisjointWith(greaterThanOrEqualTo6));
878 
879         // Extra
880         assertTrue(greaterThan11.isDisjointWith(lessThan10));
881         assertFalse(lessThan11.isDisjointWith(greaterThan10));
882         assertTrue(lessThan(11.41).isDisjointWith(greaterThan(11.42)));
883         assertTrue(lessThan(11.42).isDisjointWith(greaterThan(11.42)));
884         assertFalse(lessThan(11.43).isDisjointWith(greaterThan(11.42)));
885         assertFalse(lessThan(11.44).isDisjointWith(greaterThan(11.42)));
886         assertFalse(lessThan(11.44F).isDisjointWith(greaterThan(11.42F)));
887         assertFalse(lessThan(11.44D).isDisjointWith(greaterThan(11.42D)));
888         //assertFalse(lessThan(11.44D).isDisjointWith(greaterThan(11.42F)));    // Different types -> no satisfaction
889         //assertFalse(lessThan(11.44F).isDisjointWith(greaterThan(11.42D)));    // Different types -> no satisfaction
890 
891 
892         ////////////////////////////////////////
893         // Negated
894         ////////////////////////////////////////
895 
896         // <
897         assertTrue(lessThan10.isDisjointWith(not(lessThan10)));
898         assertTrue(lessThan10.isDisjointWith(not(lessThanOrEqualTo10)));
899         assertFalse(lessThan10.isDisjointWith(not(greaterThan10)));
900         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo10)));
901 
902         assertTrue(not(lessThan10).isDisjointWith(lessThan10));
903         assertFalse(not(lessThan10).isDisjointWith(lessThanOrEqualTo10));
904         assertFalse(not(lessThan10).isDisjointWith(greaterThan10));
905         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo10));
906 
907         assertFalse(not(lessThan10).isDisjointWith(not(lessThan10)));
908         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo10)));
909         assertFalse(not(lessThan10).isDisjointWith(not(greaterThan10)));
910         assertTrue(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo10)));
911 
912 
913         assertTrue(lessThan10.isDisjointWith(not(lessThan11)));
914         assertTrue(lessThan10.isDisjointWith(not(lessThanOrEqualTo11)));
915         assertFalse(lessThan10.isDisjointWith(not(greaterThan11)));
916         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo11)));
917 
918         assertFalse(not(lessThan10).isDisjointWith(lessThan11));
919         assertFalse(not(lessThan10).isDisjointWith(lessThanOrEqualTo11));
920         assertFalse(not(lessThan10).isDisjointWith(greaterThan11));
921         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo11));
922 
923         assertFalse(not(lessThan10).isDisjointWith(not(lessThan11)));
924         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo11)));
925         assertFalse(not(lessThan10).isDisjointWith(not(greaterThan11)));
926         assertFalse(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo11)));
927 
928 
929         assertFalse(lessThan10.isDisjointWith(not(lessThan6)));
930         assertFalse(lessThan10.isDisjointWith(not(lessThanOrEqualTo6)));
931         assertFalse(lessThan10.isDisjointWith(not(greaterThan6)));
932         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo6)));
933 
934         assertTrue(not(lessThan10).isDisjointWith(lessThan6));
935         assertTrue(not(lessThan10).isDisjointWith(lessThanOrEqualTo6));
936         assertFalse(not(lessThan10).isDisjointWith(greaterThan6));
937         assertFalse(not(lessThan10).isDisjointWith(greaterThanOrEqualTo6));
938 
939         assertFalse(not(lessThan10).isDisjointWith(not(lessThan6)));
940         assertFalse(not(lessThan10).isDisjointWith(not(lessThanOrEqualTo6)));
941         assertTrue(not(lessThan10).isDisjointWith(not(greaterThan6)));
942         assertTrue(not(lessThan10).isDisjointWith(not(greaterThanOrEqualTo6)));
943 
944         assertTrue(lessThan10.isDisjointWith(greaterThanOrEqualTo(10.00D)));            // extra
945         assertFalse(lessThan10.isDisjointWith(greaterThanOrEqualTo(9.99D)));            // extra
946         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo(10.00D))));      // extra
947 
948         assertFalse(lessThan(10).isDisjointWith(not(greaterThanOrEqualTo(9))));         // extra
949         assertFalse(lessThan10.isDisjointWith(not(greaterThanOrEqualTo(9.99D))));       // extra
950 
951         assertTrue(lessThan10.isDisjointWith(not(not(greaterThanOrEqualTo(10.00D)))));  // extra
952         assertFalse(lessThan10.isDisjointWith(not(not(greaterThanOrEqualTo(9.99D)))));  // extra
953 
954 
955         // =<
956         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThan10)));
957         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo10)));
958         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan10)));
959         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo10)));
960 
961         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan10));
962         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo10));
963         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan10));
964         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo10));
965 
966         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan10)));
967         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo10)));
968         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan10)));
969         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo10)));
970 
971 
972         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThan11)));
973         assertTrue(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo11)));
974         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan11)));
975         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo11)));
976 
977         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(lessThan11));
978         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo11));
979         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan11));
980         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo11));
981 
982         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan11)));
983         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo11)));
984         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan11)));
985         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo11)));
986 
987 
988         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThan6)));
989         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo6)));
990         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThan6)));
991         assertFalse(lessThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo6)));
992 
993         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThan6));
994         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo6));
995         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThan6));
996         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo6));
997 
998         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThan6)));
999         assertFalse(not(lessThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo6)));
1000         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThan6)));
1001         assertTrue(not(lessThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo6)));
1002 
1003 
1004         // >
1005         assertFalse(greaterThan10.isDisjointWith(not(lessThan10)));
1006         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo10)));
1007         assertTrue(greaterThan10.isDisjointWith(not(greaterThan10)));
1008         assertTrue(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo10)));
1009 
1010         assertFalse(not(greaterThan10).isDisjointWith(lessThan10));
1011         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo10));
1012         assertTrue(not(greaterThan10).isDisjointWith(greaterThan10));
1013         assertFalse(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo10));
1014 
1015         assertFalse(not(greaterThan10).isDisjointWith(not(lessThan10)));
1016         assertTrue(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo10)));
1017         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan10)));
1018         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo10)));
1019 
1020 
1021         assertFalse(greaterThan10.isDisjointWith(not(lessThan11)));
1022         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo11)));
1023         assertFalse(greaterThan10.isDisjointWith(not(greaterThan11)));
1024         assertFalse(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo11)));
1025 
1026         assertFalse(not(greaterThan10).isDisjointWith(lessThan11));
1027         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo11));
1028         assertTrue(not(greaterThan10).isDisjointWith(greaterThan11));
1029         assertTrue(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo11));
1030 
1031         assertTrue(not(greaterThan10).isDisjointWith(not(lessThan11)));
1032         assertTrue(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo11)));
1033         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan11)));
1034         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo11)));
1035 
1036 
1037         assertFalse(greaterThan10.isDisjointWith(not(lessThan6)));
1038         assertFalse(greaterThan10.isDisjointWith(not(lessThanOrEqualTo6)));
1039         assertTrue(greaterThan10.isDisjointWith(not(greaterThan6)));
1040         assertTrue(greaterThan10.isDisjointWith(not(greaterThanOrEqualTo6)));
1041 
1042         assertFalse(not(greaterThan10).isDisjointWith(lessThan6));
1043         assertFalse(not(greaterThan10).isDisjointWith(lessThanOrEqualTo6));
1044         assertFalse(not(greaterThan10).isDisjointWith(greaterThan6));
1045         assertFalse(not(greaterThan10).isDisjointWith(greaterThanOrEqualTo6));
1046 
1047         assertFalse(not(greaterThan10).isDisjointWith(not(lessThan6)));
1048         assertFalse(not(greaterThan10).isDisjointWith(not(lessThanOrEqualTo6)));
1049         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThan6)));
1050         assertFalse(not(greaterThan10).isDisjointWith(not(greaterThanOrEqualTo6)));
1051 
1052 
1053         // >=
1054         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan10)));
1055         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo10)));
1056         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan10)));
1057         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo10)));
1058 
1059         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan10));
1060         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo10));
1061         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan10));
1062         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo10));
1063 
1064         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan10)));
1065         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo10)));
1066         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan10)));
1067         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo10)));
1068 
1069 
1070         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan11)));
1071         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo11)));
1072         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan11)));
1073         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo11)));
1074 
1075         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan11));
1076         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo11));
1077         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan11));
1078         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo11));
1079 
1080         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan11)));
1081         assertTrue(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo11)));
1082         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan11)));
1083         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo11)));
1084 
1085 
1086         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThan6)));
1087         assertFalse(greaterThanOrEqualTo10.isDisjointWith(not(lessThanOrEqualTo6)));
1088         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThan6)));
1089         assertTrue(greaterThanOrEqualTo10.isDisjointWith(not(greaterThanOrEqualTo6)));
1090 
1091         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThan6));
1092         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(lessThanOrEqualTo6));
1093         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(greaterThan6));
1094         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(greaterThanOrEqualTo6));
1095 
1096         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThan6)));
1097         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(lessThanOrEqualTo6)));
1098         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThan6)));
1099         assertFalse(not(greaterThanOrEqualTo10).isDisjointWith(not(greaterThanOrEqualTo6)));
1100     }
1101 
1102 
1103     @Test
1104     public void testComparableValueBoundSpecifications_Day_1() {
1105         Specification<Date> beforeToday = before(today);
1106         Specification<Date> beforeOrAtTheSameDayAsToday = beforeOrAtTheSameTimeAs(today);
1107         Specification<Date> afterToday = after(today);
1108         Specification<Date> afterOrAtTheSameDayAsToday = afterOrAtTheSameTimeAs(today);
1109 
1110         Specification<Date> beforeTomorrow = before(tomorrow);
1111         Specification<Date> beforeOrAtTheSameDayAsTomorrow = beforeOrAtTheSameTimeAs(tomorrow);
1112         Specification<Date> afterTomorrow = after(tomorrow);
1113         Specification<Date> afterOrAtTheSameDayAsTomorrow = afterOrAtTheSameTimeAs(tomorrow);
1114 
1115         Specification<Date> beforeThreeDaysAgo = before(theDayBeforeTheDayBeforeYesterday);
1116         Specification<Date> beforeOrAtTheSameDayAsThreeDaysAgo = beforeOrAtTheSameTimeAs(theDayBeforeTheDayBeforeYesterday);
1117         Specification<Date> afterThreeDaysAgo = after(theDayBeforeTheDayBeforeYesterday);
1118         Specification<Date> afterOrAtTheSameDayAsThreeDaysAgo = afterOrAtTheSameTimeAs(theDayBeforeTheDayBeforeYesterday);
1119 
1120         ////////////////////////////////////////
1121         // Ordinary
1122         ////////////////////////////////////////
1123 
1124         // <
1125         assertFalse(beforeToday.isDisjointWith(beforeToday));
1126         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1127         assertTrue(beforeToday.isDisjointWith(afterToday));
1128         assertTrue(beforeToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1129 
1130         assertFalse(beforeToday.isDisjointWith(beforeTomorrow));
1131         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1132         assertTrue(beforeToday.isDisjointWith(afterTomorrow));
1133         assertTrue(beforeToday.isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1134 
1135         assertFalse(beforeToday.isDisjointWith(beforeThreeDaysAgo));
1136         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1137         assertFalse(beforeToday.isDisjointWith(afterThreeDaysAgo));
1138         assertFalse(beforeToday.isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1139 
1140         // <=
1141         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeToday));
1142         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1143         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterToday));
1144         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1145 
1146         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeTomorrow));
1147         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1148         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterTomorrow));
1149         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1150 
1151         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeThreeDaysAgo));
1152         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1153         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterThreeDaysAgo));
1154         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1155 
1156         // >
1157         assertTrue(afterToday.isDisjointWith(beforeToday));
1158         assertTrue(afterToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1159         assertFalse(afterToday.isDisjointWith(afterToday));
1160         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1161 
1162         assertTrue(afterToday.isDisjointWith(beforeTomorrow));
1163         assertFalse(afterToday.isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1164         assertFalse(afterToday.isDisjointWith(afterTomorrow));
1165         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1166 
1167         assertTrue(afterToday.isDisjointWith(beforeThreeDaysAgo));
1168         assertTrue(afterToday.isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1169         assertFalse(afterToday.isDisjointWith(afterThreeDaysAgo));
1170         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1171 
1172         // >=
1173         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeToday));
1174         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1175         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterToday));
1176         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1177 
1178         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeTomorrow));
1179         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1180         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterTomorrow));
1181         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1182 
1183         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeThreeDaysAgo));
1184         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1185         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterThreeDaysAgo));
1186         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1187 
1188         ////////////////////////////////////////
1189         // Negated
1190         ////////////////////////////////////////
1191 
1192         // <
1193         assertTrue(beforeToday.isDisjointWith(not(beforeToday)));
1194         assertTrue(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1195         assertFalse(beforeToday.isDisjointWith(not(afterToday)));
1196         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1197 
1198         assertTrue(not(beforeToday).isDisjointWith(beforeToday));
1199         assertFalse(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1200         assertFalse(not(beforeToday).isDisjointWith(afterToday));
1201         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1202 
1203         assertFalse(not(beforeToday).isDisjointWith(not(beforeToday)));
1204         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1205         assertFalse(not(beforeToday).isDisjointWith(not(afterToday)));
1206         assertTrue(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1207 
1208 
1209         assertTrue(beforeToday.isDisjointWith(not(beforeTomorrow)));
1210         assertTrue(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1211         assertFalse(beforeToday.isDisjointWith(not(afterTomorrow)));
1212         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1213 
1214         assertFalse(not(beforeToday).isDisjointWith(beforeTomorrow));
1215         assertFalse(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1216         assertFalse(not(beforeToday).isDisjointWith(afterTomorrow));
1217         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1218 
1219         assertFalse(not(beforeToday).isDisjointWith(not(beforeTomorrow)));
1220         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1221         assertFalse(not(beforeToday).isDisjointWith(not(afterTomorrow)));
1222         assertFalse(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1223 
1224 
1225         assertFalse(beforeToday.isDisjointWith(not(beforeThreeDaysAgo)));
1226         assertFalse(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1227         assertFalse(beforeToday.isDisjointWith(not(beforeThreeDaysAgo)));
1228         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1229 
1230         assertTrue(not(beforeToday).isDisjointWith(beforeThreeDaysAgo));
1231         assertTrue(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1232         assertFalse(not(beforeToday).isDisjointWith(afterThreeDaysAgo));
1233         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1234 
1235         assertFalse(not(beforeToday).isDisjointWith(not(beforeThreeDaysAgo)));
1236         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1237         assertTrue(not(beforeToday).isDisjointWith(not(afterThreeDaysAgo)));
1238         assertTrue(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1239 
1240 
1241         // =<
1242         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeToday)));
1243         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1244         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterToday)));
1245         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1246 
1247         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeToday));
1248         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1249         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterToday));
1250         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1251 
1252         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeToday)));
1253         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1254         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterToday)));
1255         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1256 
1257 
1258         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeTomorrow)));
1259         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1260         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterTomorrow)));
1261         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1262 
1263         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeTomorrow));
1264         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1265         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterTomorrow));
1266         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1267 
1268         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeTomorrow)));
1269         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1270         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterTomorrow)));
1271         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1272 
1273 
1274         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeThreeDaysAgo)));
1275         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1276         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterThreeDaysAgo)));
1277         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1278 
1279         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeThreeDaysAgo));
1280         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1281         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterThreeDaysAgo));
1282         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1283 
1284         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeThreeDaysAgo)));
1285         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1286         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterThreeDaysAgo)));
1287         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1288 
1289 
1290         // >
1291         assertFalse(afterToday.isDisjointWith(not(beforeToday)));
1292         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1293         assertTrue(afterToday.isDisjointWith(not(afterToday)));
1294         assertTrue(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1295 
1296         assertFalse(not(afterToday).isDisjointWith(beforeToday));
1297         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1298         assertTrue(not(afterToday).isDisjointWith(afterToday));
1299         assertFalse(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1300 
1301         assertFalse(not(afterToday).isDisjointWith(not(beforeToday)));
1302         assertTrue(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1303         assertFalse(not(afterToday).isDisjointWith(not(afterToday)));
1304         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1305 
1306 
1307         assertFalse(afterToday.isDisjointWith(not(beforeTomorrow)));
1308         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1309         assertFalse(afterToday.isDisjointWith(not(afterTomorrow)));
1310         assertTrue(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1311 
1312         assertFalse(not(afterToday).isDisjointWith(beforeTomorrow));
1313         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1314         assertTrue(not(afterToday).isDisjointWith(afterTomorrow));
1315         assertTrue(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1316 
1317         assertTrue(not(afterToday).isDisjointWith(not(beforeTomorrow)));
1318         assertTrue(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1319         assertFalse(not(afterToday).isDisjointWith(not(afterTomorrow)));
1320         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1321 
1322 
1323         assertFalse(afterToday.isDisjointWith(not(beforeThreeDaysAgo)));
1324         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1325         assertTrue(afterToday.isDisjointWith(not(afterThreeDaysAgo)));
1326         assertTrue(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1327 
1328         assertFalse(not(afterToday).isDisjointWith(beforeThreeDaysAgo));
1329         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1330         assertFalse(not(afterToday).isDisjointWith(afterThreeDaysAgo));
1331         assertFalse(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1332 
1333         assertFalse(not(afterToday).isDisjointWith(not(beforeThreeDaysAgo)));
1334         assertFalse(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1335         assertFalse(not(afterToday).isDisjointWith(not(afterThreeDaysAgo)));
1336         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1337 
1338 
1339         // >=
1340         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeToday)));
1341         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1342         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterToday)));
1343         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1344 
1345         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeToday));
1346         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1347         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterToday));
1348         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1349 
1350         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeToday)));
1351         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1352         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterToday)));
1353         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1354 
1355 
1356         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeTomorrow)));
1357         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1358         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterTomorrow)));
1359         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1360 
1361         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeTomorrow));
1362         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsTomorrow));
1363         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterTomorrow));
1364         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsTomorrow));
1365 
1366         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeTomorrow)));
1367         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsTomorrow)));
1368         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterTomorrow)));
1369         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsTomorrow)));
1370 
1371 
1372         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeThreeDaysAgo)));
1373         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1374         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterThreeDaysAgo)));
1375         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1376 
1377         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeThreeDaysAgo));
1378         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsThreeDaysAgo));
1379         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterThreeDaysAgo));
1380         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsThreeDaysAgo));
1381 
1382         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeThreeDaysAgo)));
1383         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsThreeDaysAgo)));
1384         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterThreeDaysAgo)));
1385         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsThreeDaysAgo)));
1386     }
1387 
1388 
1389     // TODO: assert these assertions
1390     @Test
1391     public void testComparableValueBoundSpecifications_Day_2() {
1392         Specification<Date> beforeToday = before(today);
1393         Specification<Date> beforeOrAtTheSameDayAsToday = beforeOrAtTheSameTimeAs(today);
1394         Specification<Date> afterToday = after(today);
1395         Specification<Date> afterOrAtTheSameDayAsToday = afterOrAtTheSameTimeAs(today);
1396 
1397         Specification<Date> beforeTheDayAfterTomorrow = before(theDayAfterTomorrow);
1398         Specification<Date> beforeOrAtTheSameDayAsTheDayAfterTomorrow = beforeOrAtTheSameTimeAs(theDayAfterTomorrow);
1399         Specification<Date> afterTheDayAfterTomorrow = after(theDayAfterTomorrow);
1400         Specification<Date> afterOrAtTheSameDayAsTheDayAfterTomorrow = afterOrAtTheSameTimeAs(theDayAfterTomorrow);
1401 
1402         Specification<Date> beforeYesterday = before(yesterday);
1403         Specification<Date> beforeOrAtTheSameDayAsYesterday = beforeOrAtTheSameTimeAs(yesterday);
1404         Specification<Date> afterYesterday = after(yesterday);
1405         Specification<Date> afterOrAtTheSameDayAsYesterday = afterOrAtTheSameTimeAs(yesterday);
1406 
1407         ////////////////////////////////////////
1408         // Ordinary
1409         ////////////////////////////////////////
1410 
1411         // <
1412         assertFalse(beforeToday.isDisjointWith(beforeToday));
1413         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1414         assertTrue(beforeToday.isDisjointWith(afterToday));
1415         assertTrue(beforeToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1416 
1417         assertFalse(beforeToday.isDisjointWith(beforeTheDayAfterTomorrow));
1418         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1419         assertTrue(beforeToday.isDisjointWith(afterTheDayAfterTomorrow));
1420         assertTrue(beforeToday.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1421 
1422         assertFalse(beforeToday.isDisjointWith(beforeYesterday));
1423         assertFalse(beforeToday.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1424         assertTrue(beforeToday.isDisjointWith(afterYesterday));
1425         assertFalse(beforeToday.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1426 
1427         // <=
1428         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeToday));
1429         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1430         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterToday));
1431         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1432 
1433         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeTheDayAfterTomorrow));
1434         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1435         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterTheDayAfterTomorrow));
1436         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1437 
1438         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeYesterday));
1439         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1440         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterYesterday));
1441         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1442 
1443         // >
1444         assertTrue(afterToday.isDisjointWith(beforeToday));
1445         assertTrue(afterToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1446         assertFalse(afterToday.isDisjointWith(afterToday));
1447         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1448 
1449         assertFalse(afterToday.isDisjointWith(beforeTheDayAfterTomorrow));
1450         assertFalse(afterToday.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1451         assertFalse(afterToday.isDisjointWith(afterTheDayAfterTomorrow));
1452         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1453 
1454         assertTrue(afterToday.isDisjointWith(beforeYesterday));
1455         assertTrue(afterToday.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1456         assertFalse(afterToday.isDisjointWith(afterYesterday));
1457         assertFalse(afterToday.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1458 
1459         // >=
1460         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeToday));
1461         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsToday));
1462         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterToday));
1463         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsToday));
1464 
1465         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeTheDayAfterTomorrow));
1466         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1467         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterTheDayAfterTomorrow));
1468         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1469 
1470         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeYesterday));
1471         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1472         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterYesterday));
1473         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1474 
1475         ////////////////////////////////////////
1476         // Negated
1477         ////////////////////////////////////////
1478 
1479         // <
1480         assertTrue(beforeToday.isDisjointWith(not(beforeToday)));
1481         assertTrue(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1482         assertFalse(beforeToday.isDisjointWith(not(afterToday)));
1483         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1484 
1485         assertTrue(not(beforeToday).isDisjointWith(beforeToday));
1486         assertFalse(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1487         assertFalse(not(beforeToday).isDisjointWith(afterToday));
1488         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1489 
1490         assertFalse(not(beforeToday).isDisjointWith(not(beforeToday)));
1491         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1492         assertFalse(not(beforeToday).isDisjointWith(not(afterToday)));
1493         assertTrue(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1494 
1495 
1496         assertTrue(beforeToday.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1497         assertTrue(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1498         assertFalse(beforeToday.isDisjointWith(not(afterTheDayAfterTomorrow)));
1499         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1500 
1501         assertFalse(not(beforeToday).isDisjointWith(beforeTheDayAfterTomorrow));
1502         assertFalse(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1503         assertFalse(not(beforeToday).isDisjointWith(afterTheDayAfterTomorrow));
1504         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1505 
1506         assertFalse(not(beforeToday).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1507         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1508         assertFalse(not(beforeToday).isDisjointWith(not(afterTheDayAfterTomorrow)));
1509         assertFalse(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1510 
1511 
1512         assertFalse(beforeToday.isDisjointWith(not(beforeYesterday)));
1513         assertTrue(beforeToday.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1514         assertFalse(beforeToday.isDisjointWith(not(beforeYesterday)));
1515         assertFalse(beforeToday.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1516 
1517         assertTrue(not(beforeToday).isDisjointWith(beforeYesterday));
1518         assertTrue(not(beforeToday).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1519         assertFalse(not(beforeToday).isDisjointWith(afterYesterday));
1520         assertFalse(not(beforeToday).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1521 
1522         assertFalse(not(beforeToday).isDisjointWith(not(beforeYesterday)));
1523         assertFalse(not(beforeToday).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1524         assertTrue(not(beforeToday).isDisjointWith(not(afterYesterday)));
1525         assertTrue(not(beforeToday).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1526 
1527 
1528         // =<
1529         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeToday)));
1530         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1531         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterToday)));
1532         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1533 
1534         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeToday));
1535         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1536         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterToday));
1537         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1538 
1539         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeToday)));
1540         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1541         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterToday)));
1542         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1543 
1544 
1545         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1546         assertTrue(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1547         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterTheDayAfterTomorrow)));
1548         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1549 
1550         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeTheDayAfterTomorrow));
1551         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1552         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterTheDayAfterTomorrow));
1553         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1554 
1555         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1556         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1557         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterTheDayAfterTomorrow)));
1558         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1559 
1560 
1561         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeYesterday)));
1562         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1563         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterYesterday)));
1564         assertFalse(beforeOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1565 
1566         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeYesterday));
1567         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1568         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterYesterday));
1569         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1570 
1571         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeYesterday)));
1572         assertFalse(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1573         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterYesterday)));
1574         assertTrue(not(beforeOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1575 
1576 
1577         // >
1578         assertFalse(afterToday.isDisjointWith(not(beforeToday)));
1579         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1580         assertTrue(afterToday.isDisjointWith(not(afterToday)));
1581         assertTrue(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1582 
1583         assertFalse(not(afterToday).isDisjointWith(beforeToday));
1584         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1585         assertTrue(not(afterToday).isDisjointWith(afterToday));
1586         assertFalse(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1587 
1588         assertFalse(not(afterToday).isDisjointWith(not(beforeToday)));
1589         assertTrue(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1590         assertFalse(not(afterToday).isDisjointWith(not(afterToday)));
1591         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1592 
1593 
1594         assertFalse(afterToday.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1595         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1596         assertFalse(afterToday.isDisjointWith(not(afterTheDayAfterTomorrow)));
1597         assertFalse(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1598 
1599         assertFalse(not(afterToday).isDisjointWith(beforeTheDayAfterTomorrow));
1600         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1601         assertTrue(not(afterToday).isDisjointWith(afterTheDayAfterTomorrow));
1602         assertTrue(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1603 
1604         assertTrue(not(afterToday).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1605         assertTrue(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1606         assertFalse(not(afterToday).isDisjointWith(not(afterTheDayAfterTomorrow)));
1607         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1608 
1609 
1610         assertFalse(afterToday.isDisjointWith(not(beforeYesterday)));
1611         assertFalse(afterToday.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1612         assertTrue(afterToday.isDisjointWith(not(afterYesterday)));
1613         assertTrue(afterToday.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1614 
1615         assertFalse(not(afterToday).isDisjointWith(beforeYesterday));
1616         assertFalse(not(afterToday).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1617         assertFalse(not(afterToday).isDisjointWith(afterYesterday));
1618         assertFalse(not(afterToday).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1619 
1620         assertFalse(not(afterToday).isDisjointWith(not(beforeYesterday)));
1621         assertFalse(not(afterToday).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1622         assertFalse(not(afterToday).isDisjointWith(not(afterYesterday)));
1623         assertFalse(not(afterToday).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1624 
1625 
1626         // >=
1627         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeToday)));
1628         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1629         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterToday)));
1630         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1631 
1632         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeToday));
1633         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsToday));
1634         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterToday));
1635         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsToday));
1636 
1637         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeToday)));
1638         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsToday)));
1639         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterToday)));
1640         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsToday)));
1641 
1642 
1643         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1644         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1645         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterTheDayAfterTomorrow)));
1646         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1647 
1648         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeTheDayAfterTomorrow));
1649         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1650         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterTheDayAfterTomorrow));
1651         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1652 
1653         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1654         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1655         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterTheDayAfterTomorrow)));
1656         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1657 
1658 
1659         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeYesterday)));
1660         assertFalse(afterOrAtTheSameDayAsToday.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1661         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterYesterday)));
1662         assertTrue(afterOrAtTheSameDayAsToday.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1663 
1664         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeYesterday));
1665         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1666         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterYesterday));
1667         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1668 
1669         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeYesterday)));
1670         assertTrue(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1671         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterYesterday)));
1672         assertFalse(not(afterOrAtTheSameDayAsToday).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1673     }
1674 
1675 
1676     // TODO: assert these assertions
1677     @Test
1678     public void testComparableValueBoundSpecifications_Timestamp_And_Day() {
1679         Date now = new Date();
1680 
1681         Specification<Date> beforeNow = before(now);
1682         Specification<Date> beforeOrAtTheSameTimeAsNow = beforeOrAtTheSameTimeAs(now);
1683         Specification<Date> afterNow = after(now);
1684         Specification<Date> afterOrAtTheSameTimeAsNow = afterOrAtTheSameTimeAs(now);
1685 
1686         Specification<Date> beforeTheDayAfterTomorrow = before(theDayAfterTomorrow);
1687         Specification<Date> beforeOrAtTheSameDayAsTheDayAfterTomorrow = beforeOrAtTheSameTimeAs(theDayAfterTomorrow);
1688         Specification<Date> afterTheDayAfterTomorrow = after(theDayAfterTomorrow);
1689         Specification<Date> afterOrAtTheSameDayAsTheDayAfterTomorrow = afterOrAtTheSameTimeAs(theDayAfterTomorrow);
1690 
1691         Specification<Date> beforeYesterday = before(yesterday);
1692         Specification<Date> beforeOrAtTheSameDayAsYesterday = beforeOrAtTheSameTimeAs(yesterday);
1693         Specification<Date> afterYesterday = after(yesterday);
1694         Specification<Date> afterOrAtTheSameDayAsYesterday = afterOrAtTheSameTimeAs(yesterday);
1695 
1696         ////////////////////////////////////////
1697         // Ordinary
1698         ////////////////////////////////////////
1699 
1700         // <
1701         assertFalse(beforeNow.isDisjointWith(beforeNow));
1702         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
1703         assertTrue(beforeNow.isDisjointWith(afterNow));
1704         assertTrue(beforeNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
1705 
1706         assertFalse(beforeNow.isDisjointWith(beforeTheDayAfterTomorrow));
1707         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1708         assertTrue(beforeNow.isDisjointWith(afterTheDayAfterTomorrow));
1709         assertTrue(beforeNow.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1710 
1711         assertFalse(beforeNow.isDisjointWith(beforeYesterday));
1712         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1713         assertFalse(beforeNow.isDisjointWith(afterYesterday));
1714         assertFalse(beforeNow.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1715 
1716         // <=
1717         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeNow));
1718         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
1719         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterNow));
1720         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
1721 
1722         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeTheDayAfterTomorrow));
1723         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1724         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterTheDayAfterTomorrow));
1725         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1726 
1727         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeYesterday));
1728         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1729         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterYesterday));
1730         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1731 
1732         // >
1733         assertTrue(afterNow.isDisjointWith(beforeNow));
1734         assertTrue(afterNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
1735         assertFalse(afterNow.isDisjointWith(afterNow));
1736         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
1737 
1738         assertFalse(afterNow.isDisjointWith(beforeTheDayAfterTomorrow));
1739         assertFalse(afterNow.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1740         assertFalse(afterNow.isDisjointWith(afterTheDayAfterTomorrow));
1741         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1742 
1743         assertTrue(afterNow.isDisjointWith(beforeYesterday));
1744         assertTrue(afterNow.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1745         assertFalse(afterNow.isDisjointWith(afterYesterday));
1746         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1747 
1748         // >=
1749         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeNow));
1750         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
1751         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterNow));
1752         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
1753 
1754         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeTheDayAfterTomorrow));
1755         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1756         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterTheDayAfterTomorrow));
1757         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1758 
1759         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeYesterday));
1760         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1761         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterYesterday));
1762         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameDayAsYesterday));
1763 
1764         ////////////////////////////////////////
1765         // Negated
1766         ////////////////////////////////////////
1767 
1768         // <
1769         assertTrue(beforeNow.isDisjointWith(not(beforeNow)));
1770         assertTrue(beforeNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1771         assertFalse(beforeNow.isDisjointWith(not(afterNow)));
1772         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1773 
1774         assertTrue(not(beforeNow).isDisjointWith(beforeNow));
1775         assertFalse(not(beforeNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
1776         assertFalse(not(beforeNow).isDisjointWith(afterNow));
1777         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
1778 
1779         assertFalse(not(beforeNow).isDisjointWith(not(beforeNow)));
1780         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1781         assertFalse(not(beforeNow).isDisjointWith(not(afterNow)));
1782         assertTrue(not(beforeNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1783 
1784 
1785         assertTrue(beforeNow.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1786         assertTrue(beforeNow.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1787         assertFalse(beforeNow.isDisjointWith(not(afterTheDayAfterTomorrow)));
1788         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1789 
1790         assertFalse(not(beforeNow).isDisjointWith(beforeTheDayAfterTomorrow));
1791         assertFalse(not(beforeNow).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1792         assertFalse(not(beforeNow).isDisjointWith(afterTheDayAfterTomorrow));
1793         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1794 
1795         assertFalse(not(beforeNow).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1796         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1797         assertFalse(not(beforeNow).isDisjointWith(not(afterTheDayAfterTomorrow)));
1798         assertFalse(not(beforeNow).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1799 
1800 
1801         assertFalse(beforeNow.isDisjointWith(not(beforeYesterday)));
1802         assertFalse(beforeNow.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1803         assertFalse(beforeNow.isDisjointWith(not(beforeYesterday)));
1804         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1805 
1806         assertTrue(not(beforeNow).isDisjointWith(beforeYesterday));
1807         assertTrue(not(beforeNow).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1808         assertFalse(not(beforeNow).isDisjointWith(afterYesterday));
1809         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1810 
1811         assertFalse(not(beforeNow).isDisjointWith(not(beforeYesterday)));
1812         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1813         assertTrue(not(beforeNow).isDisjointWith(not(afterYesterday)));
1814         assertTrue(not(beforeNow).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1815 
1816 
1817         // =<
1818         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeNow)));
1819         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1820         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterNow)));
1821         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1822 
1823         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeNow));
1824         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
1825         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterNow));
1826         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
1827 
1828         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeNow)));
1829         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1830         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterNow)));
1831         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1832 
1833 
1834         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1835         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1836         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterTheDayAfterTomorrow)));
1837         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1838 
1839         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeTheDayAfterTomorrow));
1840         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1841         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterTheDayAfterTomorrow));
1842         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1843 
1844         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1845         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1846         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterTheDayAfterTomorrow)));
1847         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1848 
1849 
1850         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeYesterday)));
1851         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1852         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterYesterday)));
1853         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1854 
1855         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeYesterday));
1856         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1857         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterYesterday));
1858         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1859 
1860         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeYesterday)));
1861         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1862         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterYesterday)));
1863         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1864 
1865 
1866         // >
1867         assertFalse(afterNow.isDisjointWith(not(beforeNow)));
1868         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1869         assertTrue(afterNow.isDisjointWith(not(afterNow)));
1870         assertTrue(afterNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1871 
1872         assertFalse(not(afterNow).isDisjointWith(beforeNow));
1873         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
1874         assertTrue(not(afterNow).isDisjointWith(afterNow));
1875         assertFalse(not(afterNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
1876 
1877         assertFalse(not(afterNow).isDisjointWith(not(beforeNow)));
1878         assertTrue(not(afterNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1879         assertFalse(not(afterNow).isDisjointWith(not(afterNow)));
1880         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1881 
1882 
1883         assertFalse(afterNow.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1884         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1885         assertFalse(afterNow.isDisjointWith(not(afterTheDayAfterTomorrow)));
1886         assertFalse(afterNow.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1887 
1888         assertFalse(not(afterNow).isDisjointWith(beforeTheDayAfterTomorrow));
1889         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1890         assertTrue(not(afterNow).isDisjointWith(afterTheDayAfterTomorrow));
1891         assertTrue(not(afterNow).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1892 
1893         assertTrue(not(afterNow).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1894         assertTrue(not(afterNow).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1895         assertFalse(not(afterNow).isDisjointWith(not(afterTheDayAfterTomorrow)));
1896         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1897 
1898 
1899         assertFalse(afterNow.isDisjointWith(not(beforeYesterday)));
1900         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1901         assertTrue(afterNow.isDisjointWith(not(afterYesterday)));
1902         assertTrue(afterNow.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1903 
1904         assertFalse(not(afterNow).isDisjointWith(beforeYesterday));
1905         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1906         assertFalse(not(afterNow).isDisjointWith(afterYesterday));
1907         assertFalse(not(afterNow).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1908 
1909         assertFalse(not(afterNow).isDisjointWith(not(beforeYesterday)));
1910         assertFalse(not(afterNow).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1911         assertFalse(not(afterNow).isDisjointWith(not(afterYesterday)));
1912         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1913 
1914 
1915         // >=
1916         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeNow)));
1917         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1918         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterNow)));
1919         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1920 
1921         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeNow));
1922         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
1923         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterNow));
1924         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
1925 
1926         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeNow)));
1927         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
1928         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterNow)));
1929         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
1930 
1931 
1932         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeTheDayAfterTomorrow)));
1933         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1934         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterTheDayAfterTomorrow)));
1935         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1936 
1937         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeTheDayAfterTomorrow));
1938         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameDayAsTheDayAfterTomorrow));
1939         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterTheDayAfterTomorrow));
1940         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameDayAsTheDayAfterTomorrow));
1941 
1942         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeTheDayAfterTomorrow)));
1943         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameDayAsTheDayAfterTomorrow)));
1944         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterTheDayAfterTomorrow)));
1945         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameDayAsTheDayAfterTomorrow)));
1946 
1947 
1948         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeYesterday)));
1949         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1950         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterYesterday)));
1951         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1952 
1953         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeYesterday));
1954         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameDayAsYesterday));
1955         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterYesterday));
1956         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameDayAsYesterday));
1957 
1958         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeYesterday)));
1959         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameDayAsYesterday)));
1960         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterYesterday)));
1961         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameDayAsYesterday)));
1962     }
1963 
1964 
1965     // TODO: assert these assertions
1966     @Test
1967     public void testComparableValueBoundSpecifications_Timestamp() {
1968         Date justBefore = new Date();
1969         try {
1970             sleep(50);
1971         } catch (InterruptedException e) {
1972             e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
1973         }
1974         Date now = new Date();
1975         try {
1976             sleep(50);
1977         } catch (InterruptedException e) {
1978             e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
1979         }
1980         Date justAfter = new Date();
1981 
1982         Specification<Date> beforeNow = before(now);
1983         Specification<Date> beforeOrAtTheSameTimeAsNow = beforeOrAtTheSameTimeAs(now);
1984         Specification<Date> afterNow = after(now);
1985         Specification<Date> afterOrAtTheSameTimeAsNow = afterOrAtTheSameTimeAs(now);
1986 
1987         Specification<Date> beforeJustAfter = before(justAfter);
1988         Specification<Date> beforeOrAtTheSameTimeAsJustAfter = beforeOrAtTheSameTimeAs(justAfter);
1989         Specification<Date> afterJustAfter = after(justAfter);
1990         Specification<Date> afterOrAtTheSameTimeAsJustAfter = afterOrAtTheSameTimeAs(justAfter);
1991 
1992         Specification<Date> beforeJustBefore = before(justBefore);
1993         Specification<Date> beforeOrAtTheSameTimeAsJustBefore = beforeOrAtTheSameTimeAs(justBefore);
1994         Specification<Date> afterJustBefore = after(justBefore);
1995         Specification<Date> afterOrAtTheSameTimeAsJustBefore = afterOrAtTheSameTimeAs(justBefore);
1996 
1997         ////////////////////////////////////////
1998         // Ordinary
1999         ////////////////////////////////////////
2000 
2001         // <
2002         assertFalse(beforeNow.isDisjointWith(beforeNow));
2003         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
2004         assertTrue(beforeNow.isDisjointWith(afterNow));
2005         assertTrue(beforeNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
2006 
2007         assertFalse(beforeNow.isDisjointWith(beforeJustAfter));
2008         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2009         assertTrue(beforeNow.isDisjointWith(afterJustAfter));
2010         assertTrue(beforeNow.isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2011 
2012         assertFalse(beforeNow.isDisjointWith(beforeJustBefore));
2013         assertFalse(beforeNow.isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2014         assertFalse(beforeNow.isDisjointWith(afterJustBefore));
2015         assertFalse(beforeNow.isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2016 
2017         // <=
2018         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeNow));
2019         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
2020         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterNow));
2021         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
2022 
2023         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeJustAfter));
2024         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2025         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterJustAfter));
2026         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2027 
2028         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeJustBefore));
2029         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2030         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterJustBefore));
2031         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2032 
2033         // >
2034         assertTrue(afterNow.isDisjointWith(beforeNow));
2035         assertTrue(afterNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
2036         assertFalse(afterNow.isDisjointWith(afterNow));
2037         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
2038 
2039         assertFalse(afterNow.isDisjointWith(beforeJustAfter));
2040         assertFalse(afterNow.isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2041         assertFalse(afterNow.isDisjointWith(afterJustAfter));
2042         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2043 
2044         assertTrue(afterNow.isDisjointWith(beforeJustBefore));
2045         assertTrue(afterNow.isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2046         assertFalse(afterNow.isDisjointWith(afterJustBefore));
2047         assertFalse(afterNow.isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2048 
2049         // >=
2050         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeNow));
2051         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsNow));
2052         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterNow));
2053         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsNow));
2054 
2055         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeJustAfter));
2056         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2057         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterJustAfter));
2058         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2059 
2060         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeJustBefore));
2061         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2062         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterJustBefore));
2063         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2064 
2065         ////////////////////////////////////////
2066         // Negated
2067         ////////////////////////////////////////
2068 
2069         // <
2070         assertTrue(beforeNow.isDisjointWith(not(beforeNow)));
2071         assertTrue(beforeNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2072         assertFalse(beforeNow.isDisjointWith(not(afterNow)));
2073         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2074 
2075         assertTrue(not(beforeNow).isDisjointWith(beforeNow));
2076         assertFalse(not(beforeNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
2077         assertFalse(not(beforeNow).isDisjointWith(afterNow));
2078         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
2079 
2080         assertFalse(not(beforeNow).isDisjointWith(not(beforeNow)));
2081         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2082         assertFalse(not(beforeNow).isDisjointWith(not(afterNow)));
2083         assertTrue(not(beforeNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2084 
2085 
2086         assertTrue(beforeNow.isDisjointWith(not(beforeJustAfter)));
2087         assertTrue(beforeNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2088         assertFalse(beforeNow.isDisjointWith(not(afterJustAfter)));
2089         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2090 
2091         assertFalse(not(beforeNow).isDisjointWith(beforeJustAfter));
2092         assertFalse(not(beforeNow).isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2093         assertFalse(not(beforeNow).isDisjointWith(afterJustAfter));
2094         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2095 
2096         assertFalse(not(beforeNow).isDisjointWith(not(beforeJustAfter)));
2097         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2098         assertFalse(not(beforeNow).isDisjointWith(not(afterJustAfter)));
2099         assertFalse(not(beforeNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2100 
2101 
2102         assertFalse(beforeNow.isDisjointWith(not(beforeJustBefore)));
2103         assertFalse(beforeNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2104         assertFalse(beforeNow.isDisjointWith(not(beforeJustBefore)));
2105         assertFalse(beforeNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2106 
2107         assertTrue(not(beforeNow).isDisjointWith(beforeJustBefore));
2108         assertTrue(not(beforeNow).isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2109         assertFalse(not(beforeNow).isDisjointWith(afterJustBefore));
2110         assertFalse(not(beforeNow).isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2111 
2112         assertFalse(not(beforeNow).isDisjointWith(not(beforeJustBefore)));
2113         assertFalse(not(beforeNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2114         assertTrue(not(beforeNow).isDisjointWith(not(afterJustBefore)));
2115         assertTrue(not(beforeNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2116 
2117 
2118         // =<
2119         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeNow)));
2120         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2121         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterNow)));
2122         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2123 
2124         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeNow));
2125         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
2126         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterNow));
2127         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
2128 
2129         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeNow)));
2130         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2131         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterNow)));
2132         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2133 
2134 
2135         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeJustAfter)));
2136         assertTrue(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2137         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterJustAfter)));
2138         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2139 
2140         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeJustAfter));
2141         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2142         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterJustAfter));
2143         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2144 
2145         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeJustAfter)));
2146         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2147         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterJustAfter)));
2148         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2149 
2150 
2151         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeJustBefore)));
2152         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2153         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterJustBefore)));
2154         assertFalse(beforeOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2155 
2156         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeJustBefore));
2157         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2158         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterJustBefore));
2159         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2160 
2161         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeJustBefore)));
2162         assertFalse(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2163         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterJustBefore)));
2164         assertTrue(not(beforeOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2165 
2166 
2167         // >
2168         assertFalse(afterNow.isDisjointWith(not(beforeNow)));
2169         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2170         assertTrue(afterNow.isDisjointWith(not(afterNow)));
2171         assertTrue(afterNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2172 
2173         assertFalse(not(afterNow).isDisjointWith(beforeNow));
2174         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
2175         assertTrue(not(afterNow).isDisjointWith(afterNow));
2176         assertFalse(not(afterNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
2177 
2178         assertFalse(not(afterNow).isDisjointWith(not(beforeNow)));
2179         assertTrue(not(afterNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2180         assertFalse(not(afterNow).isDisjointWith(not(afterNow)));
2181         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2182 
2183 
2184         assertFalse(afterNow.isDisjointWith(not(beforeJustAfter)));
2185         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2186         assertFalse(afterNow.isDisjointWith(not(afterJustAfter)));
2187         assertFalse(afterNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2188 
2189         assertFalse(not(afterNow).isDisjointWith(beforeJustAfter));
2190         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2191         assertTrue(not(afterNow).isDisjointWith(afterJustAfter));
2192         assertTrue(not(afterNow).isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2193 
2194         assertTrue(not(afterNow).isDisjointWith(not(beforeJustAfter)));
2195         assertTrue(not(afterNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2196         assertFalse(not(afterNow).isDisjointWith(not(afterJustAfter)));
2197         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2198 
2199 
2200         assertFalse(afterNow.isDisjointWith(not(beforeJustBefore)));
2201         assertFalse(afterNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2202         assertTrue(afterNow.isDisjointWith(not(afterJustBefore)));
2203         assertTrue(afterNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2204 
2205         assertFalse(not(afterNow).isDisjointWith(beforeJustBefore));
2206         assertFalse(not(afterNow).isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2207         assertFalse(not(afterNow).isDisjointWith(afterJustBefore));
2208         assertFalse(not(afterNow).isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2209 
2210         assertFalse(not(afterNow).isDisjointWith(not(beforeJustBefore)));
2211         assertFalse(not(afterNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2212         assertFalse(not(afterNow).isDisjointWith(not(afterJustBefore)));
2213         assertFalse(not(afterNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2214 
2215 
2216         // >=
2217         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeNow)));
2218         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2219         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterNow)));
2220         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2221 
2222         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeNow));
2223         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsNow));
2224         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterNow));
2225         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsNow));
2226 
2227         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeNow)));
2228         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsNow)));
2229         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterNow)));
2230         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsNow)));
2231 
2232 
2233         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeJustAfter)));
2234         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2235         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterJustAfter)));
2236         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2237 
2238         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeJustAfter));
2239         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsJustAfter));
2240         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterJustAfter));
2241         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsJustAfter));
2242 
2243         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeJustAfter)));
2244         assertTrue(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustAfter)));
2245         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterJustAfter)));
2246         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustAfter)));
2247 
2248 
2249         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeJustBefore)));
2250         assertFalse(afterOrAtTheSameTimeAsNow.isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2251         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterJustBefore)));
2252         assertTrue(afterOrAtTheSameTimeAsNow.isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2253 
2254         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeJustBefore));
2255         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(beforeOrAtTheSameTimeAsJustBefore));
2256         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterJustBefore));
2257         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(afterOrAtTheSameTimeAsJustBefore));
2258 
2259         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeJustBefore)));
2260         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(beforeOrAtTheSameTimeAsJustBefore)));
2261         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterJustBefore)));
2262         assertFalse(not(afterOrAtTheSameTimeAsNow).isDisjointWith(not(afterOrAtTheSameTimeAsJustBefore)));
2263     }
2264 }