github.com/ndau/noms@v1.0.5/go/types/equals_test.go (about)

     1  // Copyright 2016 Attic Labs, Inc. All rights reserved.
     2  // Licensed under the Apache License, version 2.0:
     3  // http://www.apache.org/licenses/LICENSE-2.0
     4  
     5  package types
     6  
     7  import (
     8  	"bytes"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestValueEquals(t *testing.T) {
    15  	assert := assert.New(t)
    16  	vrw := newTestValueStore()
    17  
    18  	values := []func() Value{
    19  		func() Value { return Bool(false) },
    20  		func() Value { return Bool(true) },
    21  		func() Value { return Number(0) },
    22  		func() Value { return Number(-1) },
    23  		func() Value { return Number(1) },
    24  		func() Value { return String("") },
    25  		func() Value { return String("hi") },
    26  		func() Value { return String("bye") },
    27  		func() Value {
    28  			return NewBlob(vrw, &bytes.Buffer{})
    29  		},
    30  		func() Value {
    31  			return NewBlob(vrw, bytes.NewBufferString("hi"))
    32  		},
    33  		func() Value {
    34  			return NewBlob(vrw, bytes.NewBufferString("bye"))
    35  		},
    36  		func() Value {
    37  			b1 := NewBlob(vrw, bytes.NewBufferString("hi"))
    38  			b2 := NewBlob(vrw, bytes.NewBufferString("bye"))
    39  			return newBlob(newBlobMetaSequence(1, []metaTuple{
    40  				newMetaTuple(NewRef(b1), orderedKeyFromInt(2), 2),
    41  				newMetaTuple(NewRef(b2), orderedKeyFromInt(5), 5),
    42  			}, nil))
    43  		},
    44  		func() Value { return NewList(vrw) },
    45  		func() Value { return NewList(vrw, String("foo")) },
    46  		func() Value { return NewList(vrw, String("bar")) },
    47  		func() Value { return NewMap(vrw) },
    48  		func() Value { return NewMap(vrw, String("a"), String("a")) },
    49  		func() Value { return NewSet(vrw) },
    50  		func() Value { return NewSet(vrw, String("hi")) },
    51  
    52  		func() Value { return BoolType },
    53  		func() Value { return StringType },
    54  		func() Value { return MakeStructType("a") },
    55  		func() Value { return MakeStructType("b") },
    56  		func() Value { return MakeListType(BoolType) },
    57  		func() Value { return MakeListType(NumberType) },
    58  		func() Value { return MakeSetType(BoolType) },
    59  		func() Value { return MakeSetType(NumberType) },
    60  		func() Value { return MakeRefType(BoolType) },
    61  		func() Value { return MakeRefType(NumberType) },
    62  		func() Value {
    63  			return MakeMapType(BoolType, ValueType)
    64  		},
    65  		func() Value {
    66  			return MakeMapType(NumberType, ValueType)
    67  		},
    68  	}
    69  
    70  	for i, f1 := range values {
    71  		for j, f2 := range values {
    72  			if i == j {
    73  				assert.True(f1().Equals(f2()))
    74  			} else {
    75  				assert.False(f1().Equals(f2()))
    76  			}
    77  		}
    78  		v := f1()
    79  		if v != nil {
    80  			r := NewRef(v)
    81  			assert.False(r.Equals(v))
    82  			assert.False(v.Equals(r))
    83  		}
    84  	}
    85  }