public void TestJsBuiltInReduceFunction()
        {
            var c = new JSViewCompiler();
            var reduceBlock = c.CompileReduce("_count", "javascript");

            Assert.IsNotNull(reduceBlock);
            Assert.AreEqual(BuiltinReduceFunctions.Count, reduceBlock);

            reduceBlock = c.CompileReduce("_stats", "javascript");
            Assert.IsNotNull(reduceBlock);
            Assert.AreEqual(BuiltinReduceFunctions.Stats, reduceBlock);

            var keys = new List<object> { "master", "schlage", "medeco" };
            var values = new List<object> { 19, -75, 3.1416 };
            var result = reduceBlock(keys, values, false);
            var expected = new Dictionary<string, object> {
                { "count", 3 },
                { "sum", -52.8584 },
                { "sumsqr", 5995.86965056 },
                { "max", 19 },
                { "min", -75 }
            };
            CollectionAssert.AreEquivalent(expected, (IEnumerable)result);

            reduceBlock = c.CompileReduce("_frob", "javascript");
            Assert.IsNull(reduceBlock);
        }
        public void TestJsReduceFunction()
        {
            var c = new JSViewCompiler();
            var reduceBlock = c.CompileReduce("function(k,v,r){return [k,v,r];}", "javascript");
            Assert.IsNotNull(reduceBlock);

            var keys = new List<object> { "master", "schlage", "medeco" };
            var values = new List<object> { 1, 2, 3 };
            var result = reduceBlock(keys, values, false);

            CollectionAssert.AreEqual(new List<object> { keys, values, false }, (IEnumerable)result);
        }