Test Go bindings for BitVector.

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

Branch: refs/heads/master
Commit: b76fe6aadf3c74071b444d0d3728bf83ed1e63fa
Parents: 0c44c9f
Author: Marvin Humphrey <[email protected]>
Authored: Wed Aug 12 14:23:37 2015 -0700
Committer: Marvin Humphrey <[email protected]>
Committed: Wed Sep 9 18:25:23 2015 -0700

----------------------------------------------------------------------
 go/lucy/object_test.go | 122 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 122 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/b76fe6aa/go/lucy/object_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/object_test.go b/go/lucy/object_test.go
new file mode 100644
index 0000000..51ebe83
--- /dev/null
+++ b/go/lucy/object_test.go
@@ -0,0 +1,122 @@
+/* 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.
+ */
+
+package lucy
+
+import "testing"
+import _ 
"git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
+
+func TestBitVecSingle(t *testing.T) {
+       bitVec := NewBitVector(0)
+       if bitVec.Get(31) {
+               t.Error("Get for unset bit")
+       }
+       bitVec.Set(31)
+       if !bitVec.Get(31) {
+               t.Error("Get for true bit")
+       }
+       bitVec.Clear(31)
+       if bitVec.Get(31) {
+               t.Error("Get for cleared bit")
+       }
+       bitVec.Flip(31)
+       if !bitVec.Get(31) {
+               t.Error("Get for flipped bit")
+       }
+       if hit := bitVec.NextHit(0); hit != 31 {
+               t.Error("NextHit should find hit")
+       }
+       if hit := bitVec.NextHit(32); hit != -1 {
+               t.Error("NextHit exhausted")
+       }
+}
+
+func TestBitVecMisc(t *testing.T) {
+       bitVec := NewBitVector(0)
+       oldCap := bitVec.GetCapacity()
+       bitVec.Grow(64)
+       if newCap := bitVec.GetCapacity(); newCap <= oldCap {
+               t.Error("Grow/GetCapacity had unexpected result: %v %v", 
oldCap, newCap)
+       }
+       bitVec.Set(0)
+       bitVec.Set(63)
+       bools := bitVec.ToArray()
+       count := 0;
+       for _, val := range bools {
+               if val {
+                       count++
+               }
+       }
+       if count != 2 {
+               t.Error("ToArray yielded bad count: %d", count)
+       }
+}
+
+func TestBitVecBlock(t *testing.T) {
+       bitVec := NewBitVector(0)
+       bitVec.FlipBlock(10, 10)
+       if count := bitVec.Count(); count != 10 {
+               t.Error("FlipBlock")
+       }
+       bitVec.FlipBlock(15, 5)
+       if count := bitVec.Count(); count != 5 {
+               t.Error("FlipBlock mixed")
+       }
+       bitVec.ClearAll()
+       if count := bitVec.Count(); count != 0 {
+               t.Error("ClearAll")
+       }
+}
+
+func TestBitVecBool(t *testing.T) {
+       var dupe BitVector
+       seven := NewBitVector(0);
+       twelve := NewBitVector(0);
+       seven.FlipBlock(0, 3) // 0111
+       twelve.FlipBlock(2, 2) // 1100
+
+       dupe = seven.Clone().(BitVector)
+       dupe.And(twelve)
+       if count := dupe.Count(); count != 1 {
+               t.Errorf("And: %d", count)
+       }
+
+       dupe = seven.Clone().(BitVector)
+       dupe.Or(twelve)
+       if count := dupe.Count(); count != 4 {
+               t.Errorf("Or: %d", count)
+       }
+
+       dupe = seven.Clone().(BitVector)
+       dupe.Xor(twelve)
+       if count := dupe.Count(); count != 3 {
+               t.Errorf("Xor: %d", count)
+       }
+
+       dupe = seven.Clone().(BitVector)
+       dupe.AndNot(twelve)
+       if count := dupe.Count(); count != 2 {
+               t.Errorf("AndNot: %d", count)
+       }
+
+       dupe = seven.Clone().(BitVector)
+       dupe.Mimic(twelve)
+       if count := dupe.Count(); count != twelve.Count() {
+               t.Errorf("Mimic: %d", count)
+       }
+}
+
+

Reply via email to