Exemple #1
0
        public void TestListOfOutputs()
        {
            PositiveIntOutputs    _outputs = PositiveIntOutputs.Singleton;
            ListOfOutputs <long?> outputs  = new ListOfOutputs <long?>(_outputs);
            Builder <object>      builder  = new Builder <object>(Lucene.Net.Util.Fst.FST.INPUT_TYPE.BYTE1, outputs);

            IntsRef scratch = new IntsRef();

            // Add the same input more than once and the outputs
            // are merged:
            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 1L);
            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 3L);
            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 0L);
            builder.Add(Util.ToIntsRef(new BytesRef("b"), scratch), 17L);
            FST <object> fst = builder.Finish();

            object output = Util.Get(fst, new BytesRef("a"));

            assertNotNull(output);
            IList <long?> outputList = outputs.AsList(output);

            assertEquals(3, outputList.size());
            assertEquals(1L, outputList[0]);
            assertEquals(3L, outputList[1]);
            assertEquals(0L, outputList[2]);

            output = Util.Get(fst, new BytesRef("b"));
            assertNotNull(output);
            outputList = outputs.AsList(output);
            assertEquals(1, outputList.size());
            assertEquals(17L, outputList[0]);
        }
Exemple #2
0
        public void TestListOfOutputsEmptyString()
        {
            PositiveIntOutputs    _outputs = PositiveIntOutputs.Singleton;
            ListOfOutputs <long?> outputs  = new ListOfOutputs <long?>(_outputs);
            Builder <object>      builder  = new Builder <object>(FST.INPUT_TYPE.BYTE1, outputs);

            IntsRef scratch = new IntsRef();

            builder.Add(scratch, 0L);
            builder.Add(scratch, 1L);
            builder.Add(scratch, 17L);
            builder.Add(scratch, 1L);

            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 1L);
            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 3L);
            builder.Add(Util.ToIntsRef(new BytesRef("a"), scratch), 0L);
            builder.Add(Util.ToIntsRef(new BytesRef("b"), scratch), 0L);

            FST <object> fst = builder.Finish();

            object output = Util.Get(fst, new BytesRef(""));

            assertNotNull(output);
            IList <long?> outputList = outputs.AsList(output);

            assertEquals(4, outputList.size());
            assertEquals(0L, outputList[0]);
            assertEquals(1L, outputList[1]);
            assertEquals(17L, outputList[2]);
            assertEquals(1L, outputList[3]);

            output = Util.Get(fst, new BytesRef("a"));
            assertNotNull(output);
            outputList = outputs.AsList(output);
            assertEquals(3, outputList.size());
            assertEquals(1L, outputList[0]);
            assertEquals(3L, outputList[1]);
            assertEquals(0L, outputList[2]);

            output = Util.Get(fst, new BytesRef("b"));
            assertNotNull(output);
            outputList = outputs.AsList(output);
            assertEquals(1, outputList.size());
            assertEquals(0L, outputList[0]);
        }
Exemple #3
0
        private void DoTest(int inputMode, IntsRef[] terms)
        {
            Array.Sort(terms);

            // Up to two positive ints, shared, generally but not
            // monotonically increasing
            {
                if (VERBOSE)
                {
                    Console.WriteLine("TEST: now test UpToTwoPositiveIntOutputs");
                }
                UpToTwoPositiveIntOutputs outputs = UpToTwoPositiveIntOutputs.GetSingleton(true);
                List <Lucene.Net.Util.Fst.FSTTester <object> .InputOutput <object> > pairs = new List <Lucene.Net.Util.Fst.FSTTester <object> .InputOutput <object> >(terms.Length);
                long lastOutput = 0;
                for (int idx = 0; idx < terms.Length; idx++)
                {
                    // Sometimes go backwards
                    long value = lastOutput + TestUtil.NextInt(Random(), -100, 1000);
                    while (value < 0)
                    {
                        value = lastOutput + TestUtil.NextInt(Random(), -100, 1000);
                    }
                    object output;
                    if (Random().nextInt(5) == 3)
                    {
                        long value2 = lastOutput + TestUtil.NextInt(Random(), -100, 1000);
                        while (value2 < 0)
                        {
                            value2 = lastOutput + TestUtil.NextInt(Random(), -100, 1000);
                        }
                        List <long> values = new List <long>();
                        values.Add(value);
                        values.Add(value2);
                        output = values;
                    }
                    else
                    {
                        output = outputs.Get(value);
                    }
                    pairs.Add(new FSTTester <object> .InputOutput <object>(terms[idx], output));
                }
                new FSTTesterHelper <object>(Random(), dir, inputMode, pairs, outputs, false).DoTest(false);

                // ListOfOutputs(PositiveIntOutputs), generally but not
                // monotonically increasing
                {
                    if (VERBOSE)
                    {
                        Console.WriteLine("TEST: now test OneOrMoreOutputs");
                    }
                    PositiveIntOutputs    _outputs = PositiveIntOutputs.Singleton; // LUCENENET TODO: This should probably not be a nullable type
                    ListOfOutputs <long?> outputs2 = new ListOfOutputs <long?>(_outputs);
                    List <FSTTester <object> .InputOutput <object> > pairs2 = new List <FSTTester <object> .InputOutput <object> >(terms.Length);
                    long lastOutput2 = 0;
                    for (int idx = 0; idx < terms.Length; idx++)
                    {
                        int          outputCount = TestUtil.NextInt(Random(), 1, 7);
                        List <long?> values      = new List <long?>();
                        for (int i = 0; i < outputCount; i++)
                        {
                            // Sometimes go backwards
                            long value = lastOutput2 + TestUtil.NextInt(Random(), -100, 1000);
                            while (value < 0)
                            {
                                value = lastOutput2 + TestUtil.NextInt(Random(), -100, 1000);
                            }
                            values.Add(value);
                            lastOutput2 = value;
                        }

                        object output;
                        if (values.size() == 1)
                        {
                            output = values[0];
                        }
                        else
                        {
                            output = values;
                        }

                        pairs2.Add(new FSTTester <object> .InputOutput <object>(terms[idx], output));
                    }
                    new FSTTester <object>(Random(), dir, inputMode, pairs2, outputs2, false).DoTest(false);
                }
            }
        }