public void OperateAddFlags()
        {
            int index_bits = 4;

            // Keep record around win binName is removed.
            AssertSuccess("other bin", key, Operation.Delete(), HLLOperation.Init(HLLPolicy.Default, binName + "other", index_bits));

            // create_only
            HLLPolicy c = new HLLPolicy(HLLWriteFlags.CREATE_ONLY);

            AssertSuccess("create_only", key, HLLOperation.Add(c, binName, entries, index_bits));
            AssertThrows("create_only - error", key, typeof(AerospikeException), ResultCode.BIN_EXISTS_ERROR,
                         HLLOperation.Add(c, binName, entries, index_bits));

            // update_only
            HLLPolicy u = new HLLPolicy(HLLWriteFlags.UPDATE_ONLY);

            AssertThrows("update_only - error", key, typeof(AerospikeException), ResultCode.PARAMETER_ERROR,
                         HLLOperation.Add(u, binName, entries, index_bits));

            // create_only no_fail
            HLLPolicy cn = new HLLPolicy(HLLWriteFlags.CREATE_ONLY | HLLWriteFlags.NO_FAIL);

            AssertSuccess("create_only nofail", key, HLLOperation.Add(cn, binName, entries, index_bits));
            AssertSuccess("create_only nofail - no error", key, HLLOperation.Add(cn, binName, entries, index_bits));

            // fold
            AssertSuccess("init", key, HLLOperation.Init(HLLPolicy.Default, binName, index_bits));

            HLLPolicy f = new HLLPolicy(HLLWriteFlags.ALLOW_FOLD);

            AssertThrows("fold", key, typeof(AerospikeException), ResultCode.PARAMETER_ERROR,
                         HLLOperation.Add(f, binName, entries, index_bits));
        }
        public void AssertAddInit(int index_bits, int minhash_bits)
        {
            client.Delete(null, key);

            string    msg = "Fail - index_bits " + index_bits + " minhash_bits " + minhash_bits;
            HLLPolicy p   = HLLPolicy.Default;

            Operation[] ops = new Operation[] {
                HLLOperation.Add(p, binName, entries, index_bits, minhash_bits),
                HLLOperation.GetCount(binName),
                HLLOperation.RefreshCount(binName),
                HLLOperation.Describe(binName),
                HLLOperation.Add(p, binName, entries)
            };

            if (!CheckBits(index_bits, minhash_bits))
            {
                AssertThrows(msg, key, typeof(AerospikeException), ResultCode.PARAMETER_ERROR, ops);
                return;
            }

            Record record      = AssertSuccess(msg, key, ops);
            IList  result_list = record.GetList(binName);
            long   count       = (long)result_list[1];
            long   count1      = (long)result_list[2];
            IList  description = (IList)result_list[3];
            long   n_added     = (long)result_list[4];

            AssertDescription(msg, description, index_bits, minhash_bits);
            AssertHLLCount(msg, index_bits, count, entries.Count);
            Assert.AreEqual(count, count1);
            Assert.AreEqual(n_added, 0);
        }
        public void OperateSetUnionFlags()
        {
            int    index_bits  = 6;
            int    low_n_bits  = 4;
            int    high_n_bits = 8;
            string otherName   = binName + "o";

            // Keep record around win binName is removed.
            List <Value.HLLValue> hlls = new List <Value.HLLValue>();
            Record record = AssertSuccess("other bin", key,
                                          Operation.Delete(),
                                          HLLOperation.Add(HLLPolicy.Default, otherName, entries, index_bits),
                                          Operation.Get(otherName)
                                          );
            IList result_list = record.GetList(otherName);

            Value.HLLValue hll = (Value.HLLValue)result_list[1];

            hlls.Add(hll);

            // create_only
            HLLPolicy c = new HLLPolicy(HLLWriteFlags.CREATE_ONLY);

            AssertSuccess("create_only", key, HLLOperation.SetUnion(c, binName, hlls));
            AssertThrows("create_only - error", key, typeof(AerospikeException), ResultCode.BIN_EXISTS_ERROR, HLLOperation.SetUnion(c, binName, hlls));

            // update_only
            HLLPolicy u = new HLLPolicy(HLLWriteFlags.UPDATE_ONLY);

            AssertSuccess("update_only", key, HLLOperation.SetUnion(u, binName, hlls));
            AssertSuccess("remove bin", key, Operation.Put(Bin.AsNull(binName)));
            AssertThrows("update_only - error", key, typeof(AerospikeException), ResultCode.BIN_NOT_FOUND, HLLOperation.SetUnion(u, binName, hlls));

            // create_only no_fail
            HLLPolicy cn = new HLLPolicy(HLLWriteFlags.CREATE_ONLY | HLLWriteFlags.NO_FAIL);

            AssertSuccess("create_only nofail", key, HLLOperation.SetUnion(cn, binName, hlls));
            AssertSuccess("create_only nofail - no error", key, HLLOperation.SetUnion(cn, binName, hlls));

            // update_only no_fail
            HLLPolicy un = new HLLPolicy(HLLWriteFlags.UPDATE_ONLY | HLLWriteFlags.NO_FAIL);

            AssertSuccess("update_only nofail", key, HLLOperation.SetUnion(un, binName, hlls));
            AssertSuccess("remove bin", key, Operation.Put(Bin.AsNull(binName)));
            AssertSuccess("update_only nofail - no error", key, HLLOperation.SetUnion(un, binName, hlls));

            // fold
            HLLPolicy f = new HLLPolicy(HLLWriteFlags.ALLOW_FOLD);

            // fold down
            AssertSuccess("size up", key, HLLOperation.Init(HLLPolicy.Default, binName, high_n_bits));
            AssertSuccess("fold down to index_bits", key, HLLOperation.SetUnion(f, binName, hlls));

            // fold up
            AssertSuccess("size down", key, HLLOperation.Init(HLLPolicy.Default, binName, low_n_bits));
            AssertSuccess("fold down to low_n_bits", key, HLLOperation.SetUnion(f, binName, hlls));
        }
Exemplo n.º 4
0
        public void HllExp()
        {
            Key key = new Key(args.ns, args.set, 5200);

            client.Delete(null, key);

            List <Value> list1 = new List <Value>();

            list1.Add(Value.Get("Akey1"));
            list1.Add(Value.Get("Akey2"));
            list1.Add(Value.Get("Akey3"));

            List <Value> list2 = new List <Value>();

            list2.Add(Value.Get("Bkey1"));
            list2.Add(Value.Get("Bkey2"));
            list2.Add(Value.Get("Bkey3"));

            List <Value> list3 = new List <Value>();

            list3.Add(Value.Get("Akey1"));
            list3.Add(Value.Get("Akey2"));
            list3.Add(Value.Get("Bkey1"));
            list3.Add(Value.Get("Bkey2"));
            list3.Add(Value.Get("Ckey1"));
            list3.Add(Value.Get("Ckey2"));

            Record rec = client.Operate(null, key,
                                        HLLOperation.Add(HLLPolicy.Default, bin1, list1, 8),
                                        HLLOperation.Add(HLLPolicy.Default, bin2, list2, 8),
                                        HLLOperation.Add(HLLPolicy.Default, bin3, list3, 8),
                                        Operation.Get(bin1),
                                        Operation.Get(bin2),
                                        Operation.Get(bin3)
                                        );

            IList results = rec.GetList(bin1);

            hll1 = (Value.HLLValue)results[1];
            Assert.AreNotEqual(null, hll1);

            results = rec.GetList(bin2);
            hll2    = (Value.HLLValue)results[1];
            Assert.AreNotEqual(null, hll2);

            results = rec.GetList(bin3);
            hll3    = (Value.HLLValue)results[1];
            Assert.AreNotEqual(null, hll3);

            Count(key);
            Union(key);
            Intersect(key);
            Similarity(key);
            Describe(key);
            MayContain(key);
            Add(key);
        }
        public void AssertFold(IList vals0, IList vals1, int index_bits)
        {
            string    msg = "Fail - index_bits " + index_bits;
            HLLPolicy p   = HLLPolicy.Default;

            for (int ix = minIndexBits; ix <= index_bits; ix++)
            {
                if (!CheckBits(index_bits, 0) || !CheckBits(ix, 0))
                {
                    Assert.IsTrue(false, "Expected valid inputs: " + msg);
                }

                Record recorda = AssertSuccess(msg, key,
                                               Operation.Delete(),
                                               HLLOperation.Add(p, binName, vals0, index_bits),
                                               HLLOperation.GetCount(binName),
                                               HLLOperation.RefreshCount(binName),
                                               HLLOperation.Describe(binName));

                IList resulta_list = recorda.GetList(binName);
                long  counta       = (long)resulta_list[1];
                long  counta1      = (long)resulta_list[2];
                IList descriptiona = (IList)resulta_list[3];

                AssertDescription(msg, descriptiona, index_bits, 0);
                AssertHLLCount(msg, index_bits, counta, vals0.Count);
                Assert.AreEqual(counta, counta1);

                Record recordb = AssertSuccess(msg, key,
                                               HLLOperation.Fold(binName, ix),
                                               HLLOperation.GetCount(binName),
                                               HLLOperation.Add(p, binName, vals0),
                                               HLLOperation.Add(p, binName, vals1),
                                               HLLOperation.GetCount(binName),
                                               HLLOperation.Describe(binName)
                                               );

                IList resultb_list = recordb.GetList(binName);
                long  countb       = (long)resultb_list[1];
                long  n_added0     = (long)resultb_list[2];
                long  countb1      = (long)resultb_list[4];
                IList descriptionb = (IList)resultb_list[5];

                Assert.AreEqual(0, n_added0);
                AssertDescription(msg, descriptionb, ix, 0);
                AssertHLLCount(msg, ix, countb, vals0.Count);
                AssertHLLCount(msg, ix, countb1, vals0.Count + vals1.Count);
            }
        }
        public void OperateRefreshCount()
        {
            int index_bits = 6;

            // Keep record around win binName is removed.
            AssertSuccess("other bin", key, Operation.Delete(), HLLOperation.Init(HLLPolicy.Default, binName + "other", index_bits), HLLOperation.Init(HLLPolicy.Default, binName, index_bits));

            // Exists.
            AssertSuccess("refresh zero count", key, HLLOperation.RefreshCount(binName), HLLOperation.RefreshCount(binName));
            AssertSuccess("add items", key, HLLOperation.Add(HLLPolicy.Default, binName, entries));
            AssertSuccess("refresh count", key, HLLOperation.RefreshCount(binName), HLLOperation.RefreshCount(binName));

            // Does not exist.
            AssertSuccess("remove bin", key, Operation.Put(Bin.AsNull(binName)));
            AssertThrows("refresh nonexistant count", key, typeof(AerospikeException), ResultCode.BIN_NOT_FOUND, HLLOperation.RefreshCount(binName));
        }
        public void OperateGetUnion()
        {
            int                    index_bits           = 14;
            long                   expected_union_count = 0;
            List <IList>           vals = new List <IList>();
            IList <Value.HLLValue> hlls = new List <Value.HLLValue>();

            for (int i = 0; i < keys.Length; i++)
            {
                List <Value> sub_vals = new List <Value>();

                for (int j = 0; j < n_entries / 3; j++)
                {
                    sub_vals.Add(new Value.StringValue("key" + i + " " + j));
                }

                Record record = AssertSuccess("init other keys", keys[i], Operation.Delete(), HLLOperation.Add(HLLPolicy.Default, binName, sub_vals, index_bits), Operation.Get(binName));

                IList result_list = record.GetList(binName);
                hlls.Add((Value.HLLValue)result_list[1]);
                expected_union_count += sub_vals.Count;
                vals.Add(sub_vals);
            }

            // Keep record around win binName is removed.
            AssertSuccess("other bin", key,
                          Operation.Delete(),
                          HLLOperation.Init(HLLPolicy.Default, binName + "other", index_bits),
                          HLLOperation.Add(HLLPolicy.Default, binName, vals[0], index_bits)
                          );

            Record r           = AssertSuccess("union and unionCount", key, HLLOperation.GetUnion(binName, hlls), HLLOperation.GetUnionCount(binName, hlls));
            IList  rlist       = r.GetList(binName);
            long   union_count = (long)rlist[1];

            AssertHLLCount("verify union count", index_bits, union_count, expected_union_count);

            Value.HLLValue union_hll = (Value.HLLValue)rlist[0];

            r     = AssertSuccess("", key, Operation.Put(new Bin(binName, union_hll)), HLLOperation.GetCount(binName));
            rlist = r.GetList(binName);
            long union_count_2 = (long)rlist[1];

            Assert.AreEqual(union_count, union_count_2, "unions equal");
        }
        public void AssertSimilarityOp(double overlap, IList common, IList <IList> vals, int index_bits, int minhash_bits)
        {
            IList <Value.HLLValue> hlls = new List <Value.HLLValue>();

            for (int i = 0; i < keys.Length; i++)
            {
                Record record = AssertSuccess("init other keys", keys[i],
                                              Operation.Delete(),
                                              HLLOperation.Add(HLLPolicy.Default, binName, vals[i], index_bits, minhash_bits),
                                              HLLOperation.Add(HLLPolicy.Default, binName, common, index_bits, minhash_bits),
                                              Operation.Get(binName)
                                              );

                IList result_list = record.GetList(binName);
                hlls.Add((Value.HLLValue)result_list[2]);
            }

            // Keep record around win binName is removed.
            Record r = AssertSuccess("other bin", key,
                                     Operation.Delete(),
                                     HLLOperation.Init(HLLPolicy.Default, binName + "other", index_bits, minhash_bits),
                                     HLLOperation.SetUnion(HLLPolicy.Default, binName, hlls),
                                     HLLOperation.Describe(binName)
                                     );

            IList rlist       = r.GetList(binName);
            IList description = (IList)rlist[1];

            AssertDescription("check desc", description, index_bits, minhash_bits);

            r = AssertSuccess("similarity and intersect_count", key,
                              HLLOperation.GetSimilarity(binName, hlls),
                              HLLOperation.GetIntersectCount(binName, hlls)
                              );

            rlist = r.GetList(binName);
            double sim                      = (double)rlist[0];
            long   intersect_count          = (long)rlist[1];
            double expected_similarity      = overlap;
            long   expected_intersect_count = common.Count;

            AssertHMHSimilarity("check sim", index_bits, minhash_bits, sim, expected_similarity, intersect_count, expected_intersect_count);
        }
        public void OperateGetCount()
        {
            int index_bits = 6;

            // Keep record around win binName is removed.
            AssertSuccess("other bin", key, Operation.Delete(), HLLOperation.Init(HLLPolicy.Default, binName + "other", index_bits),
                          HLLOperation.Add(HLLPolicy.Default, binName, entries, index_bits));

            // Exists.
            Record record = AssertSuccess("exists count", key, HLLOperation.GetCount(binName));
            long   count  = record.GetLong(binName);

            AssertHLLCount("check count", index_bits, count, entries.Count);

            // Does not exist.
            AssertSuccess("remove bin", key, Operation.Put(Bin.AsNull(binName)));
            record = AssertSuccess("exists count", key, HLLOperation.GetCount(binName));
            Assert.AreEqual(null, record.GetValue(binName));
        }
        public void AssertSetUnion(IList <IList> vals, int index_bits, bool folding, bool allow_folding)
        {
            string    msg = "Fail - index_bits " + index_bits;
            HLLPolicy p   = HLLPolicy.Default;
            HLLPolicy u   = HLLPolicy.Default;

            if (allow_folding)
            {
                u = new HLLPolicy(HLLWriteFlags.ALLOW_FOLD);
            }

            long union_expected = 0;
            bool folded         = false;

            for (int i = 0; i < keys.Length; i++)
            {
                int ix = index_bits;

                if (folding)
                {
                    ix -= i;

                    if (ix < minIndexBits)
                    {
                        ix = minIndexBits;
                    }

                    if (ix < index_bits)
                    {
                        folded = true;
                    }
                }

                IList sub_vals = vals[i];

                union_expected += sub_vals.Count;

                Record record = AssertSuccess(msg, keys[i], Operation.Delete(),
                                              HLLOperation.Add(p, binName, sub_vals, ix), HLLOperation.GetCount(binName));
                IList result_list = record.GetList(binName);
                long  count       = (long)result_list[1];

                AssertHLLCount(msg, ix, count, sub_vals.Count);
            }

            List <Value.HLLValue> hlls = new List <Value.HLLValue>();

            for (int i = 0; i < keys.Length; i++)
            {
                Record         record      = AssertSuccess(msg, keys[i], Operation.Get(binName), HLLOperation.GetCount(binName));
                IList          result_list = record.GetList(binName);
                Value.HLLValue hll         = (Value.HLLValue)result_list[0];

                Assert.AreNotEqual(null, hll);
                hlls.Add(hll);
            }

            Operation[] ops = new Operation[] {
                Operation.Delete(),
                        HLLOperation.Init(p, binName, index_bits),
                HLLOperation.SetUnion(u, binName, hlls),
                HLLOperation.GetCount(binName),
                Operation.Delete(),
                HLLOperation.SetUnion(p, binName, hlls),
                HLLOperation.GetCount(binName)
            };

            if (folded && !allow_folding)
            {
                AssertThrows(msg, key, typeof(AerospikeException), ResultCode.OP_NOT_APPLICABLE, ops);
                return;
            }

            Record record_union      = AssertSuccess(msg, key, ops);
            IList  union_result_list = record_union.GetList(binName);
            long   union_count       = (long)union_result_list[2];
            long   union_count2      = (long)union_result_list[4];

            AssertHLLCount(msg, index_bits, union_count, union_expected);
            Assert.AreEqual(union_count, union_count2, msg);

            for (int i = 0; i < keys.Length; i++)
            {
                IList  sub_vals = vals[i];
                Record record   = AssertSuccess(msg, key,
                                                HLLOperation.Add(p, binName, sub_vals, index_bits),
                                                HLLOperation.GetCount(binName));

                IList result_list = record.GetList(binName);
                long  n_added     = (long)result_list[0];
                long  count       = (long)result_list[1];

                Assert.AreEqual(0, n_added, msg);
                Assert.AreEqual(union_count, count, msg);
                AssertHLLCount(msg, index_bits, count, union_expected);
            }
        }