diff options
Diffstat (limited to 'test/javascript/tests/reduce.js')
-rw-r--r-- | test/javascript/tests/reduce.js | 423 |
1 files changed, 0 insertions, 423 deletions
diff --git a/test/javascript/tests/reduce.js b/test/javascript/tests/reduce.js deleted file mode 100644 index c25ca771c..000000000 --- a/test/javascript/tests/reduce.js +++ /dev/null @@ -1,423 +0,0 @@ -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy of -// the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -couchTests.elixir = true; -couchTests.reduce = function(debug) { - return console.log('done in test/elixir/test/reduce_test.exs'); - var db_name = get_random_db_name(); - var db = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"}); - db.createDb(); - if (debug) debugger; - var numDocs = 500; - var docs = makeDocs(1,numDocs + 1); - db.bulkSave(docs); - var summate = function(N) {return (N+1)*N/2;}; - - var map = function (doc) { - emit(doc.integer, doc.integer); - emit(doc.integer, doc.integer); - }; - var reduce = function (keys, values) { return sum(values); }; - var result = db.query(map, reduce); - T(result.rows[0].value == 2*summate(numDocs)); - - result = db.query(map, reduce, {startkey: 4, endkey: 4}); - T(result.rows[0].value == 8); - - result = db.query(map, reduce, {startkey: 4, endkey: 5}); - T(result.rows[0].value == 18); - - result = db.query(map, reduce, {startkey: 4, endkey: 6}); - T(result.rows[0].value == 30); - - result = db.query(map, reduce, {group:true, limit:3}); - T(result.rows[0].value == 2); - T(result.rows[1].value == 4); - T(result.rows[2].value == 6); - - for(var i=1; i<numDocs/2; i+=30) { - result = db.query(map, reduce, {startkey: i, endkey: numDocs - i}); - T(result.rows[0].value == 2*(summate(numDocs-i) - summate(i-1))); - } - - db.deleteDb(); - db_name = get_random_db_name(); - db = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"}); - db.createDb(); - - for(var i=1; i <= 5; i++) { - - for(var j=0; j < 10; j++) { - // these docs are in the order of the keys collation, for clarity - var docs = []; - docs.push({keys:["a"]}); - docs.push({keys:["a"]}); - docs.push({keys:["a", "b"]}); - docs.push({keys:["a", "b"]}); - docs.push({keys:["a", "b", "c"]}); - docs.push({keys:["a", "b", "d"]}); - docs.push({keys:["a", "c", "d"]}); - docs.push({keys:["d"]}); - docs.push({keys:["d", "a"]}); - docs.push({keys:["d", "b"]}); - docs.push({keys:["d", "c"]}); - db.bulkSave(docs); - var total_docs = ((i - 1) * 10 * 11) + ((j + 1) * 11); - TEquals(total_docs, db.info().doc_count, "doc count should match"); - } - - map = function (doc) { emit(doc.keys, 1); }; - reduce = function (keys, values) { return sum(values); }; - - var results = db.query(map, reduce, {group:true}); - - //group by exact key match - T(equals(results.rows[0], {key:["a"],value:20*i})); - T(equals(results.rows[1], {key:["a","b"],value:20*i})); - T(equals(results.rows[2], {key:["a", "b", "c"],value:10*i})); - T(equals(results.rows[3], {key:["a", "b", "d"],value:10*i})); - - // test to make sure group reduce and limit params provide valid json - var results = db.query(map, reduce, {group: true, limit: 2}); - T(equals(results.rows[0], {key: ["a"], value: 20*i})); - T(equals(results.rows.length, 2)); - - //group by the first element in the key array - var results = db.query(map, reduce, {group_level:1}); - T(equals(results.rows[0], {key:["a"],value:70*i})); - T(equals(results.rows[1], {key:["d"],value:40*i})); - - //group by the first 2 elements in the key array - var results = db.query(map, reduce, {group_level:2}); - T(equals(results.rows[0], {key:["a"],value:20*i})); - T(equals(results.rows[1], {key:["a","b"],value:40*i})); - T(equals(results.rows[2], {key:["a","c"],value:10*i})); - T(equals(results.rows[3], {key:["d"],value:10*i})); - T(equals(results.rows[4], {key:["d","a"],value:10*i})); - T(equals(results.rows[5], {key:["d","b"],value:10*i})); - T(equals(results.rows[6], {key:["d","c"],value:10*i})); - - // endkey test with inclusive_end=true - var results = db.query(map, reduce, {group_level:2,endkey:["d"],inclusive_end:true}); - T(equals(results.rows[0], {key:["a"],value:20*i})); - T(equals(results.rows[1], {key:["a","b"],value:40*i})); - T(equals(results.rows[2], {key:["a","c"],value:10*i})); - T(equals(results.rows[3], {key:["d"],value:10*i})); - TEquals(4, results.rows.length); - - // endkey test with inclusive_end=false - var results = db.query(map, reduce, {group_level:2,endkey:["d"],inclusive_end:false}); - T(equals(results.rows[0], {key:["a"],value:20*i})); - T(equals(results.rows[1], {key:["a","b"],value:40*i})); - T(equals(results.rows[2], {key:["a","c"],value:10*i})); - TEquals(3, results.rows.length); - } - - // now test out more complex reductions that need to use the combine option. - db.deleteDb(); - db_name = get_random_db_name(); - db = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"}); - db.createDb(); - - var map = function (doc) { emit(doc.val, doc.val); }; - var reduceCombine = function (keys, values, rereduce) { - // This computes the standard deviation of the mapped results - var stdDeviation=0.0; - var count=0; - var total=0.0; - var sqrTotal=0.0; - - if (!rereduce) { - // This is the reduce phase, we are reducing over emitted values from - // the map functions. - for(var i in values) { - total = total + values[i]; - sqrTotal = sqrTotal + (values[i] * values[i]); - } - count = values.length; - } - else { - // This is the rereduce phase, we are re-reducing previosuly - // reduced values. - for(var i in values) { - count = count + values[i].count; - total = total + values[i].total; - sqrTotal = sqrTotal + values[i].sqrTotal; - } - } - - var variance = (sqrTotal - ((total * total)/count)) / count; - stdDeviation = Math.sqrt(variance); - - // the reduce result. It contains enough information to be rereduced - // with other reduce results. - return {"stdDeviation":stdDeviation,"count":count, - "total":total,"sqrTotal":sqrTotal}; - }; - - // Save a bunch a docs. - - for(var i=0; i < 10; i++) { - var docs = []; - docs.push({val:10}); - docs.push({val:20}); - docs.push({val:30}); - docs.push({val:40}); - docs.push({val:50}); - docs.push({val:60}); - docs.push({val:70}); - docs.push({val:80}); - docs.push({val:90}); - docs.push({val:100}); - db.bulkSave(docs); - } - - var results = db.query(map, reduceCombine); - - var difference = results.rows[0].value.stdDeviation - 28.722813232690143; - // account for floating point rounding error - T(Math.abs(difference) < 0.0000000001); - - function testReducePagination() { - var ddoc = { - "_id": "_design/test", - "language": "javascript", - "views": { - "view1": { - "map": "function(doc) {" + - "emit(doc.int, doc._id);" + - "emit(doc.int + 1, doc._id);" + - "emit(doc.int + 2, doc._id);" + - "}", - "reduce": "_count" - } - } - }; - var result, docs = []; - - function randVal() { - return Math.random() * 100000000; - } - - db.deleteDb(); - db_name = get_random_db_name(); - db = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"}); - db.createDb(); - - for (var i = 0; i < 1123; i++) { - docs.push({"_id": String(i), "int": i}); - } - db.bulkSave(docs.concat([ddoc])); - - // ?group=false tests - result = db.view('test/view1', {startkey: 400, endkey: 402, foobar: randVal()}); - TEquals(9, result.rows[0].value); - result = db.view('test/view1', {startkey: 402, endkey: 400, descending: true, - foobar: randVal()}); - TEquals(9, result.rows[0].value); - - result = db.view('test/view1', {startkey: 400, endkey: 402, inclusive_end: false, - foobar: randVal()}); - TEquals(6, result.rows[0].value); - result = db.view('test/view1', {startkey: 402, endkey: 400, inclusive_end: false, - descending: true, foobar: randVal()}); - TEquals(6, result.rows[0].value); - - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "400", - foobar: randVal()}); - TEquals(7, result.rows[0].value); - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "400", - inclusive_end: false, foobar: randVal()}); - TEquals(6, result.rows[0].value); - - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "401", - foobar: randVal()}); - TEquals(8, result.rows[0].value); - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "401", - inclusive_end: false, foobar: randVal()}); - TEquals(7, result.rows[0].value); - - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "402", - foobar: randVal()}); - TEquals(9, result.rows[0].value); - result = db.view('test/view1', {startkey: 400, endkey: 402, endkey_docid: "402", - inclusive_end: false, foobar: randVal()}); - TEquals(8, result.rows[0].value); - - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "398", - descending: true, foobar: randVal()}); - TEquals(9, result.rows[0].value); - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "398", - descending: true, inclusive_end: false, foobar: randVal()}), - TEquals(8, result.rows[0].value); - - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "399", - descending: true, foobar: randVal()}); - TEquals(8, result.rows[0].value); - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "399", - descending: true, inclusive_end: false, foobar: randVal()}), - TEquals(7, result.rows[0].value); - - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "400", - descending: true, foobar: randVal()}), - TEquals(7, result.rows[0].value); - result = db.view('test/view1', {startkey: 402, endkey: 400, endkey_docid: "400", - descending: true, inclusive_end: false, foobar: randVal()}), - TEquals(6, result.rows[0].value); - - result = db.view('test/view1', {startkey: 402, startkey_docid: "400", endkey: 400, - descending: true, foobar: randVal()}); - TEquals(7, result.rows[0].value); - - result = db.view('test/view1', {startkey: 402, startkey_docid: "401", endkey: 400, - descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(5, result.rows[0].value); - - // ?group=true tests - result = db.view('test/view1', {group: true, startkey: 400, endkey: 402, - foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(400, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(402, result.rows[2].key); - TEquals(3, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - descending: true, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(3, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 400, endkey: 402, - inclusive_end: false, foobar: randVal()}); - TEquals(2, result.rows.length); - TEquals(400, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(2, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - - result = db.view('test/view1', {group: true, startkey: 400, endkey: 402, - endkey_docid: "401", foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(400, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(402, result.rows[2].key); - TEquals(2, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 400, endkey: 402, - endkey_docid: "400", foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(400, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(402, result.rows[2].key); - TEquals(1, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, startkey_docid: "401", - endkey: 400, descending: true, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(2, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(3, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, startkey_docid: "400", - endkey: 400, descending: true, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(1, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(3, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, startkey_docid: "401", - endkey: 400, descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(2, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(2, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - - result = db.view('test/view1', {group: true, startkey: 402, startkey_docid: "400", - endkey: 400, descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(2, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(1, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - endkey_docid: "398", descending: true, inclusive_end: true, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(3, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - endkey_docid: "399", descending: true, inclusive_end: true, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(2, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - endkey_docid: "399", descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(3, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - TEquals(400, result.rows[2].key); - TEquals(1, result.rows[2].value); - - result = db.view('test/view1', {group: true, startkey: 402, endkey: 400, - endkey_docid: "400", descending: true, inclusive_end: false, foobar: randVal()}); - TEquals(2, result.rows.length); - TEquals(402, result.rows[0].key); - TEquals(3, result.rows[0].value); - TEquals(401, result.rows[1].key); - TEquals(3, result.rows[1].value); - - db.deleteDb(); - } - - testReducePagination(); - - // cleanup - db.deleteDb(); -}; |