interval.spec.ts 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { Interval } from '../interval';
  7. describe('interval', () => {
  8. function testI(name: string, a: Interval, b: Interval) {
  9. it(name, () => expect(Interval.areEqual(a, b)).toBe(true));
  10. }
  11. function test(name: string, a: any, b: any) {
  12. it(name, () => expect(a).toEqual(b));
  13. }
  14. const e = Interval.Empty;
  15. const r05 = Interval.ofRange(0, 5);
  16. const se05 = Interval.ofBounds(0, 5);
  17. test('size', Interval.size(e), 0);
  18. test('size', Interval.size(r05), 6);
  19. test('size', Interval.size(se05), 5);
  20. test('min/max', [Interval.min(e), Interval.max(e)], [0, -1]);
  21. test('min/max', [Interval.min(r05), Interval.max(r05)], [0, 5]);
  22. test('min/max', [Interval.min(se05), Interval.max(se05)], [0, 4]);
  23. test('start/end', [Interval.start(e), Interval.end(e)], [0, 0]);
  24. test('start/end', [Interval.start(r05), Interval.end(r05)], [0, 6]);
  25. test('start/end', [Interval.start(se05), Interval.end(se05)], [0, 5]);
  26. test('has', Interval.has(e, 5), false);
  27. test('has', Interval.has(r05, 5), true);
  28. test('has', Interval.has(r05, 6), false);
  29. test('has', Interval.has(r05, -1), false);
  30. test('has', Interval.has(se05, 5), false);
  31. test('has', Interval.has(se05, 4), true);
  32. test('indexOf', Interval.indexOf(e, 5), -1);
  33. test('indexOf', Interval.indexOf(r05, 5), 5);
  34. test('indexOf', Interval.indexOf(r05, 6), -1);
  35. test('getAt', Interval.getAt(r05, 5), 5);
  36. test('areEqual', Interval.areEqual(r05, se05), false);
  37. test('areIntersecting1', Interval.areIntersecting(r05, se05), true);
  38. test('areIntersecting2', Interval.areIntersecting(r05, e), false);
  39. test('areIntersecting3', Interval.areIntersecting(e, r05), false);
  40. test('areIntersecting4', Interval.areIntersecting(e, e), true);
  41. test('areIntersecting5', Interval.areIntersecting(Interval.ofRange(0, 5), Interval.ofRange(-4, 3)), true);
  42. test('areIntersecting6', Interval.areIntersecting(Interval.ofRange(0, 5), Interval.ofRange(-4, -3)), false);
  43. test('areIntersecting7', Interval.areIntersecting(Interval.ofRange(0, 5), Interval.ofRange(1, 2)), true);
  44. test('areIntersecting8', Interval.areIntersecting(Interval.ofRange(0, 5), Interval.ofRange(3, 6)), true);
  45. test('isSubInterval', Interval.isSubInterval(Interval.ofRange(0, 5), Interval.ofRange(3, 6)), false);
  46. test('isSubInterval', Interval.isSubInterval(Interval.ofRange(0, 5), Interval.ofRange(3, 5)), true);
  47. testI('intersect', Interval.intersect(Interval.ofRange(0, 5), Interval.ofRange(-4, 3)), Interval.ofRange(0, 3));
  48. testI('intersect1', Interval.intersect(Interval.ofRange(0, 5), Interval.ofRange(1, 3)), Interval.ofRange(1, 3));
  49. testI('intersect2', Interval.intersect(Interval.ofRange(0, 5), Interval.ofRange(3, 5)), Interval.ofRange(3, 5));
  50. testI('intersect3', Interval.intersect(Interval.ofRange(0, 5), Interval.ofRange(-4, -3)), Interval.Empty);
  51. test('predIndex1', Interval.findPredecessorIndex(r05, 5), 5);
  52. test('predIndex2', Interval.findPredecessorIndex(r05, -1), 0);
  53. test('predIndex3', Interval.findPredecessorIndex(r05, 6), 6);
  54. test('predIndexInt', Interval.findPredecessorIndexInInterval(r05, 0, Interval.ofRange(2, 3)), 2);
  55. test('predIndexInt1', Interval.findPredecessorIndexInInterval(r05, 4, Interval.ofRange(2, 3)), 4);
  56. test('predIndexInt2', Interval.findPredecessorIndex(Interval.ofRange(3, 10), 5), 2);
  57. test('predIndexInt3', Interval.findPredecessorIndexInInterval(Interval.ofRange(3, 10), 5, Interval.ofRange(2, 6)), 2);
  58. testI('findRange', Interval.findRange(r05, 2, 3), Interval.ofRange(2, 3));
  59. test('intersectionSize1', Interval.intersectionSize(Interval.ofRange(0, 5), Interval.ofRange(0, 5)), 6);
  60. test('intersectionSize2', Interval.intersectionSize(Interval.ofRange(0, 5), Interval.ofRange(1, 2)), 2);
  61. test('intersectionSize3', Interval.intersectionSize(Interval.ofRange(1, 2), Interval.ofRange(0, 5)), 2);
  62. test('intersectionSize4', Interval.intersectionSize(Interval.ofRange(0, 5), Interval.ofRange(3, 8)), 3);
  63. test('intersectionSize5', Interval.intersectionSize(Interval.ofRange(0, 5), Interval.ofRange(6, 8)), 0);
  64. });