Make ref.Ref a type of Value too.

"Fixes" #141.
This commit is contained in:
Aaron Boodman
2015-08-04 13:52:16 -07:00
parent 4e69837ef0
commit b79d7987c4
5 changed files with 57 additions and 9 deletions
+1 -5
View File
@@ -75,11 +75,7 @@ func main() {
ref, err := types.WriteValue(nomsObj, ds)
Chk.NoError(err)
// BUG 141
nomsObj, err = types.ReadValue(ref, ds)
Chk.NoError(err)
list = list.Append(nomsObj)
list = list.Append(types.Ref{ref})
return nil
})
+8
View File
@@ -38,3 +38,11 @@ func futureEqualsValue(f Future, v Value) bool {
return f.Ref() == v.Ref()
}
}
func futureFromValue(v Value) Future {
if r, ok := v.(Ref); ok {
return &unresolvedFuture{ref:r.Ref()}
} else {
return resolvedFuture{v}
}
}
+27
View File
@@ -104,3 +104,30 @@ func TestIncrementalLoadMap(t *testing.T) {
return
})
}
func TestIncrementalAddRef(t *testing.T) {
assert := assert.New(t)
cs := &chunks.TestStore{}
expectedItem := UInt32(42)
ref, err := WriteValue(expectedItem, cs)
assert.NoError(err)
expected := NewList(Ref{ref})
ref, err = WriteValue(expected, cs)
actualVar, err := ReadValue(ref, cs)
assert.NoError(err)
assert.Equal(1, cs.Reads)
assert.True(expected.Equals(actualVar))
actual := actualVar.(List)
actualItem := actual.Get(0)
assert.Equal(2, cs.Reads)
assert.True(expectedItem.Equals(actualItem))
// do it again to make sure caching works.
actualItem = actual.Get(0)
assert.Equal(2, cs.Reads)
assert.True(expectedItem.Equals(actualItem))
}
+21
View File
@@ -0,0 +1,21 @@
package types
import (
"github.com/attic-labs/noms/ref"
)
type Ref struct {
R ref.Ref
}
func (r Ref) Equals(other Value) bool {
return r.R == other.Ref()
}
func (r Ref) Ref() ref.Ref {
return r.R
}
func (r Ref) Chunks() []Future {
return nil
}
-4
View File
@@ -5,10 +5,6 @@ import (
"github.com/attic-labs/noms/ref"
)
func futureFromValue(v Value) Future {
return resolvedFuture{v}
}
type resolvedFuture struct {
val Value
}