You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/02/28 12:30:01 UTC

[10/20] lucenenet git commit: Lucene.Net.TestFramework: Completed implementation of RandomCodec

Lucene.Net.TestFramework: Completed implementation of RandomCodec


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/b43c69b8
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/b43c69b8
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/b43c69b8

Branch: refs/heads/api-work
Commit: b43c69b8915926d404f9aaaac2500dc4e0fbcf2f
Parents: 84f26aa
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Tue Feb 28 05:24:09 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Tue Feb 28 05:56:22 2017 +0700

----------------------------------------------------------------------
 .../Index/RandomCodec.cs                        | 188 ++++++++++---------
 .../Util/TestRuleSetupAndRestoreClassEnv.cs     |   2 +-
 2 files changed, 99 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/b43c69b8/src/Lucene.Net.TestFramework/Index/RandomCodec.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Index/RandomCodec.cs b/src/Lucene.Net.TestFramework/Index/RandomCodec.cs
index 68d0098..0afec03 100644
--- a/src/Lucene.Net.TestFramework/Index/RandomCodec.cs
+++ b/src/Lucene.Net.TestFramework/Index/RandomCodec.cs
@@ -1,63 +1,62 @@
 using Lucene.Net.Support;
-using Lucene.Net.Codecs;
+using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 
 namespace Lucene.Net.Index
 {
-    
+    /*
+    * Licensed to the Apache Software Foundation (ASF) under one or more
+    * contributor license agreements.  See the NOTICE file distributed with
+    * this work for additional information regarding copyright ownership.
+    * The ASF licenses this file to You 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.
+    */
+
     using AssertingDocValuesFormat = Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat;
     using AssertingPostingsFormat = Lucene.Net.Codecs.Asserting.AssertingPostingsFormat;
 
-    /*
-         * Licensed to the Apache Software Foundation (ASF) under one or more
-         * contributor license agreements.  See the NOTICE file distributed with
-         * this work for additional information regarding copyright ownership.
-         * The ASF licenses this file to You 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.
-         */
-
     using DocValuesFormat = Lucene.Net.Codecs.DocValuesFormat;
 
-    //using TestBloomFilteredLucene41Postings = Lucene.Net.Codecs.bloom.TestBloomFilteredLucene41Postings;
-    //using DiskDocValuesFormat = Lucene.Net.Codecs.diskdv.DiskDocValuesFormat;
+    using TestBloomFilteredLucene41Postings = Lucene.Net.Codecs.Bloom.TestBloomFilteredLucene41Postings;
+    using DiskDocValuesFormat = Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat;
     using Lucene41PostingsFormat = Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat;
 
-    //using Lucene41WithOrds = Lucene.Net.Codecs.Lucene41ords.Lucene41WithOrds;
+    using Lucene41WithOrds = Lucene.Net.Codecs.Lucene41Ords.Lucene41WithOrds;
     using Lucene45DocValuesFormat = Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat;
     using Lucene46Codec = Lucene.Net.Codecs.Lucene46.Lucene46Codec;
     using PostingsFormat = Lucene.Net.Codecs.PostingsFormat;
 
-    //using DirectPostingsFormat = Lucene.Net.Codecs.memory.DirectPostingsFormat;
-    //using MemoryDocValuesFormat = Lucene.Net.Codecs.memory.MemoryDocValuesFormat;
-    //using MemoryPostingsFormat = Lucene.Net.Codecs.memory.MemoryPostingsFormat;
-    //using MockFixedIntBlockPostingsFormat = Lucene.Net.Codecs.mockintblock.MockFixedIntBlockPostingsFormat;
-    //using MockVariableIntBlockPostingsFormat = Lucene.Net.Codecs.mockintblock.MockVariableIntBlockPostingsFormat;
-    //using MockRandomPostingsFormat = Lucene.Net.Codecs.mockrandom.MockRandomPostingsFormat;
-    //using MockSepPostingsFormat = Lucene.Net.Codecs.mocksep.MockSepPostingsFormat;
-    //using NestedPulsingPostingsFormat = Lucene.Net.Codecs.nestedpulsing.NestedPulsingPostingsFormat;
-    //using Pulsing41PostingsFormat = Lucene.Net.Codecs.pulsing.Pulsing41PostingsFormat;
-    //using SimpleTextDocValuesFormat = Lucene.Net.Codecs.simpletext.SimpleTextDocValuesFormat;
-    //using SimpleTextPostingsFormat = Lucene.Net.Codecs.simpletext.SimpleTextPostingsFormat;
-    //using FSTOrdPostingsFormat = Lucene.Net.Codecs.memory.FSTOrdPostingsFormat;
-    //using FSTOrdPulsing41PostingsFormat = Lucene.Net.Codecs.memory.FSTOrdPulsing41PostingsFormat;
-    //using FSTPostingsFormat = Lucene.Net.Codecs.memory.FSTPostingsFormat;
-    //using FSTPulsing41PostingsFormat = Lucene.Net.Codecs.memory.FSTPulsing41PostingsFormat;
+    using DirectPostingsFormat = Lucene.Net.Codecs.Memory.DirectPostingsFormat;
+    using MemoryDocValuesFormat = Lucene.Net.Codecs.Memory.MemoryDocValuesFormat;
+    using MemoryPostingsFormat = Lucene.Net.Codecs.Memory.MemoryPostingsFormat;
+    using MockFixedIntBlockPostingsFormat = Lucene.Net.Codecs.MockIntBlock.MockFixedIntBlockPostingsFormat;
+    using MockVariableIntBlockPostingsFormat = Lucene.Net.Codecs.MockIntBlock.MockVariableIntBlockPostingsFormat;
+    using MockRandomPostingsFormat = Lucene.Net.Codecs.MockRandom.MockRandomPostingsFormat;
+    using MockSepPostingsFormat = Lucene.Net.Codecs.MockSep.MockSepPostingsFormat;
+    using NestedPulsingPostingsFormat = Lucene.Net.Codecs.NestedPulsing.NestedPulsingPostingsFormat;
+    using Pulsing41PostingsFormat = Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat;
+    using SimpleTextDocValuesFormat = Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat;
+    using SimpleTextPostingsFormat = Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat;
+    using FSTOrdPostingsFormat = Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat;
+    using FSTOrdPulsing41PostingsFormat = Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat;
+    using FSTPostingsFormat = Lucene.Net.Codecs.Memory.FSTPostingsFormat;
+    using FSTPulsing41PostingsFormat = Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat;
     using TestUtil = Lucene.Net.Util.TestUtil;
 
     /// <summary>
     /// Codec that assigns per-field random postings formats.
-    /// <p>
+    /// <para/>
     /// The same field/format assignment will happen regardless of order,
     /// a hash is computed up front that determines the mapping.
     /// this means fields can be put into things like HashSets and added to
@@ -69,110 +68,119 @@ namespace Lucene.Net.Index
     {
         /// <summary>
         /// Shuffled list of postings formats to use for new mappings </summary>
-        private IList<PostingsFormat> Formats = new List<PostingsFormat>();
+        private IList<PostingsFormat> formats = new List<PostingsFormat>();
 
         /// <summary>
         /// Shuffled list of docvalues formats to use for new mappings </summary>
-        private IList<DocValuesFormat> DvFormats = new List<DocValuesFormat>();
+        private IList<DocValuesFormat> dvFormats = new List<DocValuesFormat>();
 
         /// <summary>
         /// unique set of format names this codec knows about </summary>
-        public HashSet<string> FormatNames = new HashSet<string>();
+        public ISet<string> formatNames = new HashSet<string>();
 
         /// <summary>
         /// unique set of docvalues format names this codec knows about </summary>
-        public HashSet<string> DvFormatNames = new HashSet<string>();
+        public ISet<string> dvFormatNames = new HashSet<string>();
 
         /// <summary>
         /// memorized field->postingsformat mappings </summary>
         // note: we have to sync this map even though its just for debugging/toString,
         // otherwise DWPT's .toString() calls that iterate over the map can
         // cause concurrentmodificationexception if indexwriter's infostream is on
-        private readonly IDictionary<string, PostingsFormat> PreviousMappings = new ConcurrentHashMapWrapper<string, PostingsFormat>(new Dictionary<string, PostingsFormat>());
+        private readonly IDictionary<string, PostingsFormat> previousMappings = new ConcurrentHashMapWrapper<string, PostingsFormat>(new Dictionary<string, PostingsFormat>());
 
-        private IDictionary<string, DocValuesFormat> PreviousDVMappings = new ConcurrentHashMapWrapper<string, DocValuesFormat>(new Dictionary<string, DocValuesFormat>());
-        private readonly int PerFieldSeed;
+        private IDictionary<string, DocValuesFormat> previousDVMappings = new ConcurrentHashMapWrapper<string, DocValuesFormat>(new Dictionary<string, DocValuesFormat>());
+        private readonly int perFieldSeed;
 
         public override PostingsFormat GetPostingsFormatForField(string name)
         {
-            PostingsFormat codec = PreviousMappings[name];
+            PostingsFormat codec = previousMappings[name];
             if (codec == null)
             {
-                codec = Formats[Math.Abs(PerFieldSeed ^ name.GetHashCode()) % Formats.Count];
-                /*if (codec is SimpleTextPostingsFormat && PerFieldSeed % 5 != 0)
+                codec = formats[Math.Abs(perFieldSeed ^ name.GetHashCode()) % formats.Count];
+                if (codec is SimpleTextPostingsFormat && perFieldSeed % 5 != 0)
                 {
                   // make simpletext rarer, choose again
-                  codec = Formats[Math.Abs(PerFieldSeed ^ name.ToUpper(CultureInfo.InvariantCulture).GetHashCode()) % Formats.Count];
-                }*/
-                PreviousMappings[name] = codec;
+                  codec = formats[Math.Abs(perFieldSeed ^ name.ToUpperInvariant().GetHashCode()) % formats.Count];
+                }
+                previousMappings[name] = codec;
                 // Safety:
-                Debug.Assert(PreviousMappings.Count < 10000, "test went insane");
+                Debug.Assert(previousMappings.Count < 10000, "test went insane");
             }
             return codec;
         }
 
         public override DocValuesFormat GetDocValuesFormatForField(string name)
         {
-            DocValuesFormat codec = PreviousDVMappings[name];
+            DocValuesFormat codec = previousDVMappings[name];
             if (codec == null)
             {
-                codec = DvFormats[Math.Abs(PerFieldSeed ^ name.GetHashCode()) % DvFormats.Count];
-                /*if (codec is SimpleTextDocValuesFormat && PerFieldSeed % 5 != 0)
+                codec = dvFormats[Math.Abs(perFieldSeed ^ name.GetHashCode()) % dvFormats.Count];
+                if (codec is SimpleTextDocValuesFormat && perFieldSeed % 5 != 0)
                 {
                   // make simpletext rarer, choose again
-                  codec = DvFormats[Math.Abs(PerFieldSeed ^ name.ToUpper(CultureInfo.InvariantCulture).GetHashCode()) % DvFormats.Count];
-                }*/
-                PreviousDVMappings[name] = codec;
+                  codec = dvFormats[Math.Abs(perFieldSeed ^ name.ToUpperInvariant().GetHashCode()) % dvFormats.Count];
+                }
+                previousDVMappings[name] = codec;
                 // Safety:
-                Debug.Assert(PreviousDVMappings.Count < 10000, "test went insane");
+                Debug.Assert(previousDVMappings.Count < 10000, "test went insane");
             }
             return codec;
         }
 
         public RandomCodec(Random random, ISet<string> avoidCodecs)
         {
-            this.PerFieldSeed = random.Next();
+            this.perFieldSeed = random.Next();
             // TODO: make it possible to specify min/max iterms per
             // block via CL:
             int minItemsPerBlock = TestUtil.NextInt(random, 2, 100);
             int maxItemsPerBlock = 2 * (Math.Max(2, minItemsPerBlock - 1)) + random.Next(100);
             int lowFreqCutoff = TestUtil.NextInt(random, 2, 100);
 
-            // LUCENENET TODO: Finish RandomCodec implementation
             Add(avoidCodecs,
                 new Lucene41PostingsFormat(minItemsPerBlock, maxItemsPerBlock),
-                /*
                 new FSTPostingsFormat(),
                 new FSTOrdPostingsFormat(),
                 new FSTPulsing41PostingsFormat(1 + random.Next(20)), new FSTOrdPulsing41PostingsFormat(1 + random.Next(20)),
-                new DirectPostingsFormat(LuceneTestCase.Rarely(random) ? 1 : (LuceneTestCase.Rarely(random) ? int.MaxValue : maxItemsPerBlock), LuceneTestCase.Rarely(random) ? 1 : (LuceneTestCase.Rarely(random) ? int.MaxValue : lowFreqCutoff)),
-                new Pulsing41PostingsFormat(1 + random.Next(20), minItemsPerBlock, maxItemsPerBlock), new Pulsing41PostingsFormat(1 + random.Next(20), minItemsPerBlock, maxItemsPerBlock),
-                new TestBloomFilteredLucene41Postings(), new MockSepPostingsFormat(), new MockFixedIntBlockPostingsFormat(TestUtil.NextInt(random, 1, 2000)),
-                new MockVariableIntBlockPostingsFormat(TestUtil.NextInt(random, 1, 127)), new MockRandomPostingsFormat(random),
-                new NestedPulsingPostingsFormat(), new Lucene41WithOrds(), new SimpleTextPostingsFormat(),
-                */
-                new AssertingPostingsFormat()
-                /*new MemoryPostingsFormat(true, random.nextFloat()), new MemoryPostingsFormat(false, random.nextFloat())*/
-                );
-
-            // add pulsing again with (usually) different parameters
-            //TODO as a PostingsFormat which wraps others, we should allow TestBloomFilteredLucene41Postings to be constructed
-            //with a choice of concrete PostingsFormats. Maybe useful to have a generic means of marking and dealing
-            //with such "wrapper" classes?
-
-            AddDocValues(avoidCodecs, new Lucene45DocValuesFormat(), /*new DiskDocValuesFormat(), new MemoryDocValuesFormat(), new SimpleTextDocValuesFormat(),*/ new AssertingDocValuesFormat());
-
-            Collections.Shuffle(Formats);
-            Collections.Shuffle(DvFormats);
+                new DirectPostingsFormat(LuceneTestCase.Rarely(random) ? 1 : (LuceneTestCase.Rarely(random) ? int.MaxValue : maxItemsPerBlock), 
+                                        LuceneTestCase.Rarely(random) ? 1 : (LuceneTestCase.Rarely(random) ? int.MaxValue : lowFreqCutoff)),
+                new Pulsing41PostingsFormat(1 + random.Next(20), minItemsPerBlock, maxItemsPerBlock),
+                // add pulsing again with (usually) different parameters
+                new Pulsing41PostingsFormat(1 + random.Next(20), minItemsPerBlock, maxItemsPerBlock),
+                //TODO as a PostingsFormat which wraps others, we should allow TestBloomFilteredLucene41Postings to be constructed 
+                //with a choice of concrete PostingsFormats. Maybe useful to have a generic means of marking and dealing 
+                //with such "wrapper" classes?
+                new TestBloomFilteredLucene41Postings(), 
+                new MockSepPostingsFormat(), 
+                new MockFixedIntBlockPostingsFormat(TestUtil.NextInt(random, 1, 2000)),
+                new MockVariableIntBlockPostingsFormat(TestUtil.NextInt(random, 1, 127)), 
+                new MockRandomPostingsFormat(random),
+                new NestedPulsingPostingsFormat(), 
+                new Lucene41WithOrds(), 
+                new SimpleTextPostingsFormat(),
+                new AssertingPostingsFormat(),
+                new MemoryPostingsFormat(true, random.nextFloat()), 
+                new MemoryPostingsFormat(false, random.nextFloat())
+            );
+
+            AddDocValues(avoidCodecs, 
+                new Lucene45DocValuesFormat(), 
+                new DiskDocValuesFormat(), 
+                new MemoryDocValuesFormat(), 
+                new SimpleTextDocValuesFormat(), 
+                new AssertingDocValuesFormat());
+
+            Collections.Shuffle(formats);
+            Collections.Shuffle(dvFormats);
 
             // Avoid too many open files:
-            if (Formats.Count > 4)
+            if (formats.Count > 4)
             {
-                Formats = Formats.SubList(0, 4);
+                formats = formats.SubList(0, 4);
             }
-            if (DvFormats.Count > 4)
+            if (dvFormats.Count > 4)
             {
-                DvFormats = DvFormats.SubList(0, 4);
+                dvFormats = dvFormats.SubList(0, 4);
             }
         }
 
@@ -187,8 +195,8 @@ namespace Lucene.Net.Index
             {
                 if (!avoidCodecs.Contains(p.Name))
                 {
-                    Formats.Add(p);
-                    FormatNames.Add(p.Name);
+                    formats.Add(p);
+                    formatNames.Add(p.Name);
                 }
             }
         }
@@ -199,15 +207,15 @@ namespace Lucene.Net.Index
             {
                 if (!avoidCodecs.Contains(d.Name))
                 {
-                    DvFormats.Add(d);
-                    DvFormatNames.Add(d.Name);
+                    dvFormats.Add(d);
+                    dvFormatNames.Add(d.Name);
                 }
             }
         }
 
         public override string ToString()
         {
-            return base.ToString() + ": " + PreviousMappings.ToString() + ", docValues:" + PreviousDVMappings.ToString();
+            return base.ToString() + ": " + previousMappings.ToString() + ", docValues:" + previousDVMappings.ToString();
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/b43c69b8/src/Lucene.Net.TestFramework/Util/TestRuleSetupAndRestoreClassEnv.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Util/TestRuleSetupAndRestoreClassEnv.cs b/src/Lucene.Net.TestFramework/Util/TestRuleSetupAndRestoreClassEnv.cs
index bef99b6..ba4be2c 100644
--- a/src/Lucene.Net.TestFramework/Util/TestRuleSetupAndRestoreClassEnv.cs
+++ b/src/Lucene.Net.TestFramework/Util/TestRuleSetupAndRestoreClassEnv.cs
@@ -530,7 +530,7 @@ namespace Lucene.Net.Util
 
             if (codec is RandomCodec && avoidCodecs.Count > 0)
             {
-                foreach (string name in ((RandomCodec)codec).FormatNames)
+                foreach (string name in ((RandomCodec)codec).formatNames)
                 {
                     LuceneTestCase.AssumeFalse("Class not allowed to use postings format: " + name + ".", ShouldAvoidCodec(name));
                 }