linked-list.spec.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 { LinkedList } from '../linked-list'
  7. describe('linked list', () => {
  8. function toArray<T>(list: LinkedList<T>) {
  9. const ret: T[] = [];
  10. for (let t = list.first; !!t; t = t.next) {
  11. ret[ret.length] = t.value;
  12. }
  13. return ret;
  14. }
  15. function create<T>(xs: T[]) {
  16. const list = LinkedList<T>();
  17. for (const x of xs) list.addLast(x);
  18. return list;
  19. }
  20. it('add', () => {
  21. const list = LinkedList<number>();
  22. list.addFirst(1);
  23. list.addLast(2);
  24. list.addFirst(3);
  25. list.addFirst(4);
  26. list.addLast(5);
  27. expect(toArray(list)).toEqual([4, 3, 1, 2, 5]);
  28. expect(list.count).toBe(5);
  29. });
  30. it ('remove', () => {
  31. const list = create([1, 2, 3, 4]);
  32. let fst = list.removeFirst();
  33. expect(fst).toBe(1);
  34. expect(list.last!.value).toBe(4);
  35. expect(list.count).toBe(3);
  36. expect(toArray(list)).toEqual([2, 3, 4]);
  37. let last = list.removeLast();
  38. expect(last).toBe(4);
  39. expect(list.last!.value).toBe(3);
  40. expect(list.count).toBe(2);
  41. expect(toArray(list)).toEqual([2, 3]);
  42. let n3 = list.find(3)!;
  43. list.remove(n3);
  44. expect(list.first!.value).toBe(2);
  45. expect(list.last!.value).toBe(2);
  46. expect(list.count).toBe(1);
  47. expect(toArray(list)).toEqual([2]);
  48. list.removeFirst();
  49. expect(list.first).toBe(null);
  50. expect(list.last).toBe(null);
  51. expect(list.count).toBe(0);
  52. expect(toArray(list)).toEqual([]);
  53. })
  54. });