From bd2ecc569962b044844b339aa4206533e7e9283a Mon Sep 17 00:00:00 2001 From: Revone Date: Sat, 4 Nov 2023 01:21:30 +0800 Subject: [PATCH] [benchmark] enriched the utils of performance test. enriched the performance test cases --- CHANGELOG.md | 2 +- README.md | 763 ++- package.json | 7 +- test/config.ts | 2 +- .../binary-tree/avl-tree.test.ts | 30 +- .../binary-tree/binary-tree.test.ts | 42 +- .../data-structures/binary-tree/bst.test.ts | 30 +- .../graph/directed-graph.test.ts | 49 + .../data-structures/heap/heap.test.ts | 4 +- .../linked-list/doubly-linked-list.test.ts | 6 +- .../linked-list/singly-linked-list.test.ts | 4 +- .../priority-queue/max-priority-queue.test.ts | 6 +- .../data-structures/queue/deque.test.ts | 4 +- .../data-structures/queue/queue.test.ts | 4 +- .../data-structures/trie/trie.test.ts | 22 + test/performance/reportor.ts | 45 +- .../binary-tree/rb-tree.test.ts | 6 +- test/unit/data-structures/heap/heap.test.ts | 9 +- .../priority-queue/priority-queue.test.ts | 4 +- test/utils/array.ts | 5517 ++++++++++++++++- test/utils/big-o.ts | 8 +- test/utils/console.ts | 1 + test/utils/index.ts | 1 + test/utils/number.ts | 2 +- test/utils/string.ts | 1 + 25 files changed, 6224 insertions(+), 345 deletions(-) create mode 100644 test/utils/string.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 67e5894..1c6da92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. - [Semantic Versioning](https://semver.org/spec/v2.0.0.html) - [`auto-changelog`](https://github.com/CookPete/auto-changelog) -## [v1.41.3](https://github.com/zrwusa/data-structure-typed/compare/v1.35.0...main) (upcoming) +## [v1.41.4](https://github.com/zrwusa/data-structure-typed/compare/v1.35.0...main) (upcoming) ### Changes diff --git a/README.md b/README.md index 150c78d..d32b2f3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Data Structures of Javascript & TypeScript. -Do you envy C++ with [std](), Python with [collections](), and Java with [java.util]() ? Well, no need to envy anymore! JavaScript and TypeScript now have [data-structure-typed](). +Do you envy C++ with [STL](), Python with [collections](), and Java with [java.util]() ? Well, no need to envy anymore! JavaScript and TypeScript now have [data-structure-typed](). Now you can use this library in Node.js and browser environments in CommonJS(require export.modules = ), ESModule(import export), Typescript(import export), UMD(var Queue = dataStructureTyped.Queue) @@ -432,7 +432,7 @@ Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id) // ['A', 'B', 'D Data Structure Data Structure Typed - C++ std + C++ STL java.util Python collections @@ -653,270 +653,503 @@ By strictly adhering to object-oriented design (BinaryTree -> BST -> AVLTree -> inherit the existing data structures to implement the customized ones you need. Object-oriented design stands as the optimal approach to data structure design. -## Complexities - -### performance of Big O - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Big O NotationTypeComputations for 10 elementsComputations for 100 elementsComputations for 1000 elements
O(1)Constant111
O(log N)Logarithmic369
O(N)Linear101001000
O(N log N)n log(n)306009000
O(N^2)Quadratic100100001000000
O(2^N)Exponential10241.26e+291.07e+301
O(N!)Factorial36288009.3e+1574.02e+2567
- -### Data Structure Complexity - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Data StructureAccessSearchInsertionDeletionComments
Array1nnn
Stacknn11
Queuenn11
Linked Listnn1n
Hash Table-nnnIn case of perfect hash function costs would be O(1)
Binary Search TreennnnIn case of balanced tree costs would be O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Treelog(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-False positives are possible while searching
- -### Sorting Complexity - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameBestAverageWorstMemoryStableComments
Bubble sortnn2n21Yes
Insertion sortnn2n21Yes
Selection sortn2n2n21No
Heap sortn log(n)n log(n)n log(n)1No
Merge sortn log(n)n log(n)n log(n)nYes
Quick sortn log(n)n log(n)n2log(n)NoQuicksort is usually done in-place with O(log(n)) stack space
Shell sortn log(n)depends on gap sequencen (log(n))21No
Counting sortn + rn + rn + rn + rYesr - biggest number in array
Radix sortn * kn * kn * kn + kYesk - length of longest key
- ## Benchmark +
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.18458.66240.002.36e-5
1000 add & delete randomly11.0790.3350.011.53e-4
1000 addMany2.89346.20180.002.52e-5
1000 get24.1941.3430.021.67e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly12.8877.6540.013.26e-4
1000 add & delete randomly15.7163.6540.021.42e-4
1000 addMany10.6494.0250.011.79e-4
1000 get24.0641.5630.023.48e-4
1000 dfs72.2113.8510.070.00
1000 bfs54.7418.2710.054.33e-4
1000 morris37.2626.8420.040.00
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.16462.35240.001.86e-5
1000 add & delete randomly13.5473.8750.013.91e-4
1000 addMany2.12472.08250.002.86e-5
1000 get25.2639.6030.031.83e-4
+
+
directed-graph
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 addVertex0.109972.075091.00e-41.01e-6
1000 addEdge6.12163.3590.014.88e-4
1000 getVertex0.052.17e+410994.60e-54.25e-7
1000 getEdge23.2043.1130.020.00
tarjan211.964.7210.210.01
tarjan all214.884.6510.210.00
topologicalSort173.465.7610.170.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342922.291493.42e-42.94e-6
1000 fib add & pop3.90256.37140.004.30e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift209.624.7710.210.05
1000000 unshift & shift171.615.8310.170.04
1000 insertBefore0.033.19e+419083.13e-54.47e-5
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.75571.57300.002.44e-5
1000 insertBefore2.31433.19230.005.11e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.3388.3050.011.41e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push195.145.1210.200.04
1000000 shift26.2438.1030.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push44.3022.5720.040.01
1000000 push & shift79.5412.5710.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push56.0017.8610.060.00
100000 getWords101.669.8410.100.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.17460.58240.002.54e-5
1000 add & delete randomly11.2389.0550.011.99e-4
1000 addMany2.87348.16180.003.30e-5
1000 get24.5340.7730.022.11e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly13.3974.6950.019.80e-4
1000 add & delete randomly16.2861.4440.029.38e-4
1000 addMany10.9491.4450.015.48e-4
1000 get24.3541.0630.020.00
1000 dfs74.5113.4210.070.00
1000 bfs56.9517.5610.060.00
1000 morris38.5925.9120.040.00
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.03493.40260.006.59e-5
1000 add & delete randomly12.8777.7050.015.53e-4
1000 addMany2.14466.33250.001.21e-4
1000 get25.9338.5620.039.04e-4
+
+
directed-graph
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 addVertex0.119341.594871.07e-44.65e-6
1000 addEdge0.011.53e+584596.55e-68.65e-7
1000 getVertex5.06e-51.98e+71e+65.06e-82.36e-9
1000 getEdge0.024.40e+423562.27e-51.22e-6
1000 tarjan [needArticulationPoints]204.764.8810.200.01
1000 tarjan all204.674.8910.200.00
1000 topologicalSort168.385.9410.170.01
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342913.641493.43e-45.05e-6
1000 fib add & pop3.93254.43130.005.15e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift227.994.3910.230.07
1000000 unshift & shift176.475.6710.180.03
1000 insertBefore0.033.72e+419062.69e-53.49e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.78562.61300.006.55e-5
1000 insertBefore2.35425.30220.008.54e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.7385.2850.017.65e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push227.874.3910.230.07
1000000 shift25.0839.8830.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push43.1023.2020.040.01
1000000 push & shift88.4111.3110.090.04
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push50.4119.8420.050.00
100000 getWords103.019.7110.100.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.28437.87230.001.95e-4
1000 add & delete randomly11.1689.6250.011.41e-4
1000 addMany3.00333.18170.002.62e-5
1000 get24.2741.2030.021.60e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly12.9477.2850.012.22e-4
1000 add & delete randomly15.8563.1140.022.55e-4
1000 addMany10.6493.9550.013.08e-4
1000 get23.6742.2430.021.79e-4
1000 dfs72.1413.8610.075.13e-4
1000 bfs54.7418.2710.054.80e-4
1000 morris37.0427.0020.042.48e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.09477.97250.001.43e-5
1000 add & delete randomly12.9277.4240.012.78e-4
1000 addMany2.20454.39240.003.52e-5
1000 get25.1839.7130.031.71e-4
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342914.731493.43e-48.46e-6
1000 fib add & pop3.92254.88140.006.46e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift194.965.1310.190.04
1000000 unshift & shift154.706.4610.150.02
1000 insertBefore0.033.71e+419212.70e-56.61e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.77565.65300.004.37e-5
1000 insertBefore2.32431.45220.004.01e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.6785.6750.013.92e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push212.304.7110.210.04
1000000 shift25.1739.7330.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push44.6522.3920.040.01
1000000 push & shift80.6612.4010.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push64.8115.4310.060.01
100000 getWords126.977.8810.130.02
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.10475.11250.002.06e-5
1000 add & delete randomly11.1489.7850.012.22e-4
1000 addMany2.89346.01180.007.29e-5
1000 get24.3541.0730.021.56e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly12.8078.1150.017.83e-5
1000 add & delete randomly15.6363.9740.029.29e-5
1000 addMany10.5894.5350.011.21e-4
1000 get23.6342.3130.021.97e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.31433.05220.005.43e-5
1000 add & delete randomly13.9071.9240.013.66e-4
1000 addMany2.13469.94250.004.34e-5
1000 get25.9538.5420.036.68e-4
1000 dfs73.6813.5710.070.00
1000 bfs59.2916.8710.060.01
1000 morris37.8426.4320.040.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342913.151493.43e-42.85e-6
1000 fib add & pop3.91255.50140.006.06e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift204.444.8910.200.03
1000000 unshift & shift153.336.5210.150.03
1000 insertBefore0.033.79e+419242.64e-53.02e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.77564.14300.005.34e-5
1000 insertBefore2.32431.40220.007.10e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.3488.1850.011.37e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push194.395.1410.190.04
1000000 shift25.4539.2930.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push42.4323.5720.040.01
1000000 push & shift79.4712.5810.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push54.4118.3810.050.00
100000 getWords103.789.6410.100.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.13468.81240.001.71e-5
1000 add & delete randomly11.7285.3650.010.00
1000 addMany2.54393.52200.002.31e-5
1000 get24.4140.9730.022.33e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add66.2515.0930.070.00
1000 delete22.0045.4410560.020.04
1000 addMany10.9591.3350.010.00
1000 get33.9529.4520.030.00
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.13468.52250.001.38e-4
1000 delete randomly0.051.97e+410425.08e-52.42e-6
1000 addMany balanced2.66375.97200.001.42e-4
1000 get57.2517.4710.060.01
1000 dfs176.135.6810.180.01
1000 bfs139.297.1810.140.01
1000 morris95.2310.5010.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342906.831483.44e-44.91e-6
1000 fib add & pop3.94253.80140.008.47e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift192.845.1910.190.04
1000000 unshift & shift172.255.8110.170.06
1000 insertBefore0.033.57e+418932.80e-51.34e-6
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.81553.05300.001.26e-4
1000 insertBefore2.33428.33220.005.84e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.6485.8950.014.05e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push187.655.3310.190.03
1000000 shift25.4839.2430.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push44.5122.4720.040.01
1000000 push & shift81.1212.3310.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push65.1915.3420.070.01
100000 getWords117.428.5210.120.02
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.21453.16230.002.00e-5
1000 add & delete randomly10.9691.2750.011.89e-4
1000 addMany2.61383.69200.007.84e-5
1000 get25.1339.7930.037.48e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add67.5014.8230.070.00
1000 delete23.9241.8010480.020.04
1000 addMany10.8292.4250.016.56e-4
1000 get33.2330.1020.034.01e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly1.96511.38270.003.28e-5
1000 delete randomly0.052.00e+410495.01e-55.38e-6
1000 addMany balanced2.66375.73200.001.64e-4
1000 get54.3118.4110.050.00
1000 dfs168.175.9510.170.00
1000 bfs147.476.7810.150.02
1000 morris104.119.6010.100.01
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.352832.051493.53e-45.74e-5
1000 fib add & pop4.02248.85140.005.56e-4
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift211.234.7310.210.03
1000000 unshift & shift180.125.5510.180.04
1000 insertBefore0.033.40e+418332.94e-54.38e-6
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.82550.20300.001.53e-4
1000 insertBefore2.37421.75220.002.85e-4
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.9883.4450.010.00
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push217.794.5910.220.02
1000000 shift27.9835.7430.030.01
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push44.7222.3620.040.01
1000000 push & shift78.6412.7210.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push59.2416.8810.060.01
100000 getWords110.049.0910.110.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.60384.09200.002.17e-5
1000 add & delete randomly11.5086.9650.011.09e-4
1000 addMany2.96337.68180.002.41e-5
1000 get24.3341.1030.021.87e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add66.6515.0030.070.00
1000 delete22.9443.5910480.020.04
1000 addMany10.4695.5950.011.06e-4
1000 get33.1630.1520.033.69e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.57388.55200.002.56e-5
1000 delete randomly0.052.05e+410774.87e-58.43e-7
1000 addMany balanced3.08324.33170.003.01e-5
1000 get54.0218.5110.050.00
1000 dfs169.215.9110.170.00
1000 bfs136.057.3510.140.00
1000 morris90.6011.0410.090.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342924.081493.42e-43.76e-6
1000 fib add & pop3.88258.00140.004.57e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift200.135.0010.200.04
1000000 unshift & shift151.886.5810.150.02
1000 insertBefore0.033.78e+419212.65e-54.68e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.77565.88300.004.84e-5
1000 insertBefore2.32431.01230.007.27e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.3987.8050.011.70e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push197.165.0710.200.03
1000000 shift25.3039.5230.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push43.5922.9420.040.01
1000000 push & shift79.4212.5910.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push54.9818.1910.050.00
100000 getWords122.288.1810.120.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.27440.05230.008.11e-5
1000 delete randomly0.051.85e+49485.40e-56.80e-7
1000 addMany2.99334.92180.003.05e-5
1000 get53.0918.8410.059.51e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add67.1114.9030.070.00
1000 delete22.1445.1610710.020.04
1000 addMany8.95111.7560.012.26e-4
1000 get31.5131.7320.033.98e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add randomly2.68373.07240.000.00
1000 delete randomly0.051.96e+410565.11e-53.03e-6
1000 addMany balanced2.68373.77200.006.55e-5
1000 get55.4118.0510.060.00
1000 dfs176.115.6810.180.00
1000 bfs140.037.1410.140.00
1000 morris102.459.7610.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 add & pop0.342916.001503.43e-41.26e-5
1000 fib add & pop4.62216.38140.000.00
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 unshift197.235.0710.200.03
1000000 unshift & shift162.696.1510.160.03
1000 insertBefore0.033.63e+419072.76e-57.08e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000 push & pop1.82549.57300.001.65e-4
1000 insertBefore2.33430.03220.005.59e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
10000 refill & poll11.4087.7150.011.55e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push194.905.1310.190.04
1000000 shift24.8340.2730.020.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
1000000 push41.7123.9720.040.00
1000000 push & shift78.7212.7010.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
100000 push53.8818.5610.059.89e-4
100000 getWords98.8210.1210.100.00
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.10475.20250.002.33e-5
delete 1000 randomly0.051.87e+49475.35e-53.85e-7
addMany 10002.89345.59180.002.62e-5
get 100052.0219.2220.059.28e-4
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100066.5815.0230.070.01
delete 100025.3439.468490.030.04
addMany 10008.78113.8560.019.87e-5
get 100031.2731.9820.032.82e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.15465.12240.001.88e-5
delete 1000 randomly0.052.08e+410914.80e-55.57e-7
addMany 1000 balanced2.51397.88210.003.54e-5
get 100056.5717.6810.060.00
dfs 1000170.585.8610.170.00
bfs 1000139.697.1610.140.00
morris 100097.3610.2710.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342923.161493.42e-44.01e-6
fib add & pop 10003.88257.61140.004.95e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000193.545.1710.190.03
unshift & shift 1000000164.746.0710.160.03
insertBefore 10000.033.72e+419082.69e-57.19e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.77565.06290.008.16e-5
insertBefore 10002.31433.08220.005.99e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 1000011.4087.7350.011.86e-4
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000210.404.7510.210.05
shift 100000025.1239.8030.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.1123.7520.040.00
push & shift 100000078.8212.6910.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 10000052.7218.9710.050.00
getWords 10000098.3610.1710.100.00
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.07482.88250.002.62e-5
delete 1000 randomly0.061.73e+49225.77e-55.23e-6
addMany 10002.87348.56180.002.76e-5
get 100052.0819.2020.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100067.6514.7830.070.00
delete 100023.3842.7810830.020.04
addMany 10008.81113.5560.018.24e-5
get 100032.1131.1520.034.49e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.15464.93240.002.37e-4
delete 1000 randomly0.052.08e+410624.81e-55.51e-7
addMany 1000 balanced2.51397.64210.005.50e-5
get 100057.8717.2810.060.01
dfs 1000168.095.9510.177.76e-4
bfs 1000143.736.9610.140.00
morris 100096.9710.3110.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342927.211493.42e-43.55e-6
fib add & pop 10003.91255.44140.001.98e-4
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000196.835.0810.200.02
unshift & shift 1000000152.506.5610.150.02
insertBefore 10000.033.78e+419222.65e-52.96e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.76569.49290.005.19e-5
insertBefore 10002.30435.27220.004.67e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001880.370.5311.880.06
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000210.284.7610.210.03
shift 100000024.4240.9430.020.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000041.7423.9620.040.00
push & shift 100000081.4812.2710.080.01
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 10000057.4417.4110.060.00
getWords 100000129.577.7210.130.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.09477.46250.002.54e-5
delete 1000 randomly0.061.78e+49195.61e-51.46e-6
addMany 10002.96337.92180.007.78e-5
get 100054.2518.4310.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100067.8014.7530.070.00
delete 100022.7943.8810940.020.04
addMany 10008.83113.2460.011.42e-4
get 100030.5232.7620.030.00
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.18459.02240.007.16e-5
delete 1000 randomly0.052.06e+410834.85e-51.15e-6
addMany 1000 balanced2.53394.85210.006.11e-5
get 100056.5117.7010.060.00
dfs 1000173.685.7610.170.00
bfs 1000156.936.3710.160.04
morris 100096.7110.3410.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.352876.021493.48e-44.35e-5
fib add & pop 10004.09244.66140.005.12e-4
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000210.784.7410.210.05
unshift & shift 1000000161.096.2110.160.03
insertBefore 10000.033.73e+419232.68e-58.43e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.85539.24300.002.91e-4
insertBefore 10002.35424.68220.002.11e-4
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001804.270.5511.800.02
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000221.644.5110.220.02
shift 100000025.7738.8030.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.2523.6720.040.01
push & shift 100000079.5312.5710.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 10000054.3318.4110.050.00
getWords 10000096.3810.3810.100.01
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.14468.25240.005.65e-5
delete 1000 randomly0.061.79e+49215.59e-52.02e-6
addMany 10002.91344.07180.006.78e-5
get 100051.8719.2820.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100068.3214.6430.070.01
delete 100023.8441.9510640.020.04
addMany 10008.88112.6860.011.46e-4
get 100031.5031.7420.033.96e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.00500.66260.007.44e-5
delete 1000 randomly0.052.03e+410544.94e-51.86e-6
addMany 1000 balanced2.51397.65210.004.80e-5
get 100056.0917.8310.060.00
dfs 1000174.025.7510.170.00
bfs 1000141.067.0910.140.00
morris 100092.3610.8310.090.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342917.161493.43e-45.21e-6
fib add & pop 10003.89256.80140.009.36e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000190.625.2510.190.03
unshift & shift 1000000168.365.9410.170.03
insertBefore 10000.033.37e+418832.97e-56.52e-6
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.85541.77300.003.02e-4
insertBefore 10002.32431.07220.005.25e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001913.830.5211.910.10
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000216.624.6210.220.01
shift 100000027.1136.8830.030.01
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.1423.7320.040.00
push & shift 100000078.6412.7210.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 10000.492026.341524.94e-46.50e-5
getWords 10000.821221.37698.19e-42.39e-4
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.12471.67250.005.01e-5
delete 1000 randomly0.061.81e+49315.53e-57.08e-7
addMany 10002.87348.35180.003.58e-5
get 100053.7618.6010.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100066.8914.9530.070.01
delete 100028.0535.6510920.030.04
addMany 10009.09110.0160.014.39e-4
get 100030.5532.7320.030.00
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.03493.66260.003.35e-4
delete 1000 randomly0.052.20e+411164.55e-55.93e-7
addMany 1000 balanced2.65378.00200.009.59e-5
get 100067.9014.7310.070.02
dfs 1000172.245.8110.170.00
bfs 1000141.517.0710.140.00
morris 100095.2710.5010.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342921.081493.42e-43.52e-6
fib add & pop 10003.94253.57140.009.42e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000204.774.8810.200.03
unshift & shift 1000000164.806.0710.160.02
insertBefore 10000.033.53e+419102.83e-55.73e-6
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.77564.06300.004.03e-5
insertBefore 10002.33428.74220.005.85e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001911.530.5211.910.04
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000220.694.5310.220.04
shift 100000025.0239.9630.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.4323.5720.040.01
push & shift 100000080.1612.4810.080.00
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000535.251.8710.540.01
getWords 1000000954.391.0510.950.05
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.12471.05240.001.97e-5
delete 1000 randomly0.061.81e+49245.52e-56.93e-7
addMany 10002.91343.28180.004.22e-5
get 100054.1618.4710.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100066.4515.0530.070.00
delete 100023.6842.2311050.020.04
addMany 10008.88112.5660.012.72e-4
get 100033.4129.9320.030.01
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.02494.39260.004.57e-5
delete 1000 randomly0.042.23e+411414.49e-57.95e-7
addMany 1000 balanced2.66375.24200.009.32e-5
get 100062.6415.9610.060.00
dfs 1000171.075.8510.170.00
bfs 1000141.617.0610.148.60e-4
morris 100096.0910.4110.100.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342921.531483.42e-43.47e-6
fib add & pop 10003.90256.59140.006.06e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000208.244.8010.210.04
unshift & shift 1000000152.506.5610.150.01
insertBefore 10000.033.66e+419212.73e-51.79e-6
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.75571.08300.003.19e-5
insertBefore 10002.33429.11220.008.52e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001854.150.5411.850.05
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000212.744.7010.210.02
shift 100000025.1139.8230.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.6423.4520.040.01
push & shift 100000078.5012.7410.087.49e-4
+
+
trie
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 10000003.17315.82180.003.74e-4
getWords 10000005.00199.99110.011.85e-4
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.19457.50240.006.07e-5
delete 1000 randomly0.061.80e+49245.56e-51.04e-6
addMany 10003.02330.95170.009.53e-5
get 100052.9218.9020.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100065.9415.1730.070.00
delete 100031.5631.6810980.030.04
addMany 10008.94111.8160.013.04e-4
get 100031.5131.7320.032.99e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.45408.29210.002.76e-5
delete 1000 randomly0.052.22e+411324.51e-56.97e-7
addMany 1000 balanced2.74364.65200.008.78e-5
get 100061.5416.2510.060.00
dfs 1000172.435.8010.170.00
bfs 1000140.767.1010.140.00
morris 100093.5710.6910.090.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342933.081493.41e-42.82e-6
fib add & pop 10003.89257.27140.003.17e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000192.825.1910.190.04
unshift & shift 1000000156.376.4010.160.03
insertBefore 10000.033.70e+418962.70e-53.66e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.79559.70300.002.97e-4
insertBefore 10002.32430.90220.006.01e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001874.700.5311.870.04
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000209.654.7710.210.03
shift 100000025.5439.1530.030.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.4323.5720.040.01
push & shift 100000079.6012.5610.080.00
+
+
+
avl-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.08479.69250.002.14e-5
delete 1000 randomly0.051.82e+49245.49e-54.16e-7
addMany 10002.88347.21180.002.69e-5
get 100052.7218.9710.050.00
+
+
binary-tree
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 100065.0515.3730.070.00
delete 100026.2638.0811040.030.04
addMany 10008.81113.4460.019.78e-5
get 100031.4431.8020.033.59e-4
+
+
bst
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.04490.04250.002.37e-5
delete 1000 randomly0.042.23e+411374.48e-56.04e-7
addMany 1000 balanced2.67375.13200.002.64e-4
get 100062.2516.0610.060.00
+
+
heap
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add & 10000.342919.711493.43e-44.56e-6
fib add & pop 10003.88257.61140.004.79e-5
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
unshift 1000000202.434.9410.200.02
unshift & shift 1000000158.096.3310.160.03
insertBefore 10000.033.75e+419222.67e-54.57e-7
+
+
singly-linked-list
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push & pop 10001.77564.48300.007.71e-5
insertBefore 10002.29435.77220.003.74e-5
+
+
max-priority-queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
refill & poll 10000001812.540.5511.810.02
+
+
deque
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 1000000205.834.8610.210.03
shift 100000024.7840.3530.020.00
+
+
queue
+
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
push 100000042.2923.6520.040.01
push & shift 100000078.3412.7710.080.00
+
avl-tree
test nametime taken (ms)executions per secexecuted timessample mean (secs)sample deviation
add 1000 randomly2.39418.91220.006.47e-5
delete 1000 randomly0.061.77e+49175.66e-51.90e-6
addMany 10003.32301.33170.005.90e-4
get 100055.0318.1710.060.00
diff --git a/package.json b/package.json index 7705366..4d92375 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "data-structure-typed", - "version": "1.41.4", + "version": "1.41.5", "description": "Data Structures of Javascript & TypeScript. Binary Tree, BST, Graph, Heap, Priority Queue, Linked List, Queue, Deque, Stack, AVL Tree, Tree Multiset, Trie, Directed Graph, Undirected Graph, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue.", "main": "dist/cjs/index.js", "module": "dist/mjs/index.js", @@ -41,7 +41,7 @@ "copy:to-subs": "sh scripts/copy_to_all_subs.sh", "publish:subs": "npm run copy:to-subs && sh scripts/publish_all_subs.sh", "publish:docs": "sh scripts/publish_docs.sh", - "publish:all": "npm run ci && npm publish && npm run publish:docs && npm run publish:subs" + "publish:all": "npm run ci && npm run benchmark && npm publish && npm run publish:docs && npm run publish:subs" }, "repository": { "type": "git", @@ -133,9 +133,12 @@ "UMD", "esmodule", "java.util", + "c++ stl", "c++ std", "Python collections", "System.Collections.Generic", + "STL", + "stl", "STD", "std", "util", diff --git a/test/config.ts b/test/config.ts index 2316e5e..6ca1161 100644 --- a/test/config.ts +++ b/test/config.ts @@ -1 +1 @@ -export const isDebugTest = true; +export const isDebugTest = false; diff --git a/test/performance/data-structures/binary-tree/avl-tree.test.ts b/test/performance/data-structures/binary-tree/avl-tree.test.ts index 0de0d75..f8a0d54 100644 --- a/test/performance/data-structures/binary-tree/avl-tree.test.ts +++ b/test/performance/data-structures/binary-tree/avl-tree.test.ts @@ -1,24 +1,36 @@ import {AVLTree} from '../../../../src'; import * as Benchmark from 'benchmark'; -import {magnitude, randomInt, randomIntArray} from '../../../utils'; +import {getRandomIntArray, magnitude} from '../../../utils'; const suite = new Benchmark.Suite(); const avl = new AVLTree(); const {N_LOG_N} = magnitude; +const arr = getRandomIntArray(N_LOG_N, 0, N_LOG_N, true); suite - .add(`add ${N_LOG_N} randomly`, () => { - for (let i = 0; i < N_LOG_N; i++) avl.add(randomInt(0, N_LOG_N)); + .add(`${N_LOG_N} add randomly`, () => { + avl.clear(); + for (let i = 0; i < arr.length; i++) { + avl.add(arr[i]); + } }) - .add(`delete ${N_LOG_N} randomly`, () => { - for (let i = 0; i < N_LOG_N; i++) avl.delete(randomInt(0, N_LOG_N)); + .add(`${N_LOG_N} add & delete randomly`, () => { + avl.clear(); + for (let i = 0; i < arr.length; i++) { + avl.add(arr[i]); + } + for (let i = 0; i < arr.length; i++) { + avl.delete(arr[i]); + } }) - .add(`addMany ${N_LOG_N}`, () => { - const arr = randomIntArray(N_LOG_N); + .add(`${N_LOG_N} addMany`, () => { + avl.clear(); avl.addMany(arr); }) - .add(`get ${N_LOG_N}`, () => { - for (let i = 0; i < N_LOG_N; i++) avl.get(randomInt(-N_LOG_N, N_LOG_N)); + .add(`${N_LOG_N} get`, () => { + for (let i = 0; i < arr.length; i++) { + avl.get(arr[i]); + } }); export {suite}; diff --git a/test/performance/data-structures/binary-tree/binary-tree.test.ts b/test/performance/data-structures/binary-tree/binary-tree.test.ts index 6217aef..416afeb 100644 --- a/test/performance/data-structures/binary-tree/binary-tree.test.ts +++ b/test/performance/data-structures/binary-tree/binary-tree.test.ts @@ -1,25 +1,45 @@ import {BinaryTree} from '../../../../src'; import * as Benchmark from 'benchmark'; -import {magnitude, randomInt, randomIntArray} from '../../../utils'; +import {getRandomIntArray, magnitude} from '../../../utils'; const suite = new Benchmark.Suite(); const biTree = new BinaryTree(); const {N_LOG_N} = magnitude; +const arr = getRandomIntArray(N_LOG_N, 0, N_LOG_N, true); suite - .add(`add ${N_LOG_N}`, () => { - for (let i = 0; i < N_LOG_N; i++) biTree.add(randomInt(-N_LOG_N, N_LOG_N)); - }) - .add(`delete ${N_LOG_N}`, () => { - for (let i = 0; i < N_LOG_N; i++) biTree.delete(randomInt(-N_LOG_N, N_LOG_N)); - }) - .add(`addMany ${N_LOG_N}`, () => { + .add(`${N_LOG_N} add randomly`, () => { + biTree.clear(); + for (let i = 0; i < arr.length; i++) { + biTree.add(arr[i]); + } + }) + .add(`${N_LOG_N} add & delete randomly`, () => { + biTree.clear(); + for (let i = 0; i < arr.length; i++) { + biTree.add(arr[i]); + } + for (let i = 0; i < arr.length; i++) { + biTree.delete(arr[i]); + } + }) + .add(`${N_LOG_N} addMany`, () => { biTree.clear(); - const arr = randomIntArray(N_LOG_N); biTree.addMany(arr); }) - .add(`get ${N_LOG_N}`, () => { - for (let i = 0; i < N_LOG_N; i++) biTree.get(randomInt(-N_LOG_N, N_LOG_N)); + .add(`${N_LOG_N} get`, () => { + for (let i = 0; i < arr.length; i++) { + biTree.get(arr[i]); + } + }) + .add(`${N_LOG_N} dfs`, () => { + for (let i = 0; i < N_LOG_N; i++) biTree.dfs(); + }) + .add(`${N_LOG_N} bfs`, () => { + for (let i = 0; i < N_LOG_N; i++) biTree.bfs(); + }) + .add(`${N_LOG_N} morris`, () => { + for (let i = 0; i < N_LOG_N; i++) biTree.morris(n => n, 'pre'); }); export {suite}; diff --git a/test/performance/data-structures/binary-tree/bst.test.ts b/test/performance/data-structures/binary-tree/bst.test.ts index 5c48beb..65e888d 100644 --- a/test/performance/data-structures/binary-tree/bst.test.ts +++ b/test/performance/data-structures/binary-tree/bst.test.ts @@ -1,24 +1,36 @@ import {BST} from '../../../../src'; import * as Benchmark from 'benchmark'; -import {magnitude, randomInt, randomIntArray} from '../../../utils'; +import {getRandomIntArray, magnitude} from '../../../utils'; const suite = new Benchmark.Suite(); const bst = new BST(); const {N_LOG_N} = magnitude; +const arr = getRandomIntArray(N_LOG_N, 0, N_LOG_N, true); suite - .add(`add ${N_LOG_N} randomly`, () => { - for (let i = 0; i < N_LOG_N; i++) bst.add(randomInt(0, N_LOG_N)); + .add(`${N_LOG_N} add randomly`, () => { + bst.clear(); + for (let i = 0; i < arr.length; i++) { + bst.add(arr[i]); + } }) - .add(`delete ${N_LOG_N} randomly`, () => { - for (let i = 0; i < N_LOG_N; i++) bst.delete(randomInt(0, N_LOG_N)); + .add(`${N_LOG_N} add & delete randomly`, () => { + bst.clear(); + for (let i = 0; i < arr.length; i++) { + bst.add(arr[i]); + } + for (let i = 0; i < arr.length; i++) { + bst.delete(arr[i]); + } }) - .add(`addMany ${N_LOG_N} balanced`, () => { - const arr = randomIntArray(N_LOG_N); + .add(`${N_LOG_N} addMany`, () => { + bst.clear(); bst.addMany(arr); }) - .add(`get ${N_LOG_N}`, () => { - for (let i = 0; i < N_LOG_N; i++) bst.get(randomInt(-N_LOG_N, N_LOG_N)); + .add(`${N_LOG_N} get`, () => { + for (let i = 0; i < arr.length; i++) { + bst.get(arr[i]); + } }); export {suite}; diff --git a/test/performance/data-structures/graph/directed-graph.test.ts b/test/performance/data-structures/graph/directed-graph.test.ts index e69de29..fd5376f 100644 --- a/test/performance/data-structures/graph/directed-graph.test.ts +++ b/test/performance/data-structures/graph/directed-graph.test.ts @@ -0,0 +1,49 @@ +import {DirectedGraph} from '../../../../src'; +import * as Benchmark from 'benchmark'; +import {getRandomIndex, getRandomWords, magnitude} from '../../../utils'; + +const suite = new Benchmark.Suite(); +const {THOUSAND} = magnitude; +const graph = new DirectedGraph(); +const vertexes = getRandomWords(THOUSAND); + +suite + .add(`${THOUSAND} addVertex`, () => { + for (const v of vertexes) { + graph.addVertex(v); + } + }) + .add(`${THOUSAND} addEdge`, () => { + for (let i = 0; i < THOUSAND; i++) { + const v1 = vertexes[getRandomIndex(vertexes)]; + const v2 = vertexes[getRandomIndex(vertexes)]; + graph.addEdge(v1, v2); + } + }) + .add(`${THOUSAND} getVertex`, () => { + for (let i = 0; i < THOUSAND; i++) { + graph.getVertex(vertexes[getRandomIndex(vertexes)]); + } + }) + .add(`${THOUSAND} getEdge`, () => { + for (let i = 0; i < THOUSAND; i++) { + graph.getEdge(vertexes[getRandomIndex(vertexes)], vertexes[getRandomIndex(vertexes)]); + } + }) + .add(`tarjan`, () => { + // for (let i = 0; i < THOUSAND; i++) { + graph.tarjan(true); + // } + }) + .add(`tarjan all`, () => { + // for (let i = 0; i < THOUSAND; i++) { + graph.tarjan(true, true, true, true); + // } + }) + .add(`topologicalSort`, () => { + // for (let i = 0; i < THOUSAND; i++) { + graph.topologicalSort('key'); + // } + }); + +export {suite}; diff --git a/test/performance/data-structures/heap/heap.test.ts b/test/performance/data-structures/heap/heap.test.ts index 0775c71..d0fd2e8 100644 --- a/test/performance/data-structures/heap/heap.test.ts +++ b/test/performance/data-structures/heap/heap.test.ts @@ -6,7 +6,7 @@ const suite = new Benchmark.Suite(); const {N_LOG_N} = magnitude; suite - .add(`add & ${N_LOG_N}`, () => { + .add(`${N_LOG_N} add & pop`, () => { const heap = new Heap({comparator: (a, b) => b - a}); for (let i = 0; i < N_LOG_N; i++) { @@ -17,7 +17,7 @@ suite heap.pop(); } }) - .add(`fib add & pop ${N_LOG_N}`, () => { + .add(`${N_LOG_N} fib add & pop`, () => { const fbHeap = new FibonacciHeap(); for (let i = 1; i <= N_LOG_N; i++) { fbHeap.push(i); diff --git a/test/performance/data-structures/linked-list/doubly-linked-list.test.ts b/test/performance/data-structures/linked-list/doubly-linked-list.test.ts index 7847c1b..c181260 100644 --- a/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +++ b/test/performance/data-structures/linked-list/doubly-linked-list.test.ts @@ -6,14 +6,14 @@ const suite = new Benchmark.Suite(); const {LINEAR, N_LOG_N} = magnitude; suite - .add(`unshift ${LINEAR}`, () => { + .add(`${LINEAR} unshift`, () => { const list = new DoublyLinkedList(); for (let i = 0; i < LINEAR; i++) { list.unshift(i); } }) - .add(`unshift & shift ${LINEAR}`, () => { + .add(`${LINEAR} unshift & shift`, () => { const list = new DoublyLinkedList(); for (let i = 0; i < LINEAR; i++) { @@ -23,7 +23,7 @@ suite list.shift(); } }) - .add(`insertBefore ${N_LOG_N}`, () => { + .add(`${N_LOG_N} insertBefore`, () => { const doublyList = new DoublyLinkedList(); let midNode: DoublyLinkedListNode | null = null; const midIndex = Math.floor(N_LOG_N / 2); diff --git a/test/performance/data-structures/linked-list/singly-linked-list.test.ts b/test/performance/data-structures/linked-list/singly-linked-list.test.ts index a0c491b..7c9e852 100644 --- a/test/performance/data-structures/linked-list/singly-linked-list.test.ts +++ b/test/performance/data-structures/linked-list/singly-linked-list.test.ts @@ -6,7 +6,7 @@ const suite = new Benchmark.Suite(); const {N_LOG_N} = magnitude; suite - .add(`push & pop ${N_LOG_N}`, () => { + .add(`${N_LOG_N} push & pop`, () => { const list = new SinglyLinkedList(); for (let i = 0; i < N_LOG_N; i++) { @@ -17,7 +17,7 @@ suite list.pop(); } }) - .add(`insertBefore ${N_LOG_N}`, () => { + .add(`${N_LOG_N} insertBefore`, () => { const singlyList = new SinglyLinkedList(); let midSinglyNode: SinglyLinkedListNode | null = null; const midIndex = Math.floor(N_LOG_N / 2); diff --git a/test/performance/data-structures/priority-queue/max-priority-queue.test.ts b/test/performance/data-structures/priority-queue/max-priority-queue.test.ts index b143987..430e20b 100644 --- a/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +++ b/test/performance/data-structures/priority-queue/max-priority-queue.test.ts @@ -3,11 +3,11 @@ import * as Benchmark from 'benchmark'; import {magnitude} from '../../../utils'; const suite = new Benchmark.Suite(); -const {LINEAR} = magnitude; +const {TEN_THOUSAND} = magnitude; -suite.add(`refill & poll ${LINEAR}`, () => { +suite.add(`${TEN_THOUSAND} refill & poll`, () => { const nodes = Array.from( - new Set(Array.from(new Array(LINEAR), () => Math.floor(Math.random() * LINEAR * 100))) + new Set(Array.from(new Array(TEN_THOUSAND), () => Math.floor(Math.random() * TEN_THOUSAND * 100))) ); const maxPQ = new MaxPriorityQueue(); maxPQ.refill(nodes); diff --git a/test/performance/data-structures/queue/deque.test.ts b/test/performance/data-structures/queue/deque.test.ts index 6ea4266..e377199 100644 --- a/test/performance/data-structures/queue/deque.test.ts +++ b/test/performance/data-structures/queue/deque.test.ts @@ -6,13 +6,13 @@ export const suite = new Benchmark.Suite(); const {LINEAR} = magnitude; suite - .add(`push ${LINEAR}`, () => { + .add(`${LINEAR} push`, () => { const deque = new Deque(); for (let i = 0; i < LINEAR; i++) { deque.push(i); } }) - .add(`shift ${LINEAR}`, () => { + .add(`${LINEAR} shift`, () => { const deque = new Deque(); for (let i = 0; i < LINEAR; i++) { deque.push(i); diff --git a/test/performance/data-structures/queue/queue.test.ts b/test/performance/data-structures/queue/queue.test.ts index f256e0b..689cac0 100644 --- a/test/performance/data-structures/queue/queue.test.ts +++ b/test/performance/data-structures/queue/queue.test.ts @@ -6,14 +6,14 @@ const suite = new Benchmark.Suite(); const {LINEAR} = magnitude; suite - .add(`push ${LINEAR}`, () => { + .add(`${LINEAR} push`, () => { const queue = new Queue(); for (let i = 0; i < LINEAR; i++) { queue.push(i); } }) - .add(`push & shift ${LINEAR}`, () => { + .add(`${LINEAR} push & shift`, () => { const queue = new Queue(); for (let i = 0; i < LINEAR; i++) { diff --git a/test/performance/data-structures/trie/trie.test.ts b/test/performance/data-structures/trie/trie.test.ts index e69de29..a448dd2 100644 --- a/test/performance/data-structures/trie/trie.test.ts +++ b/test/performance/data-structures/trie/trie.test.ts @@ -0,0 +1,22 @@ +import {Trie} from '../../../../src'; +import * as Benchmark from 'benchmark'; +import {getRandomWords, magnitude} from '../../../utils'; + +const suite = new Benchmark.Suite(); +const {HUNDRED_THOUSAND} = magnitude; +const trie = new Trie(); +const randomWords = getRandomWords(HUNDRED_THOUSAND, false); + +suite + .add(`${HUNDRED_THOUSAND} push`, () => { + for (let i = 0; i < randomWords.length; i++) { + trie.add(randomWords[i]); + } + }) + .add(`${HUNDRED_THOUSAND} getWords`, () => { + for (let i = 0; i < randomWords.length; i++) { + trie.getWords(randomWords[i]); + } + }); + +export {suite}; diff --git a/test/performance/reportor.ts b/test/performance/reportor.ts index 2bd0ab5..31d4d90 100644 --- a/test/performance/reportor.ts +++ b/test/performance/reportor.ts @@ -11,14 +11,12 @@ const testFiles = fastGlob.sync(path.join(testDir, '**', '*.test.ts')); const report: {[key: string]: any} = {}; -let testFileCount = 0, - completedCount = 0; +let completedCount = 0; const performanceTests: PerformanceTest[] = []; -const {GREEN, BOLD, RED, END, YELLOW, CYAN, BG_YELLOW} = Color; +const {GREEN, BOLD, END, YELLOW, GRAY, CYAN, BG_YELLOW} = Color; testFiles.forEach((file: string) => { - testFileCount++; const testName = path.basename(file, '.test.ts'); const testFunction = require(file); const {suite} = testFunction; @@ -133,7 +131,7 @@ function writeIntoMarkdown(html: string) { if (err) { console.error('Unable to write to README.md file:', err); } else { - console.log('The text has been successfully inserted into the README.md file!'); + console.log('The tables have been successfully inserted into the README.md file!'); } }); }); @@ -141,29 +139,40 @@ function writeIntoMarkdown(html: string) { performanceTests.forEach(item => { const {suite, testName, file} = item; - console.log(`${BG_YELLOW}Running in${END}: ${CYAN}${file}${END}`); + const relativeFilePath = path.relative(__dirname, file); + const directory = path.dirname(relativeFilePath); + const fileName = path.basename(relativeFilePath); + console.log(`${BG_YELLOW}Running in${END}: ${GRAY}${directory}/${END}${CYAN}${fileName}${END}`); if (suite) { + let runTime = 0; suite .on('complete', function (this: Benchmark.Suite) { completedCount++; report[testName] = {}; - report[testName].benchmarks = this.map((benchmark: Benchmark) => ({ - 'test name': benchmark.name, - 'time taken (ms)': numberFix(benchmark.times.period * 1000, 2), - 'executions per sec': numberFix(benchmark.hz, 2), - 'executed times': numberFix(benchmark.count, 0), - 'sample mean (secs)': numberFix(benchmark.stats.mean, 2), - 'sample deviation': numberFix(benchmark.stats.deviation, 2) - })); + report[testName].benchmarks = this.map((benchmark: Benchmark) => { + runTime += benchmark.times.elapsed; + return { + 'test name': benchmark.name, + 'time taken (ms)': numberFix(benchmark.times.period * 1000, 2), + 'executions per sec': numberFix(benchmark.hz, 2), + 'executed times': numberFix(benchmark.count, 0), + 'sample mean (secs)': numberFix(benchmark.stats.mean, 2), + 'sample deviation': numberFix(benchmark.stats.deviation, 2) + }; + }); + report[testName].testName = testName; const isDone = completedCount === performanceTests.length; + runTime = Number(runTime.toFixed(2)); + const isTimeWarn = runTime > 120; console.log( - `Files: ${GREEN}${testFileCount}${END} `, - `Suites: ${GREEN}${performanceTests.length}${END} `, - `Progress: ${isDone ? GREEN : YELLOW}${completedCount}${END}/${isDone ? GREEN : RED}${ + // `Files: ${GREEN}${testFileCount}${END} `, + // `Suites: ${GREEN}${performanceTests.length}${END} `, + `Suites Progress: ${isDone ? GREEN : YELLOW}${completedCount}${END}/${isDone ? GREEN : YELLOW}${ performanceTests.length - }${END}` + }${END}`, + `Time: ${isTimeWarn ? YELLOW : GREEN}${runTime}s${END}` ); if (isDone) { composeReport(); diff --git a/test/unit/data-structures/binary-tree/rb-tree.test.ts b/test/unit/data-structures/binary-tree/rb-tree.test.ts index 4d2c7ea..2da8475 100644 --- a/test/unit/data-structures/binary-tree/rb-tree.test.ts +++ b/test/unit/data-structures/binary-tree/rb-tree.test.ts @@ -1,5 +1,5 @@ import {NIL, RBTNColor, RBTreeNode, RedBlackTree} from '../../../../src'; -import {randomInt} from '../../../utils'; +import {getRandomInt} from '../../../utils'; import {isDebugTest} from '../../../config'; const isDebug = isDebugTest; @@ -428,8 +428,8 @@ describe('RedBlackTree', () => { it('should fix the tree after insertion and deletion', () => { for (let i = 0; i < 100; i++) { - tree.insert(randomInt(-100, 1000)); - tree.delete(randomInt(-100, 1000)); + tree.insert(getRandomInt(-100, 1000)); + tree.delete(getRandomInt(-100, 1000)); } }); }); diff --git a/test/unit/data-structures/heap/heap.test.ts b/test/unit/data-structures/heap/heap.test.ts index 19ed4dc..4b3763f 100644 --- a/test/unit/data-structures/heap/heap.test.ts +++ b/test/unit/data-structures/heap/heap.test.ts @@ -235,10 +235,11 @@ describe('FibonacciHeap Stress Test', () => { // 10, 100, 1000, 5000, 10000, 20000, 50000, 75000, 100000, // 150000, 200000, 250000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000 // ].forEach(m => logBigOMetricsWrap(testByMagnitude, [m])); - [ - 10, 100, 1000, 5000, 10000, 20000, 50000, 75000, 100000, 150000, 200000, 250000, 300000, 400000, 500000, 600000, - 700000, 800000, 900000, 1000000 - ].forEach(m => + // [ + // 10, 100, 1000, 5000, 10000, 20000, 50000, 75000, 100000, 150000, 200000, 250000, 300000, 400000, 500000, 600000, + // 700000, 800000, 900000, 1000000 + // ] + [10, 100, 1000, 5000].forEach(m => logBigOMetricsWrap( (c: number) => { const result: number[] = []; diff --git a/test/unit/data-structures/priority-queue/priority-queue.test.ts b/test/unit/data-structures/priority-queue/priority-queue.test.ts index cd850ae..dd4fba0 100644 --- a/test/unit/data-structures/priority-queue/priority-queue.test.ts +++ b/test/unit/data-structures/priority-queue/priority-queue.test.ts @@ -1,5 +1,5 @@ import {PriorityQueue} from '../../../../src'; -import {randomInt} from '../../../utils'; +import {getRandomInt} from '../../../utils'; describe('PriorityQueue Operation Test', () => { it('should PriorityQueue poll, pee, heapify, toArray work well', function () { @@ -44,7 +44,7 @@ describe('PriorityQueue Operation Test', () => { describe('Priority Queue Performance Test', () => { it('should numeric heap work well', function () { - const values = Array.from(new Array(10000), () => randomInt(1, 10000000)); + const values = Array.from(new Array(10000), () => getRandomInt(1, 10000000)); const minPriorityQueue = new PriorityQueue({comparator: (a, b) => a - b}); minPriorityQueue.refill(values); const sorted = minPriorityQueue.sort(); diff --git a/test/utils/array.ts b/test/utils/array.ts index 5befc76..94f3fbc 100644 --- a/test/utils/array.ts +++ b/test/utils/array.ts @@ -1,5 +1,5514 @@ -import {randomInt} from './number'; +import {getRandomInt} from './number'; -export const randomIntArray = (length: number, min: number = -1000, max: number = 1000) => { - return new Array(length).fill(0).map(() => randomInt(min, max)); -}; +export function getRandomIntArray(length: number, min: number = -1000, max: number = 1000, isDistinct = true) { + if (isDistinct) { + const set = new Set(); + const ans: number[] = []; + while (ans.length < length) { + const num = getRandomInt(min, max); + if (!set.has(num)) { + ans.push(num); + set.add(num); + } + } + return ans; + } + return new Array(length).fill(0).map(() => getRandomInt(min, max)); +} + +const words = [ + 'about', + 'search', + 'other', + 'which', + 'their', + 'there', + 'contact', + 'business', + 'online', + 'first', + 'would', + 'services', + 'these', + 'click', + 'service', + 'price', + 'people', + 'state', + 'email', + 'health', + 'world', + 'products', + 'music', + 'should', + 'product', + 'system', + 'policy', + 'number', + 'please', + 'support', + 'message', + 'after', + 'software', + 'video', + 'where', + 'rights', + 'public', + 'books', + 'school', + 'through', + 'links', + 'review', + 'years', + 'order', + 'privacy', + 'items', + 'company', + 'group', + 'under', + 'general', + 'research', + 'january', + 'reviews', + 'program', + 'games', + 'could', + 'great', + 'united', + 'hotel', + 'center', + 'store', + 'travel', + 'comments', + 'report', + 'member', + 'details', + 'terms', + 'before', + 'hotels', + 'right', + 'because', + 'local', + 'those', + 'using', + 'results', + 'office', + 'national', + 'design', + 'posted', + 'internet', + 'address', + 'within', + 'states', + 'phone', + 'shipping', + 'reserved', + 'subject', + 'between', + 'forum', + 'family', + 'based', + 'black', + 'check', + 'special', + 'prices', + 'website', + 'index', + 'being', + 'women', + 'today', + 'south', + 'project', + 'pages', + 'version', + 'section', + 'found', + 'sports', + 'house', + 'related', + 'security', + 'county', + 'american', + 'photo', + 'members', + 'power', + 'while', + 'network', + 'computer', + 'systems', + 'three', + 'total', + 'place', + 'download', + 'without', + 'access', + 'think', + 'north', + 'current', + 'posts', + 'media', + 'control', + 'water', + 'history', + 'pictures', + 'personal', + 'since', + 'guide', + 'board', + 'location', + 'change', + 'white', + 'small', + 'rating', + 'children', + 'during', + 'return', + 'students', + 'shopping', + 'account', + 'times', + 'sites', + 'level', + 'digital', + 'profile', + 'previous', + 'events', + 'hours', + 'image', + 'title', + 'another', + 'shall', + 'property', + 'class', + 'still', + 'money', + 'quality', + 'every', + 'listing', + 'content', + 'country', + 'private', + 'little', + 'visit', + 'tools', + 'reply', + 'customer', + 'december', + 'compare', + 'movies', + 'include', + 'college', + 'value', + 'article', + 'provide', + 'source', + 'author', + 'press', + 'learn', + 'around', + 'print', + 'course', + 'canada', + 'process', + 'stock', + 'training', + 'credit', + 'point', + 'science', + 'advanced', + 'sales', + 'english', + 'estate', + 'select', + 'windows', + 'photos', + 'thread', + 'category', + 'large', + 'gallery', + 'table', + 'register', + 'however', + 'october', + 'november', + 'market', + 'library', + 'really', + 'action', + 'start', + 'series', + 'model', + 'features', + 'industry', + 'human', + 'provided', + 'required', + 'second', + 'movie', + 'forums', + 'march', + 'better', + 'yahoo', + 'going', + 'medical', + 'friend', + 'server', + 'study', + 'staff', + 'articles', + 'feedback', + 'again', + 'looking', + 'issues', + 'april', + 'never', + 'users', + 'complete', + 'street', + 'topic', + 'comment', + 'things', + 'working', + 'against', + 'standard', + 'person', + 'below', + 'mobile', + 'party', + 'payment', + 'login', + 'student', + 'programs', + 'offers', + 'legal', + 'above', + 'recent', + 'stores', + 'problem', + 'memory', + 'social', + 'august', + 'quote', + 'language', + 'story', + 'options', + 'rates', + 'create', + 'young', + 'america', + 'field', + 'paper', + 'single', + 'example', + 'girls', + 'password', + 'latest', + 'question', + 'changes', + 'night', + 'texas', + 'poker', + 'status', + 'browse', + 'issue', + 'range', + 'building', + 'seller', + 'court', + 'february', + 'always', + 'result', + 'audio', + 'light', + 'write', + 'offer', + 'groups', + 'given', + 'files', + 'event', + 'release', + 'analysis', + 'request', + 'china', + 'making', + 'picture', + 'needs', + 'possible', + 'might', + 'month', + 'major', + 'areas', + 'future', + 'space', + 'cards', + 'problems', + 'london', + 'meeting', + 'become', + 'interest', + 'child', + 'enter', + 'share', + 'similar', + 'garden', + 'schools', + 'million', + 'added', + 'listed', + 'learning', + 'energy', + 'delivery', + 'popular', + 'stories', + 'journal', + 'reports', + 'welcome', + 'central', + 'images', + 'notice', + 'original', + 'radio', + 'until', + 'color', + 'council', + 'includes', + 'track', + 'archive', + 'others', + 'format', + 'least', + 'society', + 'months', + 'safety', + 'friends', + 'trade', + 'edition', + 'messages', + 'further', + 'updated', + 'having', + 'provides', + 'david', + 'already', + 'green', + 'studies', + 'close', + 'common', + 'drive', + 'specific', + 'several', + 'living', + 'called', + 'short', + 'display', + 'limited', + 'powered', + 'means', + 'director', + 'daily', + 'beach', + 'natural', + 'whether', + 'period', + 'planning', + 'database', + 'official', + 'weather', + 'average', + 'window', + 'france', + 'region', + 'island', + 'record', + 'direct', + 'records', + 'district', + 'calendar', + 'costs', + 'style', + 'front', + 'update', + 'parts', + 'early', + 'miles', + 'sound', + 'resource', + 'present', + 'either', + 'document', + 'works', + 'material', + 'written', + 'federal', + 'hosting', + 'rules', + 'final', + 'adult', + 'tickets', + 'thing', + 'centre', + 'cheap', + 'finance', + 'minutes', + 'third', + 'gifts', + 'europe', + 'reading', + 'topics', + 'cover', + 'usually', + 'together', + 'videos', + 'percent', + 'function', + 'getting', + 'global', + 'economic', + 'player', + 'projects', + 'lyrics', + 'often', + 'submit', + 'germany', + 'amount', + 'watch', + 'included', + 'though', + 'thanks', + 'deals', + 'various', + 'words', + 'linux', + 'james', + 'weight', + 'heart', + 'received', + 'choose', + 'archives', + 'points', + 'magazine', + 'error', + 'camera', + 'clear', + 'receive', + 'domain', + 'methods', + 'chapter', + 'makes', + 'policies', + 'beauty', + 'manager', + 'india', + 'position', + 'taken', + 'listings', + 'models', + 'michael', + 'known', + 'cases', + 'florida', + 'simple', + 'quick', + 'wireless', + 'license', + 'friday', + 'whole', + 'annual', + 'later', + 'basic', + 'shows', + 'google', + 'church', + 'method', + 'purchase', + 'active', + 'response', + 'practice', + 'hardware', + 'figure', + 'holiday', + 'enough', + 'designed', + 'along', + 'among', + 'death', + 'writing', + 'speed', + 'brand', + 'discount', + 'higher', + 'effects', + 'created', + 'remember', + 'yellow', + 'increase', + 'kingdom', + 'thought', + 'stuff', + 'french', + 'storage', + 'japan', + 'doing', + 'loans', + 'shoes', + 'entry', + 'nature', + 'orders', + 'africa', + 'summary', + 'growth', + 'notes', + 'agency', + 'monday', + 'european', + 'activity', + 'although', + 'western', + 'income', + 'force', + 'overall', + 'river', + 'package', + 'contents', + 'players', + 'engine', + 'album', + 'regional', + 'supplies', + 'started', + 'views', + 'plans', + 'double', + 'build', + 'screen', + 'exchange', + 'types', + 'lines', + 'continue', + 'across', + 'benefits', + 'needed', + 'season', + 'apply', + 'someone', + 'anything', + 'printer', + 'believe', + 'effect', + 'asked', + 'sunday', + 'casino', + 'volume', + 'cross', + 'anyone', + 'mortgage', + 'silver', + 'inside', + 'solution', + 'mature', + 'rather', + 'weeks', + 'addition', + 'supply', + 'nothing', + 'certain', + 'running', + 'lower', + 'union', + 'jewelry', + 'clothing', + 'names', + 'robert', + 'homepage', + 'skills', + 'islands', + 'advice', + 'career', + 'military', + 'rental', + 'decision', + 'leave', + 'british', + 'teens', + 'woman', + 'sellers', + 'middle', + 'cable', + 'taking', + 'values', + 'division', + 'coming', + 'tuesday', + 'object', + 'lesbian', + 'machine', + 'length', + 'actually', + 'score', + 'client', + 'returns', + 'capital', + 'follow', + 'sample', + 'shown', + 'saturday', + 'england', + 'culture', + 'flash', + 'george', + 'choice', + 'starting', + 'thursday', + 'courses', + 'consumer', + 'airport', + 'foreign', + 'artist', + 'outside', + 'levels', + 'channel', + 'letter', + 'phones', + 'ideas', + 'summer', + 'allow', + 'degree', + 'contract', + 'button', + 'releases', + 'homes', + 'super', + 'matter', + 'custom', + 'virginia', + 'almost', + 'located', + 'multiple', + 'asian', + 'editor', + 'cause', + 'focus', + 'featured', + 'rooms', + 'female', + 'thomas', + 'primary', + 'cancer', + 'numbers', + 'reason', + 'browser', + 'spring', + 'answer', + 'voice', + 'friendly', + 'schedule', + 'purpose', + 'feature', + 'comes', + 'police', + 'everyone', + 'approach', + 'cameras', + 'brown', + 'physical', + 'medicine', + 'ratings', + 'chicago', + 'forms', + 'glass', + 'happy', + 'smith', + 'wanted', + 'thank', + 'unique', + 'survey', + 'prior', + 'sport', + 'ready', + 'animal', + 'sources', + 'mexico', + 'regular', + 'secure', + 'simply', + 'evidence', + 'station', + 'round', + 'paypal', + 'favorite', + 'option', + 'master', + 'valley', + 'recently', + 'probably', + 'rentals', + 'built', + 'blood', + 'improve', + 'larger', + 'networks', + 'earth', + 'parents', + 'nokia', + 'impact', + 'transfer', + 'kitchen', + 'strong', + 'carolina', + 'wedding', + 'hospital', + 'ground', + 'overview', + 'owners', + 'disease', + 'italy', + 'perfect', + 'classic', + 'basis', + 'command', + 'cities', + 'william', + 'express', + 'award', + 'distance', + 'peter', + 'ensure', + 'involved', + 'extra', + 'partners', + 'budget', + 'rated', + 'guides', + 'success', + 'maximum', + 'existing', + 'quite', + 'selected', + 'amazon', + 'patients', + 'warning', + 'horse', + 'forward', + 'flowers', + 'stars', + 'lists', + 'owner', + 'retail', + 'animals', + 'useful', + 'directly', + 'housing', + 'takes', + 'bring', + 'catalog', + 'searches', + 'trying', + 'mother', + 'traffic', + 'joined', + 'input', + 'strategy', + 'agent', + 'valid', + 'modern', + 'senior', + 'ireland', + 'teaching', + 'grand', + 'testing', + 'trial', + 'charge', + 'units', + 'instead', + 'canadian', + 'normal', + 'wrote', + 'ships', + 'entire', + 'leading', + 'metal', + 'positive', + 'fitness', + 'chinese', + 'opinion', + 'football', + 'abstract', + 'output', + 'funds', + 'greater', + 'likely', + 'develop', + 'artists', + 'guest', + 'seems', + 'trust', + 'contains', + 'session', + 'multi', + 'republic', + 'vacation', + 'century', + 'academic', + 'graphics', + 'indian', + 'expected', + 'grade', + 'dating', + 'pacific', + 'mountain', + 'filter', + 'mailing', + 'vehicle', + 'longer', + 'consider', + 'northern', + 'behind', + 'panel', + 'floor', + 'german', + 'buying', + 'match', + 'proposed', + 'default', + 'require', + 'outdoor', + 'morning', + 'allows', + 'protein', + 'plant', + 'reported', + 'politics', + 'partner', + 'authors', + 'boards', + 'faculty', + 'parties', + 'mission', + 'string', + 'sense', + 'modified', + 'released', + 'stage', + 'internal', + 'goods', + 'unless', + 'richard', + 'detailed', + 'japanese', + 'approved', + 'target', + 'except', + 'ability', + 'maybe', + 'moving', + 'brands', + 'places', + 'pretty', + 'spain', + 'southern', + 'yourself', + 'winter', + 'battery', + 'youth', + 'pressure', + 'boston', + 'keywords', + 'medium', + 'break', + 'purposes', + 'dance', + 'itself', + 'defined', + 'papers', + 'playing', + 'awards', + 'studio', + 'reader', + 'virtual', + 'device', + 'answers', + 'remote', + 'external', + 'apple', + 'offered', + 'theory', + 'enjoy', + 'remove', + 'surface', + 'minimum', + 'visual', + 'variety', + 'teachers', + 'martin', + 'manual', + 'block', + 'subjects', + 'agents', + 'repair', + 'civil', + 'steel', + 'songs', + 'fixed', + 'wrong', + 'hands', + 'finally', + 'updates', + 'desktop', + 'classes', + 'paris', + 'sector', + 'capacity', + 'requires', + 'jersey', + 'fully', + 'father', + 'electric', + 'quotes', + 'officer', + 'driver', + 'respect', + 'unknown', + 'worth', + 'teacher', + 'workers', + 'georgia', + 'peace', + 'campus', + 'showing', + 'creative', + 'coast', + 'benefit', + 'progress', + 'funding', + 'devices', + 'grant', + 'agree', + 'fiction', + 'watches', + 'careers', + 'beyond', + 'families', + 'museum', + 'blogs', + 'accepted', + 'former', + 'complex', + 'agencies', + 'parent', + 'spanish', + 'michigan', + 'columbia', + 'setting', + 'scale', + 'stand', + 'economy', + 'highest', + 'helpful', + 'monthly', + 'critical', + 'frame', + 'musical', + 'angeles', + 'employee', + 'chief', + 'gives', + 'bottom', + 'packages', + 'detail', + 'changed', + 'heard', + 'begin', + 'colorado', + 'royal', + 'clean', + 'switch', + 'russian', + 'largest', + 'african', + 'titles', + 'relevant', + 'justice', + 'connect', + 'bible', + 'basket', + 'applied', + 'weekly', + 'demand', + 'suite', + 'vegas', + 'square', + 'chris', + 'advance', + 'auction', + 'allowed', + 'correct', + 'charles', + 'nation', + 'selling', + 'piece', + 'sheet', + 'seven', + 'older', + 'illinois', + 'elements', + 'species', + 'cells', + 'module', + 'resort', + 'facility', + 'random', + 'pricing', + 'minister', + 'motion', + 'looks', + 'fashion', + 'visitors', + 'monitor', + 'trading', + 'forest', + 'calls', + 'whose', + 'coverage', + 'couple', + 'giving', + 'chance', + 'vision', + 'ending', + 'clients', + 'actions', + 'listen', + 'discuss', + 'accept', + 'naked', + 'clinical', + 'sciences', + 'markets', + 'lowest', + 'highly', + 'appear', + 'lives', + 'currency', + 'leather', + 'patient', + 'actual', + 'stone', + 'commerce', + 'perhaps', + 'persons', + 'tests', + 'village', + 'accounts', + 'amateur', + 'factors', + 'coffee', + 'settings', + 'buyer', + 'cultural', + 'steve', + 'easily', + 'poster', + 'closed', + 'holidays', + 'zealand', + 'balance', + 'graduate', + 'replies', + 'initial', + 'label', + 'thinking', + 'scott', + 'canon', + 'league', + 'waste', + 'minute', + 'provider', + 'optional', + 'sections', + 'chair', + 'fishing', + 'effort', + 'phase', + 'fields', + 'fantasy', + 'letters', + 'motor', + 'context', + 'install', + 'shirt', + 'apparel', + 'crime', + 'count', + 'breast', + 'johnson', + 'quickly', + 'dollars', + 'websites', + 'religion', + 'claim', + 'driving', + 'surgery', + 'patch', + 'measures', + 'kansas', + 'chemical', + 'doctor', + 'reduce', + 'brought', + 'himself', + 'enable', + 'exercise', + 'santa', + 'leader', + 'diamond', + 'israel', + 'servers', + 'alone', + 'meetings', + 'seconds', + 'jones', + 'arizona', + 'keyword', + 'flight', + 'congress', + 'username', + 'produced', + 'italian', + 'pocket', + 'saint', + 'freedom', + 'argument', + 'creating', + 'drugs', + 'joint', + 'premium', + 'fresh', + 'attorney', + 'upgrade', + 'factor', + 'growing', + 'stream', + 'hearing', + 'eastern', + 'auctions', + 'therapy', + 'entries', + 'dates', + 'signed', + 'upper', + 'serious', + 'prime', + 'samsung', + 'limit', + 'began', + 'louis', + 'steps', + 'errors', + 'shops', + 'efforts', + 'informed', + 'thoughts', + 'creek', + 'worked', + 'quantity', + 'urban', + 'sorted', + 'myself', + 'tours', + 'platform', + 'labor', + 'admin', + 'nursing', + 'defense', + 'machines', + 'heavy', + 'covered', + 'recovery', + 'merchant', + 'expert', + 'protect', + 'solid', + 'became', + 'orange', + 'vehicles', + 'prevent', + 'theme', + 'campaign', + 'marine', + 'guitar', + 'finding', + 'examples', + 'saying', + 'spirit', + 'claims', + 'motorola', + 'affairs', + 'touch', + 'intended', + 'towards', + 'goals', + 'election', + 'suggest', + 'branch', + 'charges', + 'serve', + 'reasons', + 'magic', + 'mount', + 'smart', + 'talking', + 'latin', + 'avoid', + 'manage', + 'corner', + 'oregon', + 'element', + 'birth', + 'virus', + 'abuse', + 'requests', + 'separate', + 'quarter', + 'tables', + 'define', + 'racing', + 'facts', + 'column', + 'plants', + 'faith', + 'chain', + 'identify', + 'avenue', + 'missing', + 'domestic', + 'sitemap', + 'moved', + 'houston', + 'reach', + 'mental', + 'viewed', + 'moment', + 'extended', + 'sequence', + 'attack', + 'sorry', + 'centers', + 'opening', + 'damage', + 'reserve', + 'recipes', + 'gamma', + 'plastic', + 'produce', + 'placed', + 'truth', + 'counter', + 'failure', + 'follows', + 'weekend', + 'dollar', + 'ontario', + 'films', + 'bridge', + 'native', + 'williams', + 'movement', + 'printing', + 'baseball', + 'owned', + 'approval', + 'draft', + 'chart', + 'played', + 'contacts', + 'jesus', + 'readers', + 'clubs', + 'jackson', + 'equal', + 'matching', + 'offering', + 'shirts', + 'profit', + 'leaders', + 'posters', + 'variable', + 'expect', + 'parking', + 'compared', + 'workshop', + 'russia', + 'codes', + 'kinds', + 'seattle', + 'golden', + 'teams', + 'lighting', + 'senate', + 'forces', + 'funny', + 'brother', + 'turned', + 'portable', + 'tried', + 'returned', + 'pattern', + 'named', + 'theatre', + 'laser', + 'earlier', + 'sponsor', + 'warranty', + 'indiana', + 'harry', + 'objects', + 'delete', + 'evening', + 'assembly', + 'nuclear', + 'taxes', + 'mouse', + 'signal', + 'criminal', + 'issued', + 'brain', + 'sexual', + 'powerful', + 'dream', + 'obtained', + 'false', + 'flower', + 'passed', + 'supplied', + 'falls', + 'opinions', + 'promote', + 'stated', + 'stats', + 'hawaii', + 'appears', + 'carry', + 'decided', + 'covers', + 'hello', + 'designs', + 'maintain', + 'tourism', + 'priority', + 'adults', + 'clips', + 'savings', + 'graphic', + 'payments', + 'binding', + 'brief', + 'ended', + 'winning', + 'eight', + 'straight', + 'script', + 'served', + 'wants', + 'prepared', + 'dining', + 'alert', + 'atlanta', + 'dakota', + 'queen', + 'credits', + 'clearly', + 'handle', + 'sweet', + 'criteria', + 'pubmed', + 'diego', + 'truck', + 'behavior', + 'enlarge', + 'revenue', + 'measure', + 'changing', + 'votes', + 'looked', + 'festival', + 'ocean', + 'flights', + 'experts', + 'signs', + 'depth', + 'whatever', + 'logged', + 'laptop', + 'vintage', + 'train', + 'exactly', + 'explore', + 'maryland', + 'concept', + 'nearly', + 'eligible', + 'checkout', + 'reality', + 'forgot', + 'handling', + 'origin', + 'gaming', + 'feeds', + 'billion', + 'scotland', + 'faster', + 'dallas', + 'bought', + 'nations', + 'route', + 'followed', + 'broken', + 'frank', + 'alaska', + 'battle', + 'anime', + 'speak', + 'protocol', + 'query', + 'equity', + 'speech', + 'rural', + 'shared', + 'sounds', + 'judge', + 'bytes', + 'forced', + 'fight', + 'height', + 'speaker', + 'filed', + 'obtain', + 'offices', + 'designer', + 'remain', + 'managed', + 'failed', + 'marriage', + 'korea', + 'banks', + 'secret', + 'kelly', + 'leads', + 'negative', + 'austin', + 'toronto', + 'theater', + 'springs', + 'missouri', + 'andrew', + 'perform', + 'healthy', + 'assets', + 'injury', + 'joseph', + 'ministry', + 'drivers', + 'lawyer', + 'figures', + 'married', + 'proposal', + 'sharing', + 'portal', + 'waiting', + 'birthday', + 'gratis', + 'banking', + 'brian', + 'toward', + 'slightly', + 'assist', + 'conduct', + 'lingerie', + 'calling', + 'serving', + 'profiles', + 'miami', + 'comics', + 'matters', + 'houses', + 'postal', + 'controls', + 'breaking', + 'combined', + 'ultimate', + 'wales', + 'minor', + 'finish', + 'noted', + 'reduced', + 'physics', + 'spent', + 'extreme', + 'samples', + 'davis', + 'daniel', + 'reviewed', + 'forecast', + 'removed', + 'helps', + 'singles', + 'cycle', + 'amounts', + 'contain', + 'accuracy', + 'sleep', + 'pharmacy', + 'brazil', + 'creation', + 'static', + 'scene', + 'hunter', + 'crystal', + 'famous', + 'writer', + 'chairman', + 'violence', + 'oklahoma', + 'speakers', + 'drink', + 'academy', + 'dynamic', + 'gender', + 'cleaning', + 'concerns', + 'vendor', + 'intel', + 'officers', + 'referred', + 'supports', + 'regions', + 'junior', + 'rings', + 'meaning', + 'ladies', + 'henry', + 'ticket', + 'guess', + 'agreed', + 'soccer', + 'import', + 'posting', + 'presence', + 'instant', + 'viewing', + 'majority', + 'christ', + 'aspects', + 'austria', + 'ahead', + 'scheme', + 'utility', + 'preview', + 'manner', + 'matrix', + 'devel', + 'despite', + 'strength', + 'turkey', + 'proper', + 'degrees', + 'delta', + 'seeking', + 'inches', + 'phoenix', + 'shares', + 'daughter', + 'standing', + 'comfort', + 'colors', + 'cisco', + 'ordering', + 'alpha', + 'appeal', + 'cruise', + 'bonus', + 'bookmark', + 'specials', + 'disney', + 'adobe', + 'smoking', + 'becomes', + 'drives', + 'alabama', + 'improved', + 'trees', + 'achieve', + 'dress', + 'dealer', + 'nearby', + 'carried', + 'happen', + 'exposure', + 'gambling', + 'refer', + 'miller', + 'outdoors', + 'clothes', + 'caused', + 'luxury', + 'babes', + 'frames', + 'indeed', + 'circuit', + 'layer', + 'printed', + 'removal', + 'easier', + 'printers', + 'adding', + 'kentucky', + 'mostly', + 'taylor', + 'prints', + 'spend', + 'factory', + 'interior', + 'revised', + 'optical', + 'relative', + 'amazing', + 'clock', + 'identity', + 'suites', + 'feeling', + 'hidden', + 'victoria', + 'serial', + 'relief', + 'revision', + 'ratio', + 'planet', + 'copies', + 'recipe', + 'permit', + 'seeing', + 'proof', + 'tennis', + 'bedroom', + 'empty', + 'instance', + 'licensed', + 'orlando', + 'bureau', + 'maine', + 'ideal', + 'specs', + 'recorded', + 'pieces', + 'finished', + 'parks', + 'dinner', + 'lawyers', + 'sydney', + 'stress', + 'cream', + 'trends', + 'discover', + 'patterns', + 'boxes', + 'hills', + 'fourth', + 'advisor', + 'aware', + 'wilson', + 'shape', + 'irish', + 'stations', + 'remains', + 'greatest', + 'firms', + 'operator', + 'generic', + 'usage', + 'charts', + 'mixed', + 'census', + 'exist', + 'wheel', + 'transit', + 'compact', + 'poetry', + 'lights', + 'tracking', + 'angel', + 'keeping', + 'attempt', + 'matches', + 'width', + 'noise', + 'engines', + 'forget', + 'array', + 'accurate', + 'stephen', + 'climate', + 'alcohol', + 'greek', + 'managing', + 'sister', + 'walking', + 'explain', + 'smaller', + 'newest', + 'happened', + 'extent', + 'sharp', + 'lesbians', + 'export', + 'managers', + 'aircraft', + 'modules', + 'sweden', + 'conflict', + 'versions', + 'employer', + 'occur', + 'knows', + 'describe', + 'concern', + 'backup', + 'citizens', + 'heritage', + 'holding', + 'trouble', + 'spread', + 'coach', + 'kevin', + 'expand', + 'audience', + 'assigned', + 'jordan', + 'affect', + 'virgin', + 'raised', + 'directed', + 'dealers', + 'sporting', + 'helping', + 'affected', + 'totally', + 'plate', + 'expenses', + 'indicate', + 'blonde', + 'anderson', + 'organic', + 'albums', + 'cheats', + 'guests', + 'hosted', + 'diseases', + 'nevada', + 'thailand', + 'agenda', + 'anyway', + 'tracks', + 'advisory', + 'logic', + 'template', + 'prince', + 'circle', + 'grants', + 'anywhere', + 'atlantic', + 'edward', + 'investor', + 'leaving', + 'wildlife', + 'cooking', + 'speaking', + 'sponsors', + 'respond', + 'sizes', + 'plain', + 'entered', + 'launch', + 'checking', + 'costa', + 'belgium', + 'guidance', + 'trail', + 'symbol', + 'crafts', + 'highway', + 'buddy', + 'observed', + 'setup', + 'booking', + 'glossary', + 'fiscal', + 'styles', + 'denver', + 'filled', + 'channels', + 'ericsson', + 'appendix', + 'notify', + 'blues', + 'portion', + 'scope', + 'supplier', + 'cables', + 'cotton', + 'biology', + 'dental', + 'killed', + 'border', + 'ancient', + 'debate', + 'starts', + 'causes', + 'arkansas', + 'leisure', + 'learned', + 'notebook', + 'explorer', + 'historic', + 'attached', + 'opened', + 'husband', + 'disabled', + 'crazy', + 'upcoming', + 'britain', + 'concert', + 'scores', + 'comedy', + 'adopted', + 'weblog', + 'linear', + 'bears', + 'carrier', + 'edited', + 'constant', + 'mouth', + 'jewish', + 'meter', + 'linked', + 'portland', + 'concepts', + 'reflect', + 'deliver', + 'wonder', + 'lessons', + 'fruit', + 'begins', + 'reform', + 'alerts', + 'treated', + 'mysql', + 'relating', + 'assume', + 'alliance', + 'confirm', + 'neither', + 'lewis', + 'howard', + 'offline', + 'leaves', + 'engineer', + 'replace', + 'checks', + 'reached', + 'becoming', + 'safari', + 'sugar', + 'stick', + 'allen', + 'relation', + 'enabled', + 'genre', + 'slide', + 'montana', + 'tested', + 'enhance', + 'exact', + 'bound', + 'adapter', + 'formal', + 'hockey', + 'storm', + 'micro', + 'colleges', + 'laptops', + 'showed', + 'editors', + 'threads', + 'supreme', + 'brothers', + 'presents', + 'dolls', + 'estimate', + 'cancel', + 'limits', + 'weapons', + 'paint', + 'delay', + 'pilot', + 'outlet', + 'czech', + 'novel', + 'ultra', + 'winner', + 'idaho', + 'episode', + 'potter', + 'plays', + 'bulletin', + 'modify', + 'oxford', + 'truly', + 'epinions', + 'painting', + 'universe', + 'patent', + 'eating', + 'planned', + 'watching', + 'lodge', + 'mirror', + 'sterling', + 'sessions', + 'kernel', + 'stocks', + 'buyers', + 'journals', + 'jennifer', + 'antonio', + 'charged', + 'broad', + 'taiwan', + 'chosen', + 'greece', + 'swiss', + 'sarah', + 'clark', + 'terminal', + 'nights', + 'behalf', + 'liquid', + 'nebraska', + 'salary', + 'foods', + 'gourmet', + 'guard', + 'properly', + 'orleans', + 'saving', + 'empire', + 'resume', + 'twenty', + 'newly', + 'raise', + 'prepare', + 'avatar', + 'illegal', + 'hundreds', + 'lincoln', + 'helped', + 'premier', + 'tomorrow', + 'decide', + 'consent', + 'drama', + 'visiting', + 'downtown', + 'keyboard', + 'contest', + 'bands', + 'suitable', + 'millions', + 'lunch', + 'audit', + 'chamber', + 'guinea', + 'findings', + 'muscle', + 'clicking', + 'polls', + 'typical', + 'tower', + 'yours', + 'chicken', + 'attend', + 'shower', + 'sending', + 'jason', + 'tonight', + 'holdem', + 'shell', + 'province', + 'catholic', + 'governor', + 'seemed', + 'swimming', + 'spyware', + 'formula', + 'solar', + 'catch', + 'pakistan', + 'reliable', + 'doubt', + 'finder', + 'unable', + 'periods', + 'tasks', + 'attacks', + 'const', + 'doors', + 'symptoms', + 'resorts', + 'biggest', + 'memorial', + 'visitor', + 'forth', + 'insert', + 'gateway', + 'alumni', + 'drawing', + 'ordered', + 'fighting', + 'happens', + 'romance', + 'bruce', + 'split', + 'themes', + 'powers', + 'heaven', + 'pregnant', + 'twice', + 'focused', + 'egypt', + 'bargain', + 'cellular', + 'norway', + 'vermont', + 'asking', + 'blocks', + 'normally', + 'hunting', + 'diabetes', + 'shift', + 'bodies', + 'cutting', + 'simon', + 'writers', + 'marks', + 'flexible', + 'loved', + 'mapping', + 'numerous', + 'birds', + 'indexed', + 'superior', + 'saved', + 'paying', + 'cartoon', + 'shots', + 'moore', + 'granted', + 'choices', + 'carbon', + 'spending', + 'magnetic', + 'registry', + 'crisis', + 'outlook', + 'massive', + 'denmark', + 'employed', + 'bright', + 'treat', + 'header', + 'poverty', + 'formed', + 'piano', + 'sheets', + 'patrick', + 'puerto', + 'displays', + 'plasma', + 'allowing', + 'earnings', + 'mystery', + 'journey', + 'delaware', + 'bidding', + 'risks', + 'banner', + 'charter', + 'barbara', + 'counties', + 'ports', + 'dreams', + 'blogger', + 'stands', + 'teach', + 'occurred', + 'rapid', + 'hairy', + 'reverse', + 'deposit', + 'seminar', + 'latina', + 'wheels', + 'specify', + 'dutch', + 'formats', + 'depends', + 'boots', + 'holds', + 'router', + 'concrete', + 'editing', + 'poland', + 'folder', + 'womens', + 'upload', + 'pulse', + 'voting', + 'courts', + 'notices', + 'detroit', + 'metro', + 'toshiba', + 'strip', + 'pearl', + 'accident', + 'resident', + 'possibly', + 'airline', + 'regard', + 'exists', + 'smooth', + 'strike', + 'flashing', + 'narrow', + 'threat', + 'surveys', + 'sitting', + 'putting', + 'vietnam', + 'trailer', + 'castle', + 'gardens', + 'missed', + 'malaysia', + 'antique', + 'labels', + 'willing', + 'acting', + 'heads', + 'stored', + 'logos', + 'antiques', + 'density', + 'hundred', + 'strange', + 'mention', + 'parallel', + 'honda', + 'amended', + 'operate', + 'bills', + 'bathroom', + 'stable', + 'opera', + 'doctors', + 'lesson', + 'cinema', + 'asset', + 'drinking', + 'reaction', + 'blank', + 'enhanced', + 'entitled', + 'severe', + 'generate', + 'deluxe', + 'humor', + 'monitors', + 'lived', + 'duration', + 'pursuant', + 'fabric', + 'visits', + 'tight', + 'domains', + 'contrast', + 'flying', + 'berlin', + 'siemens', + 'adoption', + 'meant', + 'capture', + 'pounds', + 'buffalo', + 'plane', + 'desire', + 'camping', + 'meets', + 'welfare', + 'caught', + 'marked', + 'driven', + 'measured', + 'medline', + 'bottle', + 'marshall', + 'massage', + 'rubber', + 'closing', + 'tampa', + 'thousand', + 'legend', + 'grace', + 'susan', + 'adams', + 'python', + 'monster', + 'villa', + 'columns', + 'hamilton', + 'cookies', + 'inner', + 'tutorial', + 'entity', + 'cruises', + 'holder', + 'portugal', + 'lawrence', + 'roman', + 'duties', + 'valuable', + 'ethics', + 'forever', + 'dragon', + 'captain', + 'imagine', + 'brings', + 'heating', + 'scripts', + 'stereo', + 'taste', + 'dealing', + 'commit', + 'airlines', + 'liberal', + 'livecam', + 'trips', + 'sides', + 'turns', + 'cache', + 'jacket', + 'oracle', + 'matthew', + 'lease', + 'aviation', + 'hobbies', + 'proud', + 'excess', + 'disaster', + 'console', + 'commands', + 'giant', + 'achieved', + 'injuries', + 'shipped', + 'seats', + 'alarm', + 'voltage', + 'anthony', + 'nintendo', + 'usual', + 'loading', + 'stamps', + 'appeared', + 'franklin', + 'angle', + 'vinyl', + 'mining', + 'ongoing', + 'worst', + 'imaging', + 'betting', + 'liberty', + 'wyoming', + 'convert', + 'analyst', + 'garage', + 'exciting', + 'thongs', + 'ringtone', + 'finland', + 'morgan', + 'derived', + 'pleasure', + 'honor', + 'oriented', + 'eagle', + 'desktops', + 'pants', + 'columbus', + 'nurse', + 'prayer', + 'quiet', + 'postage', + 'producer', + 'cheese', + 'comic', + 'crown', + 'maker', + 'crack', + 'picks', + 'semester', + 'fetish', + 'applies', + 'casinos', + 'smoke', + 'apache', + 'filters', + 'craft', + 'apart', + 'fellow', + 'blind', + 'lounge', + 'coins', + 'gross', + 'strongly', + 'hilton', + 'proteins', + 'horror', + 'familiar', + 'capable', + 'douglas', + 'debian', + 'epson', + 'elected', + 'carrying', + 'victory', + 'madison', + 'editions', + 'mainly', + 'ethnic', + 'actor', + 'finds', + 'fifth', + 'citizen', + 'vertical', + 'prize', + 'occurs', + 'absolute', + 'consists', + 'anytime', + 'soldiers', + 'guardian', + 'lecture', + 'layout', + 'classics', + 'horses', + 'dirty', + 'wayne', + 'donate', + 'taught', + 'worker', + 'alive', + 'temple', + 'prove', + 'wings', + 'breaks', + 'genetic', + 'waters', + 'promise', + 'prefer', + 'ridge', + 'cabinet', + 'modem', + 'harris', + 'bringing', + 'evaluate', + 'tiffany', + 'tropical', + 'collect', + 'toyota', + 'streets', + 'vector', + 'shaved', + 'turning', + 'buffer', + 'purple', + 'larry', + 'mutual', + 'pipeline', + 'syntax', + 'prison', + 'skill', + 'chairs', + 'everyday', + 'moves', + 'inquiry', + 'ethernet', + 'checked', + 'exhibit', + 'throw', + 'trend', + 'sierra', + 'visible', + 'desert', + 'oldest', + 'rhode', + 'mercury', + 'steven', + 'handbook', + 'navigate', + 'worse', + 'summit', + 'victims', + 'spaces', + 'burning', + 'escape', + 'coupons', + 'somewhat', + 'receiver', + 'cialis', + 'boats', + 'glance', + 'scottish', + 'arcade', + 'richmond', + 'russell', + 'tells', + 'obvious', + 'fiber', + 'graph', + 'covering', + 'platinum', + 'judgment', + 'bedrooms', + 'talks', + 'filing', + 'foster', + 'modeling', + 'passing', + 'awarded', + 'trials', + 'tissue', + 'clinton', + 'masters', + 'bonds', + 'alberta', + 'commons', + 'fraud', + 'spectrum', + 'arrival', + 'pottery', + 'emphasis', + 'roger', + 'aspect', + 'awesome', + 'mexican', + 'counts', + 'priced', + 'crash', + 'desired', + 'inter', + 'closer', + 'assumes', + 'heights', + 'shadow', + 'riding', + 'firefox', + 'expense', + 'grove', + 'venture', + 'clinic', + 'korean', + 'healing', + 'princess', + 'entering', + 'packet', + 'spray', + 'studios', + 'buttons', + 'funded', + 'thompson', + 'winners', + 'extend', + 'roads', + 'dublin', + 'rolling', + 'memories', + 'nelson', + 'arrived', + 'creates', + 'faces', + 'tourist', + 'mayor', + 'murder', + 'adequate', + 'senator', + 'yield', + 'grades', + 'cartoons', + 'digest', + 'lodging', + 'hence', + 'entirely', + 'replaced', + 'radar', + 'rescue', + 'losses', + 'combat', + 'reducing', + 'stopped', + 'lakes', + 'closely', + 'diary', + 'kings', + 'shooting', + 'flags', + 'baker', + 'launched', + 'shock', + 'walls', + 'abroad', + 'ebony', + 'drawn', + 'arthur', + 'visited', + 'walker', + 'suggests', + 'beast', + 'operated', + 'targets', + 'overseas', + 'dodge', + 'counsel', + 'pizza', + 'invited', + 'yards', + 'gordon', + 'farmers', + 'queries', + 'ukraine', + 'absence', + 'nearest', + 'cluster', + 'vendors', + 'whereas', + 'serves', + 'woods', + 'surprise', + 'partial', + 'shoppers', + 'couples', + 'ranking', + 'jokes', + 'simpson', + 'twiki', + 'sublime', + 'palace', + 'verify', + 'globe', + 'trusted', + 'copper', + 'dicke', + 'kerry', + 'receipt', + 'supposed', + 'ordinary', + 'nobody', + 'ghost', + 'applying', + 'pride', + 'knowing', + 'reporter', + 'keith', + 'champion', + 'cloudy', + 'linda', + 'chile', + 'plenty', + 'sentence', + 'throat', + 'ignore', + 'maria', + 'uniform', + 'wealth', + 'vacuum', + 'dancing', + 'brass', + 'writes', + 'plaza', + 'outcomes', + 'survival', + 'quest', + 'publish', + 'trans', + 'jonathan', + 'whenever', + 'lifetime', + 'pioneer', + 'booty', + 'acrobat', + 'plates', + 'acres', + 'venue', + 'athletic', + 'thermal', + 'essays', + 'vital', + 'telling', + 'fairly', + 'coastal', + 'config', + 'charity', + 'excel', + 'modes', + 'campbell', + 'stupid', + 'harbor', + 'hungary', + 'traveler', + 'segment', + 'realize', + 'enemy', + 'puzzle', + 'rising', + 'aluminum', + 'wells', + 'wishlist', + 'opens', + 'insight', + 'secrets', + 'lucky', + 'latter', + 'thick', + 'trailers', + 'repeat', + 'syndrome', + 'philips', + 'penalty', + 'glasses', + 'enables', + 'iraqi', + 'builder', + 'vista', + 'jessica', + 'chips', + 'terry', + 'flood', + 'arena', + 'pupils', + 'stewart', + 'outcome', + 'expanded', + 'casual', + 'grown', + 'polish', + 'lovely', + 'extras', + 'centres', + 'jerry', + 'clause', + 'smile', + 'lands', + 'troops', + 'indoor', + 'bulgaria', + 'armed', + 'broker', + 'charger', + 'believed', + 'cooling', + 'trucks', + 'divorce', + 'laura', + 'shopper', + 'tokyo', + 'partly', + 'nikon', + 'candy', + 'pills', + 'tiger', + 'donald', + 'folks', + 'sensor', + 'exposed', + 'telecom', + 'angels', + 'deputy', + 'sealed', + 'loaded', + 'scenes', + 'boost', + 'spanking', + 'founded', + 'chronic', + 'icons', + 'moral', + 'catering', + 'finger', + 'keeps', + 'pound', + 'locate', + 'trained', + 'roses', + 'bread', + 'tobacco', + 'wooden', + 'motors', + 'tough', + 'roberts', + 'incident', + 'gonna', + 'dynamics', + 'decrease', + 'chest', + 'pension', + 'billy', + 'revenues', + 'emerging', + 'worship', + 'craig', + 'herself', + 'churches', + 'damages', + 'reserves', + 'solve', + 'shorts', + 'minority', + 'diverse', + 'johnny', + 'recorder', + 'facing', + 'nancy', + 'tones', + 'passion', + 'sight', + 'defence', + 'patches', + 'refund', + 'towns', + 'trembl', + 'divided', + 'emails', + 'cyprus', + 'insider', + 'seminars', + 'makers', + 'hearts', + 'worry', + 'carter', + 'legacy', + 'pleased', + 'danger', + 'vitamin', + 'widely', + 'phrase', + 'genuine', + 'raising', + 'paradise', + 'hybrid', + 'reads', + 'roles', + 'glory', + 'bigger', + 'billing', + 'diesel', + 'versus', + 'combine', + 'exceed', + 'saudi', + 'fault', + 'babies', + 'karen', + 'compiled', + 'romantic', + 'revealed', + 'albert', + 'examine', + 'jimmy', + 'graham', + 'bristol', + 'margaret', + 'compaq', + 'slowly', + 'rugby', + 'portions', + 'infant', + 'sectors', + 'samuel', + 'fluid', + 'grounds', + 'regards', + 'unlike', + 'equation', + 'baskets', + 'wright', + 'barry', + 'proven', + 'cached', + 'warren', + 'studied', + 'reviewer', + 'involves', + 'profits', + 'devil', + 'grass', + 'comply', + 'marie', + 'florist', + 'cherry', + 'deutsch', + 'kenya', + 'webcam', + 'funeral', + 'nutten', + 'earrings', + 'enjoyed', + 'chapters', + 'charlie', + 'quebec', + 'dennis', + 'francis', + 'sized', + 'manga', + 'noticed', + 'socket', + 'silent', + 'literary', + 'signals', + 'theft', + 'swing', + 'symbols', + 'humans', + 'analog', + 'facial', + 'choosing', + 'talent', + 'dated', + 'seeker', + 'wisdom', + 'shoot', + 'boundary', + 'packard', + 'offset', + 'payday', + 'philip', + 'elite', + 'holders', + 'believes', + 'swedish', + 'poems', + 'deadline', + 'robot', + 'witness', + 'collins', + 'equipped', + 'stages', + 'winds', + 'powder', + 'broadway', + 'acquired', + 'assess', + 'stones', + 'entrance', + 'gnome', + 'roots', + 'losing', + 'attempts', + 'gadgets', + 'noble', + 'glasgow', + 'impacts', + 'gospel', + 'shore', + 'loves', + 'induced', + 'knight', + 'loose', + 'linking', + 'appeals', + 'earned', + 'illness', + 'islamic', + 'pending', + 'parker', + 'lebanon', + 'kennedy', + 'teenage', + 'triple', + 'cooper', + 'vincent', + 'secured', + 'unusual', + 'answered', + 'slots', + 'disorder', + 'routine', + 'toolbar', + 'rocks', + 'titans', + 'wearing', + 'sought', + 'genes', + 'mounted', + 'habitat', + 'firewall', + 'median', + 'scanner', + 'herein', + 'animated', + 'judicial', + 'integer', + 'bachelor', + 'attitude', + 'engaged', + 'falling', + 'basics', + 'montreal', + 'carpet', + 'struct', + 'lenses', + 'binary', + 'genetics', + 'attended', + 'dropped', + 'walter', + 'besides', + 'hosts', + 'moments', + 'atlas', + 'strings', + 'feels', + 'torture', + 'deleted', + 'mitchell', + 'ralph', + 'warner', + 'embedded', + 'inkjet', + 'wizard', + 'corps', + 'actors', + 'liver', + 'liable', + 'brochure', + 'morris', + 'petition', + 'eminem', + 'recall', + 'antenna', + 'picked', + 'assumed', + 'belief', + 'killing', + 'bikini', + 'memphis', + 'shoulder', + 'decor', + 'lookup', + 'texts', + 'harvard', + 'brokers', + 'diameter', + 'ottawa', + 'podcast', + 'seasons', + 'refine', + 'bidder', + 'singer', + 'evans', + 'herald', + 'literacy', + 'fails', + 'aging', + 'plugin', + 'diving', + 'invite', + 'alice', + 'latinas', + 'suppose', + 'involve', + 'moderate', + 'terror', + 'younger', + 'thirty', + 'opposite', + 'rapidly', + 'dealtime', + 'intro', + 'mercedes', + 'clerk', + 'mills', + 'outline', + 'tramadol', + 'holland', + 'receives', + 'jeans', + 'fonts', + 'refers', + 'favor', + 'veterans', + 'sigma', + 'xhtml', + 'occasion', + 'victim', + 'demands', + 'sleeping', + 'careful', + 'arrive', + 'sunset', + 'tracked', + 'moreover', + 'minimal', + 'lottery', + 'framed', + 'aside', + 'licence', + 'michelle', + 'essay', + 'dialogue', + 'camps', + 'declared', + 'aaron', + 'handheld', + 'trace', + 'disposal', + 'florists', + 'packs', + 'switches', + 'romania', + 'consult', + 'greatly', + 'blogging', + 'cycling', + 'midnight', + 'commonly', + 'inform', + 'turkish', + 'pentium', + 'quantum', + 'murray', + 'intent', + 'largely', + 'pleasant', + 'announce', + 'spoke', + 'arrow', + 'sampling', + 'rough', + 'weird', + 'inspired', + 'holes', + 'weddings', + 'blade', + 'suddenly', + 'oxygen', + 'cookie', + 'meals', + 'canyon', + 'meters', + 'merely', + 'passes', + 'pointer', + 'stretch', + 'durham', + 'permits', + 'muslim', + 'sleeve', + 'netscape', + 'cleaner', + 'cricket', + 'feeding', + 'stroke', + 'township', + 'rankings', + 'robin', + 'robinson', + 'strap', + 'sharon', + 'crowd', + 'olympic', + 'remained', + 'entities', + 'customs', + 'rainbow', + 'roulette', + 'decline', + 'gloves', + 'israeli', + 'medicare', + 'skiing', + 'cloud', + 'valve', + 'hewlett', + 'explains', + 'proceed', + 'flickr', + 'feelings', + 'knife', + 'jamaica', + 'shelf', + 'timing', + 'liked', + 'adopt', + 'denied', + 'fotos', + 'britney', + 'freeware', + 'donation', + 'outer', + 'deaths', + 'rivers', + 'tales', + 'katrina', + 'islam', + 'nodes', + 'thumbs', + 'seeds', + 'cited', + 'targeted', + 'skype', + 'realized', + 'twelve', + 'founder', + 'decade', + 'gamecube', + 'dispute', + 'tired', + 'titten', + 'adverse', + 'excerpt', + 'steam', + 'drinks', + 'voices', + 'acute', + 'climbing', + 'stood', + 'perfume', + 'carol', + 'honest', + 'albany', + 'restore', + 'stack', + 'somebody', + 'curve', + 'creator', + 'amber', + 'museums', + 'coding', + 'tracker', + 'passage', + 'trunk', + 'hiking', + 'pierre', + 'jelsoft', + 'headset', + 'oakland', + 'colombia', + 'waves', + 'camel', + 'lamps', + 'suicide', + 'archived', + 'arabia', + 'juice', + 'chase', + 'logical', + 'sauce', + 'extract', + 'panama', + 'payable', + 'courtesy', + 'athens', + 'judges', + 'retired', + 'remarks', + 'detected', + 'decades', + 'walked', + 'arising', + 'nissan', + 'bracelet', + 'juvenile', + 'afraid', + 'acoustic', + 'railway', + 'cassette', + 'pointed', + 'causing', + 'mistake', + 'norton', + 'locked', + 'fusion', + 'mineral', + 'steering', + 'beads', + 'fortune', + 'canvas', + 'parish', + 'claimed', + 'screens', + 'cemetery', + 'planner', + 'croatia', + 'flows', + 'stadium', + 'fewer', + 'coupon', + 'nurses', + 'proxy', + 'lanka', + 'edwards', + 'contests', + 'costume', + 'tagged', + 'berkeley', + 'voted', + 'killer', + 'bikes', + 'gates', + 'adjusted', + 'bishop', + 'pulled', + 'shaped', + 'seasonal', + 'farmer', + 'counters', + 'slave', + 'cultures', + 'norfolk', + 'coaching', + 'examined', + 'encoding', + 'heroes', + 'painted', + 'lycos', + 'zdnet', + 'artwork', + 'cosmetic', + 'resulted', + 'portrait', + 'ethical', + 'carriers', + 'mobility', + 'floral', + 'builders', + 'struggle', + 'schemes', + 'neutral', + 'fisher', + 'spears', + 'bedding', + 'joining', + 'heading', + 'equally', + 'bearing', + 'combo', + 'seniors', + 'worlds', + 'guilty', + 'haven', + 'tablet', + 'charm', + 'violent', + 'basin', + 'ranch', + 'crossing', + 'cottage', + 'drunk', + 'crimes', + 'resolved', + 'mozilla', + 'toner', + 'latex', + 'branches', + 'anymore', + 'delhi', + 'holdings', + 'alien', + 'locator', + 'broke', + 'nepal', + 'zimbabwe', + 'browsing', + 'resolve', + 'melissa', + 'moscow', + 'thesis', + 'nylon', + 'discs', + 'rocky', + 'bargains', + 'frequent', + 'nigeria', + 'ceiling', + 'pixels', + 'ensuring', + 'hispanic', + 'anybody', + 'diamonds', + 'fleet', + 'untitled', + 'bunch', + 'totals', + 'marriott', + 'singing', + 'afford', + 'starring', + 'referral', + 'optimal', + 'distinct', + 'turner', + 'sucking', + 'cents', + 'reuters', + 'spoken', + 'omega', + 'stayed', + 'civic', + 'manuals', + 'watched', + 'saver', + 'thereof', + 'grill', + 'redeem', + 'rogers', + 'grain', + 'regime', + 'wanna', + 'wishes', + 'depend', + 'differ', + 'ranging', + 'monica', + 'repairs', + 'breath', + 'candle', + 'hanging', + 'colored', + 'verified', + 'formerly', + 'situated', + 'seeks', + 'herbal', + 'loving', + 'strictly', + 'routing', + 'stanley', + 'retailer', + 'vitamins', + 'elegant', + 'gains', + 'renewal', + 'opposed', + 'deemed', + 'scoring', + 'brooklyn', + 'sisters', + 'critics', + 'spots', + 'hacker', + 'madrid', + 'margin', + 'solely', + 'salon', + 'norman', + 'turbo', + 'headed', + 'voters', + 'madonna', + 'murphy', + 'thinks', + 'thats', + 'soldier', + 'phillips', + 'aimed', + 'justin', + 'interval', + 'mirrors', + 'tricks', + 'reset', + 'brush', + 'expansys', + 'panels', + 'repeated', + 'assault', + 'spare', + 'kodak', + 'tongue', + 'bowling', + 'danish', + 'monkey', + 'filename', + 'skirt', + 'florence', + 'invest', + 'honey', + 'analyzes', + 'drawings', + 'scenario', + 'lovers', + 'atomic', + 'approx', + 'arabic', + 'gauge', + 'junction', + 'faced', + 'rachel', + 'solving', + 'weekends', + 'produces', + 'chains', + 'kingston', + 'sixth', + 'engage', + 'deviant', + 'quoted', + 'adapters', + 'farms', + 'imports', + 'cheat', + 'bronze', + 'sandy', + 'suspect', + 'macro', + 'sender', + 'crucial', + 'adjacent', + 'tuition', + 'spouse', + 'exotic', + 'viewer', + 'signup', + 'threats', + 'puzzles', + 'reaching', + 'damaged', + 'receptor', + 'laugh', + 'surgical', + 'destroy', + 'citation', + 'pitch', + 'autos', + 'premises', + 'perry', + 'proved', + 'imperial', + 'dozen', + 'benjamin', + 'teeth', + 'cloth', + 'studying', + 'stamp', + 'lotus', + 'salmon', + 'olympus', + 'cargo', + 'salem', + 'starter', + 'upgrades', + 'likes', + 'butter', + 'pepper', + 'weapon', + 'luggage', + 'burden', + 'tapes', + 'zones', + 'races', + 'stylish', + 'maple', + 'grocery', + 'offshore', + 'depot', + 'kenneth', + 'blend', + 'harrison', + 'julie', + 'emission', + 'finest', + 'realty', + 'janet', + 'apparent', + 'phpbb', + 'autumn', + 'probe', + 'toilet', + 'ranked', + 'jackets', + 'routes', + 'packed', + 'excited', + 'outreach', + 'helen', + 'mounting', + 'recover', + 'lopez', + 'balanced', + 'timely', + 'talked', + 'debug', + 'delayed', + 'chuck', + 'explicit', + 'villas', + 'ebook', + 'exclude', + 'peeing', + 'brooks', + 'newton', + 'anxiety', + 'bingo', + 'whilst', + 'spatial', + 'ceramic', + 'prompt', + 'precious', + 'minds', + 'annually', + 'scanners', + 'xanax', + 'fingers', + 'sunny', + 'ebooks', + 'delivers', + 'necklace', + 'leeds', + 'cedar', + 'arranged', + 'theaters', + 'advocacy', + 'raleigh', + 'threaded', + 'qualify', + 'blair', + 'hopes', + 'mason', + 'diagram', + 'burns', + 'pumps', + 'footwear', + 'beijing', + 'peoples', + 'victor', + 'mario', + 'attach', + 'licenses', + 'utils', + 'removing', + 'advised', + 'spider', + 'ranges', + 'pairs', + 'trails', + 'hudson', + 'isolated', + 'calgary', + 'interim', + 'assisted', + 'divine', + 'approve', + 'chose', + 'compound', + 'abortion', + 'dialog', + 'venues', + 'blast', + 'wellness', + 'calcium', + 'newport', + 'indians', + 'shield', + 'harvest', + 'membrane', + 'prague', + 'previews', + 'locally', + 'pickup', + 'mothers', + 'nascar', + 'iceland', + 'candles', + 'sailing', + 'sacred', + 'morocco', + 'chrome', + 'tommy', + 'refused', + 'brake', + 'exterior', + 'greeting', + 'ecology', + 'oliver', + 'congo', + 'botswana', + 'delays', + 'olive', + 'cyber', + 'verizon', + 'scored', + 'clone', + 'velocity', + 'lambda', + 'relay', + 'composed', + 'tears', + 'oasis', + 'baseline', + 'angry', + 'silicon', + 'compete', + 'lover', + 'belong', + 'honolulu', + 'beatles', + 'rolls', + 'thomson', + 'barnes', + 'malta', + 'daddy', + 'ferry', + 'rabbit', + 'seating', + 'exports', + 'omaha', + 'electron', + 'loads', + 'heather', + 'passport', + 'motel', + 'unions', + 'treasury', + 'warrant', + 'solaris', + 'frozen', + 'occupied', + 'royalty', + 'scales', + 'rally', + 'observer', + 'sunshine', + 'strain', + 'ceremony', + 'somehow', + 'arrested', + 'yamaha', + 'hebrew', + 'gained', + 'dying', + 'laundry', + 'stuck', + 'solomon', + 'placing', + 'stops', + 'homework', + 'adjust', + 'assessed', + 'enabling', + 'filling', + 'imposed', + 'silence', + 'focuses', + 'soviet', + 'treaty', + 'vocal', + 'trainer', + 'organ', + 'stronger', + 'volumes', + 'advances', + 'lemon', + 'toxic', + 'darkness', + 'bizrate', + 'vienna', + 'implied', + 'stanford', + 'packing', + 'statute', + 'rejected', + 'satisfy', + 'shelter', + 'chapel', + 'gamespot', + 'layers', + 'guided', + 'bahamas', + 'powell', + 'mixture', + 'bench', + 'rider', + 'radius', + 'logging', + 'hampton', + 'borders', + 'butts', + 'bobby', + 'sheep', + 'railroad', + 'lectures', + 'wines', + 'nursery', + 'harder', + 'cheapest', + 'travesti', + 'stuart', + 'salvador', + 'salad', + 'monroe', + 'tender', + 'paste', + 'clouds', + 'tanzania', + 'preserve', + 'unsigned', + 'staying', + 'easter', + 'theories', + 'praise', + 'jeremy', + 'venice', + 'estonia', + 'veteran', + 'streams', + 'landing', + 'signing', + 'executed', + 'katie', + 'showcase', + 'integral', + 'relax', + 'namibia', + 'synopsis', + 'hardly', + 'prairie', + 'reunion', + 'composer', + 'sword', + 'absent', + 'sells', + 'ecuador', + 'hoping', + 'accessed', + 'spirits', + 'coral', + 'pixel', + 'float', + 'colin', + 'imported', + 'paths', + 'bubble', + 'acquire', + 'contrary', + 'tribune', + 'vessel', + 'acids', + 'focusing', + 'viruses', + 'cheaper', + 'admitted', + 'dairy', + 'admit', + 'fancy', + 'equality', + 'samoa', + 'stickers', + 'leasing', + 'lauren', + 'beliefs', + 'squad', + 'analyze', + 'ashley', + 'scroll', + 'relate', + 'wages', + 'suffer', + 'forests', + 'invalid', + 'concerts', + 'martial', + 'males', + 'retain', + 'execute', + 'tunnel', + 'genres', + 'cambodia', + 'patents', + 'chaos', + 'wheat', + 'beaver', + 'updating', + 'readings', + 'kijiji', + 'confused', + 'compiler', + 'eagles', + 'bases', + 'accused', + 'unity', + 'bride', + 'defines', + 'airports', + 'begun', + 'brunette', + 'packets', + 'anchor', + 'socks', + 'parade', + 'trigger', + 'gathered', + 'essex', + 'slovenia', + 'notified', + 'beaches', + 'folders', + 'dramatic', + 'surfaces', + 'terrible', + 'routers', + 'pendant', + 'dresses', + 'baptist', + 'hiring', + 'clocks', + 'females', + 'wallace', + 'reflects', + 'taxation', + 'fever', + 'cuisine', + 'surely', + 'myspace', + 'theorem', + 'stylus', + 'drums', + 'arnold', + 'chicks', + 'cattle', + 'radical', + 'rover', + 'treasure', + 'reload', + 'flame', + 'levitra', + 'tanks', + 'assuming', + 'monetary', + 'elderly', + 'floating', + 'bolivia', + 'spell', + 'hottest', + 'stevens', + 'kuwait', + 'emily', + 'alleged', + 'compile', + 'webster', + 'struck', + 'plymouth', + 'warnings', + 'bridal', + 'annex', + 'tribal', + 'curious', + 'freight', + 'rebate', + 'meetup', + 'eclipse', + 'sudan', + 'shuttle', + 'stunning', + 'cycles', + 'affects', + 'detect', + 'actively', + 'ampland', + 'fastest', + 'butler', + 'injured', + 'payroll', + 'cookbook', + 'courier', + 'uploaded', + 'hints', + 'collapse', + 'americas', + 'unlikely', + 'techno', + 'beverage', + 'tribute', + 'wired', + 'elvis', + 'immune', + 'latvia', + 'forestry', + 'barriers', + 'rarely', + 'infected', + 'martha', + 'genesis', + 'barrier', + 'argue', + 'trains', + 'metals', + 'bicycle', + 'letting', + 'arise', + 'celtic', + 'thereby', + 'jamie', + 'particle', + 'minerals', + 'advise', + 'humidity', + 'bottles', + 'boxing', + 'bangkok', + 'hughes', + 'jeffrey', + 'chess', + 'operates', + 'brisbane', + 'survive', + 'oscar', + 'menus', + 'reveal', + 'canal', + 'amino', + 'herbs', + 'clinics', + 'manitoba', + 'missions', + 'watson', + 'lying', + 'costumes', + 'strict', + 'saddam', + 'drill', + 'offense', + 'bryan', + 'protest', + 'hobby', + 'tries', + 'nickname', + 'inline', + 'washing', + 'staffing', + 'trick', + 'enquiry', + 'closure', + 'timber', + 'intense', + 'playlist', + 'showers', + 'ruling', + 'steady', + 'statutes', + 'myers', + 'drops', + 'wider', + 'plugins', + 'enrolled', + 'sensors', + 'screw', + 'publicly', + 'hourly', + 'blame', + 'geneva', + 'freebsd', + 'reseller', + 'handed', + 'suffered', + 'intake', + 'informal', + 'tucson', + 'heavily', + 'swingers', + 'fifty', + 'headers', + 'mistakes', + 'uncle', + 'defining', + 'counting', + 'assure', + 'devoted', + 'jacob', + 'sodium', + 'randy', + 'hormone', + 'timothy', + 'brick', + 'naval', + 'medieval', + 'bridges', + 'captured', + 'thehun', + 'decent', + 'casting', + 'dayton', + 'shortly', + 'cameron', + 'carlos', + 'donna', + 'andreas', + 'warrior', + 'diploma', + 'cabin', + 'innocent', + 'scanning', + 'valium', + 'copying', + 'cordless', + 'patricia', + 'eddie', + 'uganda', + 'fired', + 'trivia', + 'adidas', + 'perth', + 'grammar', + 'syria', + 'disagree', + 'klein', + 'harvey', + 'tires', + 'hazard', + 'retro', + 'gregory', + 'episodes', + 'boolean', + 'circular', + 'anger', + 'mainland', + 'suits', + 'chances', + 'interact', + 'bizarre', + 'glenn', + 'auckland', + 'olympics', + 'fruits', + 'ribbon', + 'startup', + 'suzuki', + 'trinidad', + 'kissing', + 'handy', + 'exempt', + 'crops', + 'reduces', + 'geometry', + 'slovakia', + 'guild', + 'gorgeous', + 'capitol', + 'dishes', + 'barbados', + 'chrysler', + 'nervous', + 'refuse', + 'extends', + 'mcdonald', + 'replica', + 'plumbing', + 'brussels', + 'tribe', + 'trades', + 'superb', + 'trinity', + 'handled', + 'legends', + 'floors', + 'exhaust', + 'shanghai', + 'speaks', + 'burton', + 'davidson', + 'copied', + 'scotia', + 'farming', + 'gibson', + 'roller', + 'batch', + 'organize', + 'alter', + 'nicole', + 'latino', + 'ghana', + 'edges', + 'mixing', + 'handles', + 'skilled', + 'fitted', + 'harmony', + 'asthma', + 'twins', + 'triangle', + 'amend', + 'oriental', + 'reward', + 'windsor', + 'zambia', + 'hydrogen', + 'webshots', + 'sprint', + 'chick', + 'advocate', + 'inputs', + 'genome', + 'escorts', + 'thong', + 'medal', + 'coaches', + 'vessels', + 'walks', + 'knives', + 'arrange', + 'artistic', + 'honors', + 'booth', + 'indie', + 'unified', + 'bones', + 'breed', + 'detector', + 'ignored', + 'polar', + 'fallen', + 'precise', + 'sussex', + 'msgid', + 'invoice', + 'gather', + 'backed', + 'alfred', + 'colonial', + 'carey', + 'motels', + 'forming', + 'embassy', + 'danny', + 'rebecca', + 'slight', + 'proceeds', + 'indirect', + 'amongst', + 'msgstr', + 'arrest', + 'adipex', + 'horizon', + 'deeply', + 'toolbox', + 'marina', + 'prizes', + 'bosnia', + 'browsers', + 'patio', + 'surfing', + 'lloyd', + 'optics', + 'pursue', + 'overcome', + 'attract', + 'brighton', + 'beans', + 'ellis', + 'disable', + 'snake', + 'succeed', + 'leonard', + 'lending', + 'reminder', + 'searched', + 'plains', + 'raymond', + 'insights', + 'sullivan', + 'midwest', + 'karaoke', + 'lonely', + 'hereby', + 'observe', + 'julia', + 'berry', + 'collar', + 'racial', + 'bermuda', + 'amanda', + 'mobiles', + 'kelkoo', + 'exhibits', + 'terrace', + 'bacteria', + 'replied', + 'seafood', + 'novels', + 'ought', + 'safely', + 'finite', + 'kidney', + 'fixes', + 'sends', + 'durable', + 'mazda', + 'allied', + 'throws', + 'moisture', + 'roster', + 'symantec', + 'spencer', + 'wichita', + 'nasdaq', + 'uruguay', + 'timer', + 'tablets', + 'tuning', + 'gotten', + 'tyler', + 'futures', + 'verse', + 'highs', + 'wanting', + 'custody', + 'scratch', + 'launches', + 'ellen', + 'rocket', + 'bullet', + 'towers', + 'racks', + 'nasty', + 'latitude', + 'tumor', + 'deposits', + 'beverly', + 'mistress', + 'trustees', + 'watts', + 'duncan', + 'reprints', + 'bernard', + 'forty', + 'tubes', + 'midlands', + 'priest', + 'floyd', + 'ronald', + 'analysts', + 'queue', + 'trance', + 'locale', + 'nicholas', + 'bundle', + 'hammer', + 'invasion', + 'runner', + 'notion', + 'skins', + 'mailed', + 'fujitsu', + 'spelling', + 'arctic', + 'exams', + 'rewards', + 'beneath', + 'defend', + 'medicaid', + 'infrared', + 'seventh', + 'welsh', + 'belly', + 'quarters', + 'stolen', + 'soonest', + 'haiti', + 'naturals', + 'lenders', + 'fitting', + 'fixtures', + 'bloggers', + 'agrees', + 'surplus', + 'elder', + 'sonic', + 'cheers', + 'belarus', + 'zoning', + 'gravity', + 'thumb', + 'guitars', + 'essence', + 'flooring', + 'ethiopia', + 'mighty', + 'athletes', + 'humanity', + 'holmes', + 'scholars', + 'galaxy', + 'chester', + 'snapshot', + 'caring', + 'segments', + 'dominant', + 'twist', + 'itunes', + 'stomach', + 'buried', + 'newbie', + 'minimize', + 'darwin', + 'ranks', + 'debut', + 'bradley', + 'anatomy', + 'fraction', + 'defects', + 'milton', + 'marker', + 'clarity', + 'sandra', + 'adelaide', + 'monaco', + 'settled', + 'folding', + 'emirates', + 'airfare', + 'vaccine', + 'belize', + 'promised', + 'volvo', + 'penny', + 'robust', + 'bookings', + 'minolta', + 'porter', + 'jungle', + 'ivory', + 'alpine', + 'andale', + 'fabulous', + 'remix', + 'alias', + 'newer', + 'spice', + 'implies', + 'cooler', + 'maritime', + 'periodic', + 'overhead', + 'ascii', + 'prospect', + 'shipment', + 'breeding', + 'donor', + 'tension', + 'trash', + 'shapes', + 'manor', + 'envelope', + 'diane', + 'homeland', + 'excluded', + 'andrea', + 'breeds', + 'rapids', + 'disco', + 'bailey', + 'endif', + 'emotions', + 'incoming', + 'lexmark', + 'cleaners', + 'eternal', + 'cashiers', + 'rotation', + 'eugene', + 'metric', + 'minus', + 'bennett', + 'hotmail', + 'joshua', + 'armenia', + 'varied', + 'grande', + 'closest', + 'actress', + 'assign', + 'tigers', + 'aurora', + 'slides', + 'milan', + 'premiere', + 'lender', + 'villages', + 'shade', + 'chorus', + 'rhythm', + 'digit', + 'argued', + 'dietary', + 'symphony', + 'clarke', + 'sudden', + 'marilyn', + 'lions', + 'findlaw', + 'pools', + 'lyric', + 'claire', + 'speeds', + 'matched', + 'carroll', + 'rational', + 'fighters', + 'chambers', + 'warming', + 'vocals', + 'fountain', + 'chubby', + 'grave', + 'burner', + 'finnish', + 'gentle', + 'deeper', + 'muslims', + 'footage', + 'howto', + 'worthy', + 'reveals', + 'saints', + 'carries', + 'devon', + 'helena', + 'saves', + 'regarded', + 'marion', + 'lobby', + 'egyptian', + 'tunisia', + 'outlined', + 'headline', + 'treating', + 'punch', + 'gotta', + 'cowboy', + 'bahrain', + 'enormous', + 'karma', + 'consist', + 'betty', + 'queens', + 'lucas', + 'tribes', + 'defeat', + 'clicks', + 'honduras', + 'naughty', + 'hazards', + 'insured', + 'harper', + 'mardi', + 'tenant', + 'cabinets', + 'tattoo', + 'shake', + 'algebra', + 'shadows', + 'holly', + 'silly', + 'mercy', + 'hartford', + 'freely', + 'marcus', + 'sunrise', + 'wrapping', + 'weblogs', + 'timeline', + 'belongs', + 'readily', + 'fence', + 'nudist', + 'infinite', + 'diana', + 'ensures', + 'lindsay', + 'legally', + 'shame', + 'civilian', + 'fatal', + 'remedy', + 'realtors', + 'briefly', + 'genius', + 'fighter', + 'flesh', + 'retreat', + 'adapted', + 'barely', + 'wherever', + 'estates', + 'democrat', + 'borough', + 'failing', + 'retained', + 'pamela', + 'andrews', + 'marble', + 'jesse', + 'logitech', + 'surrey', + 'briefing', + 'belkin', + 'highland', + 'modular', + 'brandon', + 'giants', + 'balloon', + 'winston', + 'solved', + 'hawaiian', + 'gratuit', + 'consoles', + 'qatar', + 'magnet', + 'porsche', + 'cayman', + 'jaguar', + 'sheer', + 'posing', + 'hopkins', + 'urgent', + 'infants', + 'gothic', + 'cylinder', + 'witch', + 'cohen', + 'puppy', + 'kathy', + 'graphs', + 'surround', + 'revenge', + 'expires', + 'enemies', + 'finances', + 'accepts', + 'enjoying', + 'patrol', + 'smell', + 'italiano', + 'carnival', + 'roughly', + 'sticker', + 'promises', + 'divide', + 'cornell', + 'satin', + 'deserve', + 'mailto', + 'promo', + 'worried', + 'tunes', + 'garbage', + 'combines', + 'bradford', + 'phrases', + 'chelsea', + 'boring', + 'reynolds', + 'speeches', + 'reaches', + 'schema', + 'catalogs', + 'quizzes', + 'prefix', + 'lucia', + 'savannah', + 'barrel', + 'typing', + 'nerve', + 'planets', + 'deficit', + 'boulder', + 'pointing', + 'renew', + 'coupled', + 'myanmar', + 'metadata', + 'harold', + 'circuits', + 'floppy', + 'texture', + 'handbags', + 'somerset', + 'incurred', + 'antigua', + 'thunder', + 'caution', + 'locks', + 'namely', + 'euros', + 'pirates', + 'aerial', + 'rebel', + 'origins', + 'hired', + 'makeup', + 'textile', + 'nathan', + 'tobago', + 'indexes', + 'hindu', + 'licking', + 'markers', + 'weights', + 'albania', + 'lasting', + 'wicked', + 'kills', + 'roommate', + 'webcams', + 'pushed', + 'slope', + 'reggae', + 'failures', + 'surname', + 'theology', + 'nails', + 'evident', + 'whats', + 'rides', + 'rehab', + 'saturn', + 'allergy', + 'twisted', + 'merit', + 'enzyme', + 'zshops', + 'planes', + 'edmonton', + 'tackle', + 'disks', + 'condo', + 'pokemon', + 'ambien', + 'retrieve', + 'vernon', + 'worldcat', + 'titanium', + 'fairy', + 'builds', + 'shaft', + 'leslie', + 'casio', + 'deutsche', + 'postings', + 'kitty', + 'drain', + 'monte', + 'fires', + 'algeria', + 'blessed', + 'cardiff', + 'cornwall', + 'favors', + 'potato', + 'panic', + 'sticks', + 'leone', + 'excuse', + 'reforms', + 'basement', + 'onion', + 'strand', + 'sandwich', + 'lawsuit', + 'cheque', + 'banners', + 'reject', + 'circles', + 'italic', + 'beats', + 'merry', + 'scuba', + 'passive', + 'valued', + 'courage', + 'verde', + 'gazette', + 'hitachi', + 'batman', + 'hearings', + 'coleman', + 'anaheim', + 'textbook', + 'dried', + 'luther', + 'frontier', + 'settle', + 'stopping', + 'refugees', + 'knights', + 'palmer', + 'derby', + 'peaceful', + 'altered', + 'pontiac', + 'doctrine', + 'scenic', + 'trainers', + 'sewing', + 'conclude', + 'munich', + 'celebs', + 'propose', + 'lighter', + 'advisors', + 'pavilion', + 'tactics', + 'trusts', + 'talented', + 'annie', + 'pillow', + 'derek', + 'shorter', + 'harley', + 'relying', + 'finals', + 'paraguay', + 'steal', + 'parcel', + 'refined', + 'fifteen', + 'fears', + 'predict', + 'boutique', + 'acrylic', + 'rolled', + 'tuner', + 'peterson', + 'shannon', + 'toddler', + 'flavor', + 'alike', + 'homeless', + 'horrible', + 'hungry', + 'metallic', + 'blocked', + 'warriors', + 'cadillac', + 'malawi', + 'sagem', + 'curtis', + 'parental', + 'strikes', + 'lesser', + 'marathon', + 'pressing', + 'gasoline', + 'dressed', + 'scout', + 'belfast', + 'dealt', + 'niagara', + 'warcraft', + 'charms', + 'catalyst', + 'trader', + 'bucks', + 'denial', + 'thrown', + 'prepaid', + 'raises', + 'electro', + 'badge', + 'wrist', + 'analyzed', + 'heath', + 'ballot', + 'lexus', + 'varying', + 'remedies', + 'validity', + 'trustee', + 'weighted', + 'angola', + 'performs', + 'plastics', + 'realm', + 'jenny', + 'helmet', + 'salaries', + 'postcard', + 'elephant', + 'yemen', + 'tsunami', + 'scholar', + 'nickel', + 'buses', + 'expedia', + 'geology', + 'coating', + 'wallet', + 'cleared', + 'smilies', + 'boating', + 'drainage', + 'shakira', + 'corners', + 'broader', + 'rouge', + 'yeast', + 'clearing', + 'coated', + 'intend', + 'louise', + 'kenny', + 'routines', + 'hitting', + 'yukon', + 'beings', + 'aquatic', + 'reliance', + 'habits', + 'striking', + 'podcasts', + 'singh', + 'gilbert', + 'ferrari', + 'brook', + 'outputs', + 'ensemble', + 'insulin', + 'assured', + 'biblical', + 'accent', + 'mysimon', + 'eleven', + 'wives', + 'ambient', + 'utilize', + 'mileage', + 'prostate', + 'adaptor', + 'auburn', + 'unlock', + 'hyundai', + 'pledge', + 'vampire', + 'angela', + 'relates', + 'nitrogen', + 'xerox', + 'merger', + 'softball', + 'firewire', + 'nextel', + 'framing', + 'musician', + 'blocking', + 'rwanda', + 'sorts', + 'vsnet', + 'limiting', + 'dispatch', + 'papua', + 'restored', + 'armor', + 'riders', + 'chargers', + 'remark', + 'dozens', + 'varies', + 'rendered', + 'picking', + 'guards', + 'openings', + 'councils', + 'kruger', + 'pockets', + 'granny', + 'viral', + 'inquire', + 'pipes', + 'laden', + 'aruba', + 'cottages', + 'realtor', + 'merge', + 'edgar', + 'develops', + 'chassis', + 'dubai', + 'pushing', + 'fleece', + 'pierce', + 'allan', + 'dressing', + 'sperm', + 'filme', + 'craps', + 'frost', + 'sally', + 'yacht', + 'tracy', + 'prefers', + 'drilling', + 'breach', + 'whale', + 'tomatoes', + 'bedford', + 'mustang', + 'clusters', + 'antibody', + 'momentum', + 'wiring', + 'pastor', + 'calvin', + 'shark', + 'phases', + 'grateful', + 'emerald', + 'laughing', + 'grows', + 'cliff', + 'tract', + 'ballet', + 'abraham', + 'bumper', + 'webpage', + 'garlic', + 'hostels', + 'shine', + 'senegal', + 'banned', + 'wendy', + 'briefs', + 'diffs', + 'mumbai', + 'ozone', + 'radios', + 'tariff', + 'nvidia', + 'opponent', + 'pasta', + 'muscles', + 'serum', + 'wrapped', + 'swift', + 'runtime', + 'inbox', + 'focal', + 'distant', + 'decimal', + 'propecia', + 'samba', + 'hostel', + 'employ', + 'mongolia', + 'penguin', + 'magical', + 'miracle', + 'manually', + 'reprint', + 'centered', + 'yearly', + 'wound', + 'belle', + 'writings', + 'hamburg', + 'cindy', + 'fathers', + 'charging', + 'marvel', + 'lined', + 'petite', + 'terrain', + 'strips', + 'gossip', + 'rangers', + 'rotary', + 'discrete', + 'beginner', + 'boxed', + 'cubic', + 'sapphire', + 'kinase', + 'skirts', + 'crawford', + 'labeled', + 'marking', + 'serbia', + 'sheriff', + 'griffin', + 'declined', + 'guyana', + 'spies', + 'neighbor', + 'elect', + 'highways', + 'thinkpad', + 'intimate', + 'preston', + 'deadly', + 'bunny', + 'chevy', + 'rounds', + 'longest', + 'tions', + 'dentists', + 'flyer', + 'dosage', + 'variance', + 'cameroon', + 'baking', + 'adaptive', + 'computed', + 'needle', + 'baths', + 'brakes', + 'nirvana', + 'invision', + 'sticky', + 'destiny', + 'generous', + 'madness', + 'emacs', + 'climb', + 'blowing', + 'heated', + 'jackie', + 'sparc', + 'cardiac', + 'dover', + 'adrian', + 'vatican', + 'brutal', + 'learners', + 'token', + 'seekers', + 'yields', + 'suited', + 'numeric', + 'skating', + 'kinda', + 'aberdeen', + 'emperor', + 'dylan', + 'belts', + 'blacks', + 'educated', + 'rebates', + 'burke', + 'proudly', + 'inserted', + 'pulling', + 'basename', + 'obesity', + 'curves', + 'suburban', + 'touring', + 'clara', + 'vertex', + 'tomato', + 'andorra', + 'expired', + 'travels', + 'flush', + 'waiver', + 'hayes', + 'delight', + 'survivor', + 'garcia', + 'cingular', + 'moses', + 'counted', + 'declare', + 'johns', + 'valves', + 'impaired', + 'donors', + 'jewel', + 'teddy', + 'teaches', + 'ventures', + 'bufing', + 'stranger', + 'tragedy', + 'julian', + 'dryer', + 'painful', + 'velvet', + 'tribunal', + 'ruled', + 'pensions', + 'prayers', + 'funky', + 'nowhere', + 'joins', + 'wesley', + 'lately', + 'scary', + 'mattress', + 'mpegs', + 'brunei', + 'likewise', + 'banana', + 'slovak', + 'cakes', + 'mixer', + 'remind', + 'sbjct', + 'charming', + 'tooth', + 'annoying', + 'stays', + 'disclose', + 'affair', + 'drove', + 'washer', + 'upset', + 'restrict', + 'springer', + 'beside', + 'mines', + 'rebound', + 'logan', + 'mentor', + 'fought', + 'baghdad', + 'metres', + 'pencil', + 'freeze', + 'titled', + 'sphere', + 'ratios', + 'concord', + 'endorsed', + 'walnut', + 'lance', + 'ladder', + 'italia', + 'liberia', + 'sherman', + 'maximize', + 'hansen', + 'senators', + 'workout', + 'bleeding', + 'colon', + 'lanes', + 'purse', + 'optimize', + 'stating', + 'caroline', + 'align', + 'bless', + 'engaging', + 'crest', + 'triumph', + 'welding', + 'deferred', + 'alloy', + 'condos', + 'plots', + 'polished', + 'gently', + 'tulsa', + 'locking', + 'casey', + 'draws', + 'fridge', + 'blanket', + 'bloom', + 'simpsons', + 'elliott', + 'fraser', + 'justify', + 'blades', + 'loops', + 'surge', + 'trauma', + 'tahoe', + 'advert', + 'possess', + 'flashers', + 'subaru', + 'vanilla', + 'picnic', + 'souls', + 'arrivals', + 'spank', + 'hollow', + 'vault', + 'securely', + 'fioricet', + 'groove', + 'pursuit', + 'wires', + 'mails', + 'backing', + 'sleeps', + 'blake', + 'travis', + 'endless', + 'figured', + 'orbit', + 'niger', + 'bacon', + 'heater', + 'colony', + 'cannon', + 'circus', + 'promoted', + 'forbes', + 'moldova', + 'paxil', + 'spine', + 'trout', + 'enclosed', + 'cooked', + 'thriller', + 'transmit', + 'apnic', + 'fatty', + 'gerald', + 'pressed', + 'scanned', + 'hunger', + 'mariah', + 'joyce', + 'surgeon', + 'cement', + 'planners', + 'disputes', + 'textiles', + 'missile', + 'intranet', + 'closes', + 'deborah', + 'marco', + 'assists', + 'gabriel', + 'auditor', + 'aquarium', + 'violin', + 'prophet', + 'bracket', + 'isaac', + 'oxide', + 'naples', + 'promptly', + 'modems', + 'harmful', + 'prozac', + 'sexually', + 'dividend', + 'newark', + 'glucose', + 'phantom', + 'playback', + 'turtle', + 'warned', + 'neural', + 'fossil', + 'hometown', + 'badly', + 'apollo', + 'persian', + 'handmade', + 'greene', + 'robots', + 'grenada', + 'scoop', + 'earning', + 'mailman', + 'sanyo', + 'nested', + 'somalia', + 'movers', + 'verbal', + 'blink', + 'carlo', + 'workflow', + 'novelty', + 'bryant', + 'tiles', + 'voyuer', + 'switched', + 'tamil', + 'garmin', + 'fuzzy', + 'grams', + 'richards', + 'budgets', + 'toolkit', + 'render', + 'carmen', + 'hardwood', + 'erotica', + 'temporal', + 'forge', + 'dense', + 'brave', + 'awful', + 'airplane', + 'istanbul', + 'impose', + 'viewers', + 'asbestos', + 'meyer', + 'enters', + 'savage', + 'willow', + 'resumes', + 'throwing', + 'existed', + 'wagon', + 'barbie', + 'knock', + 'potatoes', + 'thorough', + 'peers', + 'roland', + 'optimum', + 'quilt', + 'creature', + 'mounts', + 'syracuse', + 'refresh', + 'webcast', + 'michel', + 'subtle', + 'notre', + 'maldives', + 'stripes', + 'firmware', + 'shepherd', + 'canberra', + 'cradle', + 'mambo', + 'flour', + 'sympathy', + 'choir', + 'avoiding', + 'blond', + 'expects', + 'jumping', + 'fabrics', + 'polymer', + 'hygiene', + 'poultry', + 'virtue', + 'burst', + 'surgeons', + 'bouquet', + 'promotes', + 'mandate', + 'wiley', + 'corpus', + 'johnston', + 'fibre', + 'shades', + 'indices', + 'adware', + 'zoloft', + 'prisoner', + 'daisy', + 'halifax', + 'ultram', + 'cursor', + 'earliest', + 'donated', + 'stuffed', + 'insects', + 'crude', + 'morrison', + 'maiden', + 'examines', + 'viking', + 'myrtle', + 'bored', + 'cleanup', + 'bother', + 'budapest', + 'knitting', + 'attacked', + 'bhutan', + 'mating', + 'compute', + 'redhead', + 'arrives', + 'tractor', + 'allah', + 'unwrap', + 'fares', + 'resist', + 'hoped', + 'safer', + 'wagner', + 'touched', + 'cologne', + 'wishing', + 'ranger', + 'smallest', + 'newman', + 'marsh', + 'ricky', + 'scared', + 'theta', + 'monsters', + 'asylum', + 'lightbox', + 'robbie', + 'stake', + 'cocktail', + 'outlets', + 'arbor', + 'poison' +]; + +export function getRandomWords(length: number, distinct: boolean = true): string[] { + if (length <= 0) { + throw new Error('Invalid length parameter. Length must be greater than 0.'); + } + + if (!distinct) { + const randomWords: string[] = []; + for (let i = 0; i < length; i++) { + const randomIndex: number = Math.floor(Math.random() * words.length); + randomWords.push(words[randomIndex]); + } + return randomWords; + } + + if (length >= words.length) return words; + + const randomWordsSet: Set = new Set(); + const randomWords: string[] = []; + + while (randomWordsSet.size < length) { + const randomIndex: number = Math.floor(Math.random() * words.length); + const randomWord: string = words[randomIndex]; + if (!randomWordsSet.has(randomWord)) { + randomWordsSet.add(randomWord); + randomWords.push(randomWord); + } + } + + return randomWords; +} + +export function getRandomIndex(vertexes: any[]) { + return getRandomInt(0, vertexes.length - 1); +} diff --git a/test/utils/big-o.ts b/test/utils/big-o.ts index d197e07..5d5d906 100644 --- a/test/utils/big-o.ts +++ b/test/utils/big-o.ts @@ -11,7 +11,13 @@ export const magnitude = { N_LOG_N: Math.pow(10, 4 - orderReducedBy), SQUARED: Math.pow(10, 3 - orderReducedBy), CUBED: Math.pow(10, 2 - orderReducedBy), - FACTORIAL: 20 - orderReducedBy + FACTORIAL: 20 - orderReducedBy, + THOUSAND: 1000, + TEN_THOUSAND: 10000, + HUNDRED_THOUSAND: 100000, + MILLION: 1000000, + TEN_MILLION: 10000000, + BILLION: 100000000 }; export const bigO = { diff --git a/test/utils/console.ts b/test/utils/console.ts index d0badad..ff1fc72 100644 --- a/test/utils/console.ts +++ b/test/utils/console.ts @@ -17,6 +17,7 @@ export const Color = { YELLOW: '\x1b[33m', BLUE: '\x1b[34m', MAGENTA: '\x1b[35m', + GRAY: '\x1b[90m', CYAN: '\x1b[36m', WHITE: '\x1b[37m', BG_BLACK: '\x1b[40m', diff --git a/test/utils/index.ts b/test/utils/index.ts index f1d4872..97be71e 100644 --- a/test/utils/index.ts +++ b/test/utils/index.ts @@ -4,3 +4,4 @@ export * from './big-o'; export * from './json2html'; export * from './is'; export * from './console'; +export * from './string'; diff --git a/test/utils/number.ts b/test/utils/number.ts index 2192cda..04c3210 100644 --- a/test/utils/number.ts +++ b/test/utils/number.ts @@ -1,4 +1,4 @@ -export function randomInt(min: number, max: number) { +export function getRandomInt(min: number, max: number) { return Math.floor(Math.random() * (max - min + 1)) + min; } diff --git a/test/utils/string.ts b/test/utils/string.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/test/utils/string.ts @@ -0,0 +1 @@ +export {};