Skip to content

Commit f240e53

Browse files
author
WilliamHe
committed
Added unit test for problem #2.
1 parent 316430e commit f240e53

File tree

2 files changed

+156
-0
lines changed

2 files changed

+156
-0
lines changed

test/spec/2.add2Nums.spec.js

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
/************************************************************
2+
* Problem: https://leetcode.com/problems/add-two-numbers/
3+
You are given two linked lists representing two non-negative numbers.
4+
The digits are stored in reverse order and each of their nodes contain a single digit.
5+
Add the two numbers and return it as a linked list.
6+
7+
* Example:
8+
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
9+
Output: 7 -> 0 -> 8
10+
11+
* Definition for singly-linked list:
12+
function ListNode(val) {
13+
this.val = val;
14+
this.next = null;
15+
}
16+
************************************************************/
17+
18+
describe('Problem 2 - Add two non-negative numbers represented by two linked lists into a number represented by a linked list too', function() {
19+
beforeEach(function() {
20+
var l1, l2, result;
21+
});
22+
23+
// # Helper tests
24+
describe('Helper method tests', function() {
25+
it('arrToLList return (2 -> 4 -> 3) for [2,4,3]', function() {
26+
var testArr = [2, 4, 3];
27+
28+
result = add2Nums.arrToLList(testArr);
29+
expect(result instanceof ListNode).toBeTruthy();
30+
expect(result.val).toEqual(2);
31+
expect(result.next.val).toEqual(4);
32+
expect(result.next.next.val).toEqual(3);
33+
});
34+
35+
it('lListToArr return [2,4,3] for (2 -> 4 -> 3)', function() {
36+
var testlList = new ListNode(2);
37+
testlList.next = new ListNode(4);
38+
testlList.next.next = new ListNode(3);
39+
40+
result = add2Nums.lListToArr(testlList);
41+
expect(result).toEqual([2, 4, 3]);
42+
});
43+
});
44+
45+
46+
// # Solution 1: brutal loop tests
47+
describe('Solution 1: Intro a stack helper to reversely insert each node into linklist', function() {
48+
it('return right sum for 2 nums with same digits num that has not carry num: [2, 4, 3]+[5, 2, 5] => [7, 6, 8]', function() {
49+
var l1, l2, result;
50+
l1 = add2Nums.arrToLList([2, 4, 3]);
51+
l2 = add2Nums.arrToLList([5, 2, 5]);
52+
53+
result = add2Nums.stackHelper(l1, l2);
54+
expect(add2Nums.lListToArr(result)).toEqual([7, 6, 8]);
55+
56+
});
57+
58+
it('return right sum for 2 nums with same digits num that has carry num: [2, 4, 3]+[5, 6, 4] => [7, 0, 8]', function() {
59+
var l1, l2, result;
60+
l1 = add2Nums.arrToLList([2, 4, 3]);
61+
l2 = add2Nums.arrToLList([5, 6, 4]);
62+
63+
result = add2Nums.stackHelper(l1, l2);
64+
expect(add2Nums.lListToArr(result)).toEqual([7, 0, 8]);
65+
});
66+
67+
it('return sum should exceeds max input digit num limit with carry num: [2, 4, 9]+[5, 9] => [7, 3, 0, 1]', function() {
68+
var l1, l2, result;
69+
l1 = add2Nums.arrToLList([2, 4, 9]);
70+
l2 = add2Nums.arrToLList([5, 9]);
71+
72+
result = add2Nums.stackHelper(l1, l2);
73+
expect(add2Nums.lListToArr(result)).toEqual([7, 3, 0, 1]);
74+
});
75+
76+
it('return right sum for 2 nums with different digits num: [6, 9, 3]+[9] => [5, 0, 4]', function() {
77+
var l1, l2, result;
78+
l1 = add2Nums.arrToLList([6, 9, 3]);
79+
l2 = add2Nums.arrToLList([9]);
80+
81+
result = add2Nums.stackHelper(l1, l2);
82+
expect(add2Nums.lListToArr(result)).toEqual([5, 0, 4]);
83+
});
84+
85+
});
86+
87+
88+
// # Solution 2: js reference. Utilized js object reference change feature
89+
describe('Solution 2: js reference. Utilized js object reference change feature', function() {
90+
it('return right sum for 2 nums with same digits num that has not carry num: [2, 4, 3]+[5, 2, 5] => [7, 6, 8]', function() {
91+
var l1, l2, result;
92+
l1 = add2Nums.arrToLList([2, 4, 3]);
93+
l2 = add2Nums.arrToLList([5, 2, 5]);
94+
95+
result = add2Nums.reference(l1, l2);
96+
expect(add2Nums.lListToArr(result)).toEqual([7, 6, 8]);
97+
98+
});
99+
100+
it('return right sum for 2 nums with same digits num that has carry num: [2, 4, 3]+[5, 6, 4] => [7, 0, 8]', function() {
101+
var l1, l2, result;
102+
l1 = add2Nums.arrToLList([2, 4, 3]);
103+
l2 = add2Nums.arrToLList([5, 6, 4]);
104+
105+
result = add2Nums.reference(l1, l2);
106+
expect(add2Nums.lListToArr(result)).toEqual([7, 0, 8]);
107+
});
108+
109+
it('return sum should exceeds max input digit num limit with carry num: [2, 4, 9]+[5, 9] => [7, 3, 0, 1]', function() {
110+
var l1, l2, result;
111+
l1 = add2Nums.arrToLList([2, 4, 9]);
112+
l2 = add2Nums.arrToLList([5, 9]);
113+
114+
result = add2Nums.reference(l1, l2);
115+
expect(add2Nums.lListToArr(result)).toEqual([7, 3, 0, 1]);
116+
});
117+
118+
it('return right sum for 2 nums with different digits num: [6, 9, 3]+[9] => [5, 0, 4]', function() {
119+
var l1, l2, result;
120+
l1 = add2Nums.arrToLList([6, 9, 3]);
121+
l2 = add2Nums.arrToLList([9]);
122+
123+
result = add2Nums.reference(l1, l2);
124+
expect(add2Nums.lListToArr(result)).toEqual([5, 0, 4]);
125+
});
126+
127+
});
128+
129+
130+
});

test/spec/helpers/2.add2Nums.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
add2Nums.arrToLList = function(arr) {
2+
var lastNode, newNode;
3+
while (arr.length > 0) {
4+
newNode = new ListNode(arr.pop());
5+
6+
if (lastNode) {
7+
newNode.next = lastNode;
8+
}
9+
lastNode = newNode;
10+
}
11+
12+
return newNode;
13+
};
14+
15+
add2Nums.lListToArr = function(lList) {
16+
var curNode = lList,
17+
arr = [];
18+
19+
while (curNode && typeof curNode.val === "number") {
20+
arr.push(curNode.val);
21+
22+
curNode = curNode.next;
23+
}
24+
25+
return arr;
26+
};

0 commit comments

Comments
 (0)