Advertisement
mfgnik

Untitled

Mar 29th, 2020
763
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.71 KB | None | 0 0
  1. // +build !solution
  2.  
  3. package testequal
  4.  
  5.  
  6.  
  7. func AreEqual(expected, actual interface{}) bool {
  8.     switch expected.(type) {
  9.     case []int:
  10.         expectedSlice := expected.([]int)
  11.         actualSlice := actual.([]int)
  12.  
  13.         if _, ok := actual.([]int); !ok {
  14.             return false
  15.         }
  16.         if expectedSlice != nil && actualSlice == nil {
  17.             return false
  18.         }
  19.         if expectedSlice == nil && actualSlice != nil {
  20.             return false
  21.         }
  22.  
  23.         if len(expectedSlice) != len(actualSlice) {
  24.             return false
  25.         }
  26.         for idx, elem := range expectedSlice {
  27.             if elem != actualSlice[idx] {
  28.                 return false
  29.             }
  30.         }
  31.         return true
  32.     case map[string]string:
  33.         if _, ok := actual.(map[string]string); !ok {
  34.             return false
  35.         }
  36.         expectedMap := expected.(map[string]string)
  37.         actualMap := actual.(map[string]string)
  38.         if expectedMap != nil && actualMap == nil {
  39.             return false
  40.         }
  41.         if expectedMap == nil && actualMap != nil {
  42.             return false
  43.         }
  44.  
  45.         if len(expectedMap) != len(actualMap) {
  46.             return false
  47.         }
  48.         for key, elem := range expectedMap {
  49.             if elem != actualMap[key] {
  50.                 return false
  51.             }
  52.         }
  53.         return true
  54.     case []byte:
  55.         if _, ok := actual.([]byte); !ok {
  56.             return false
  57.         }
  58.         expectedSlice := expected.([]byte)
  59.         actualSlice := actual.([]byte)
  60.         if expectedSlice != nil && actualSlice == nil {
  61.             return false
  62.         }
  63.         if expectedSlice == nil && actualSlice != nil {
  64.             return false
  65.         }
  66.  
  67.         if len(expectedSlice) != len(actualSlice) {
  68.             return false
  69.         }
  70.         for idx, elem := range expectedSlice {
  71.             if elem != actualSlice[idx] {
  72.                 return false
  73.             }
  74.         }
  75.         return true
  76.     case int:
  77.         return expected == actual
  78.     case int8:
  79.         return expected == actual
  80.     case int16:
  81.         return expected == actual
  82.     case int32:
  83.         return expected == actual
  84.     case int64:
  85.         return expected == actual
  86.     case uint8:
  87.         return expected == actual
  88.     case uint16:
  89.         return expected == actual
  90.     case uint32:
  91.         return expected == actual
  92.     case uint64:
  93.         return expected == actual
  94.     case string:
  95.         return expected == actual
  96.     default:
  97.         return false
  98.     }
  99. }
  100.  
  101. // AssertEqual checks that expected and actual are equal.
  102. //
  103. // Marks caller function as having failed but continues execution.
  104. //
  105. // Returns true if arguments are equal.
  106. func AssertEqual(t T, expected, actual interface{}, msgAndArgs ...interface{}) bool {
  107.     t.Helper()
  108.     if AreEqual(expected, actual) {
  109.         return true
  110.     }
  111.     msg := ""
  112.     if len(msgAndArgs) > 0 {
  113.         msg = msgAndArgs[0].(string)
  114.     }
  115.     switch expectedValue := expected.(type) {
  116.     default:
  117.         switch actualValue := actual.(type) {
  118.         default:
  119.             t.Errorf(msg, expectedValue, actualValue)
  120.         }
  121.     }
  122.     return false
  123. }
  124.  
  125. // AssertNotEqual checks that expected and actual are not equal.
  126. //
  127. // Marks caller function as having failed but continues execution.
  128. //
  129. // Returns true iff arguments are not equal.
  130. func AssertNotEqual(t T, expected, actual interface{}, msgAndArgs ...interface{}) bool {
  131.     t.Helper()
  132.     if !AreEqual(expected, actual) {
  133.         return true
  134.     }
  135.     msg := ""
  136.     if len(msgAndArgs) > 0 {
  137.         msg = msgAndArgs[0].(string)
  138.  
  139.     }
  140.     switch expectedValue := expected.(type) {
  141.     default:
  142.         switch actualValue := actual.(type) {
  143.         default:
  144.             t.Errorf(msg, expectedValue, actualValue)
  145.         }
  146.     }
  147.     return false
  148. }
  149.  
  150. // RequireEqual does the same as AssertEqual but fails caller test immediately.
  151. func RequireEqual(t T, expected, actual interface{}, msgAndArgs ...interface{}) {
  152.     t.Helper()
  153.     if AssertEqual(t, expected, actual, msgAndArgs...) {
  154.         return
  155.     }
  156.     t.FailNow()
  157. }
  158.  
  159. // RequireNotEqual does the same as AssertNotEqual but fails caller test immediately.
  160. func RequireNotEqual(t T, expected, actual interface{}, msgAndArgs ...interface{}) {
  161.     t.Helper()
  162.     if AssertNotEqual(t, expected, actual, msgAndArgs...) {
  163.         return
  164.     }
  165.     t.FailNow()
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement