gopkg.in/rethinkdb/rethinkdb-go.v6@v6.2.2/internal/compare/compare_test.go (about)

     1  package compare
     2  
     3  import "testing"
     4  
     5  func TestCompareString(t *testing.T) {
     6  
     7  	// simple
     8  	Assert(t, "a", "a")
     9  	Assert(t, "á", "á")
    10  	Assert(t, "something longer\nwith two lines", "something longer\nwith two lines")
    11  
    12  	AssertFalse(t, "a", "b")
    13  	AssertFalse(t, "a", 1)
    14  	AssertFalse(t, "a", []interface{}{})
    15  	AssertFalse(t, "a", nil)
    16  	AssertFalse(t, "a", []interface{}{"a"})
    17  	AssertFalse(t, "a", map[string]interface{}{"a": 1})
    18  }
    19  func TestCompareArray(t *testing.T) {
    20  
    21  	// simple pass
    22  	Assert(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 3})
    23  
    24  	// out of order
    25  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 3, 2})
    26  
    27  	// totally mistmatched lists
    28  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{3, 4, 5})
    29  
    30  	// missing items
    31  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2})
    32  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 3})
    33  
    34  	// extra items
    35  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 3, 4})
    36  
    37  	// empty array
    38  	Assert(t, []interface{}{}, []interface{}{})
    39  	AssertFalse(t, []interface{}{1}, []interface{}{})
    40  	AssertFalse(t, []interface{}{}, []interface{}{1})
    41  	AssertFalse(t, []interface{}{}, nil)
    42  
    43  	// strings
    44  	Assert(t, []interface{}{"a", "b"}, []interface{}{"a", "b"})
    45  	AssertFalse(t, []interface{}{"a", "c"}, []interface{}{"a", "b"})
    46  
    47  	// multiple of a single value
    48  	Assert(t, []interface{}{1, 2, 2, 3, 3, 3}, []interface{}{1, 2, 2, 3, 3, 3})
    49  	AssertFalse(t, []interface{}{1, 2, 2, 3, 3, 3}, []interface{}{1, 2, 3})
    50  	AssertFalse(t, []interface{}{1, 2, 3}, []interface{}{1, 2, 2, 3, 3, 3})
    51  }
    52  func TestCompareArray_PartialMatch(t *testing.T) {
    53  	// note that these are all in-order
    54  
    55  	// simple
    56  	Assert(t, PartialMatch([]interface{}{1}), []interface{}{1, 2, 3})
    57  	Assert(t, PartialMatch([]interface{}{2}), []interface{}{1, 2, 3})
    58  	Assert(t, PartialMatch([]interface{}{3}), []interface{}{1, 2, 3})
    59  
    60  	Assert(t, PartialMatch([]interface{}{1, 2}), []interface{}{1, 2, 3})
    61  	Assert(t, PartialMatch([]interface{}{1, 3}), []interface{}{1, 2, 3})
    62  
    63  	Assert(t, PartialMatch([]interface{}{1, 2, 3}), []interface{}{1, 2, 3})
    64  
    65  	AssertFalse(t, PartialMatch([]interface{}{4}), []interface{}{1, 2, 3})
    66  
    67  	// ordered
    68  	AssertFalse(t, PartialMatch([]interface{}{3, 2, 1}).SetOrdered(true), []interface{}{1, 2, 3})
    69  	AssertFalse(t, PartialMatch([]interface{}{1, 3, 2}).SetOrdered(true), []interface{}{1, 2, 3})
    70  
    71  	// empty array
    72  	Assert(t, PartialMatch([]interface{}{}), []interface{}{1, 2, 3})
    73  
    74  	// multiple of a single items
    75  	Assert(t, PartialMatch([]interface{}{1, 2, 2}), []interface{}{1, 2, 2, 3, 3, 3})
    76  	AssertFalse(t, PartialMatch([]interface{}{1, 2, 2, 2}), []interface{}{1, 2, 2, 3, 3, 3})
    77  }
    78  func TestCompareArray_unordered(t *testing.T) {
    79  
    80  	// simple
    81  	Assert(t, UnorderedMatch([]interface{}{1, 2}), []interface{}{1, 2})
    82  	Assert(t, UnorderedMatch([]interface{}{2, 1}), []interface{}{1, 2})
    83  
    84  	AssertFalse(t, UnorderedMatch([]interface{}{1, 2}), []interface{}{1, 2, 3})
    85  	AssertFalse(t, UnorderedMatch([]interface{}{1, 3}), []interface{}{1, 2, 3})
    86  	AssertFalse(t, UnorderedMatch([]interface{}{3, 1}), []interface{}{1, 2, 3})
    87  
    88  	// empty array
    89  	Assert(t, UnorderedMatch([]interface{}{}), []interface{}{})
    90  }
    91  func TestCompareMap(t *testing.T) {
    92  
    93  	// simple
    94  	Assert(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"a": 1, "b": 2, "c": 3})
    95  	Assert(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"c": 3, "a": 1, "b": 2})
    96  
    97  	AssertFalse(t, map[string]interface{}{"a": 1, "b": 2, "c": 3}, map[string]interface{}{"a": 1})
    98  	AssertFalse(t, map[string]interface{}{"a": 1}, map[string]interface{}{"a": 1, "b": 2, "c": 3})
    99  
   100  	// empty
   101  	Assert(t, map[string]interface{}{}, map[string]interface{}{})
   102  	AssertFalse(t, map[string]interface{}{}, map[string]interface{}{"a": 1})
   103  	AssertFalse(t, map[string]interface{}{"a": 1}, map[string]interface{}{})
   104  
   105  	Assert(t, map[interface{}]interface{}{1: 1225, 2: 1250, 3: 1275, 0: 1200}, map[string]interface{}{"2": 1250, "3": 1275, "0": 1200, "1": 1225})
   106  	Assert(t, map[interface{}]interface{}{0: 22, 20: 22, 30: 23}, map[string]interface{}{"30": 23, "0": 22, "20": 22})
   107  }
   108  func TestCompareMap_PartialMatch(t *testing.T) {
   109  
   110  	// simple
   111  	Assert(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{"a": 1})
   112  	Assert(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{"a": 1, "b": 2})
   113  
   114  	AssertFalse(t, PartialMatch(map[string]interface{}{"a": 2}), map[string]interface{}{"a": 1, "b": 2})
   115  	AssertFalse(t, PartialMatch(map[string]interface{}{"c": 1}), map[string]interface{}{"a": 1, "b": 2})
   116  	AssertFalse(t, PartialMatch(map[string]interface{}{"a": 1, "b": 2}), map[string]interface{}{"b": 2})
   117  
   118  	// empty
   119  	Assert(t, PartialMatch(map[string]interface{}{}), map[string]interface{}{})
   120  	Assert(t, PartialMatch(map[string]interface{}{}), map[string]interface{}{"a": 1})
   121  	AssertFalse(t, PartialMatch(map[string]interface{}{"a": 1}), map[string]interface{}{})
   122  }
   123  func TestCompareMap_inSlice(t *testing.T) {
   124  
   125  	// simple
   126  	Assert(t, []interface{}{map[string]interface{}{"a": 1}}, []interface{}{map[string]interface{}{"a": 1}})
   127  	Assert(t, []interface{}{map[string]interface{}{"a": 1, "b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   128  	Assert(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}})
   129  
   130  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   131  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   132  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "c": 3}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   133  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 2, "c": 3}}, []interface{}{map[string]interface{}{"a": 1}})
   134  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   135  
   136  	// order
   137  	AssertFalse(t, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}, []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}})
   138  
   139  	// partial
   140  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   141  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   142  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   143  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1, "b": 2}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   144  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}), []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}, map[string]interface{}{"c": 3}})
   145  
   146  	AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 2}}), []interface{}{map[string]interface{}{"a": 1, "b": 2}})
   147  	AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1, "b": 2}}), []interface{}{map[string]interface{}{"a": 1}})
   148  
   149  	// partial order
   150  	AssertFalse(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}).SetOrdered(true), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}})
   151  
   152  	// partial unordered
   153  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}})
   154  	Assert(t, PartialMatch([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"b": 2}}).SetOrdered(false), []interface{}{map[string]interface{}{"b": 2}, map[string]interface{}{"a": 1}})
   155  
   156  	Assert(t, []interface{}{map[string]interface{}{"a": 1, "b": 1}, PartialMatch(map[string]interface{}{"a": 2})}, []interface{}{map[string]interface{}{"a": 1, "b": 1}, map[string]interface{}{"a": 2, "b": 2}})
   157  }
   158  
   159  func TestCompareUUID(t *testing.T) {
   160  
   161  	// simple
   162  	Assert(t, IsUUID(), "4e9e5bc2-9b11-4143-9aa1-75c10e7a193a")
   163  	AssertFalse(t, IsUUID(), "4")
   164  	AssertFalse(t, IsUUID(), "*")
   165  	AssertFalse(t, IsUUID(), nil)
   166  }
   167  
   168  func TestCompareNumbers(t *testing.T) {
   169  
   170  	// simple
   171  	Assert(t, 1, 1)
   172  	Assert(t, 1, 1.0)
   173  	Assert(t, 1.0, 1)
   174  	Assert(t, 1.0, 1.0)
   175  
   176  	AssertFalse(t, 1, 2)
   177  	AssertFalse(t, 1, 2.0)
   178  	AssertFalse(t, 1.0, 2)
   179  	AssertFalse(t, 1.0, 2.0)
   180  
   181  	// precision
   182  	AssertPrecision(t, 1, 1.4, 0.5)
   183  	AssertPrecision(t, 1.0, 1.4, 0.5)
   184  
   185  	AssertPrecisionFalse(t, 1, 2, 0.5)
   186  	AssertPrecisionFalse(t, 1, 1.6, 0.5)
   187  	AssertPrecisionFalse(t, 1.0, 2, 0.5)
   188  	AssertPrecisionFalse(t, 1.0, 1.6, 0.5)
   189  }