| 398 | ) |
| 399 | |
| 400 | func TestResult(t *testing.T) { |
| 401 | tests := []struct { |
| 402 | result Result |
| 403 | wantEqual bool |
| 404 | wantSimilar bool |
| 405 | }{ |
| 406 | // equalResult is equal since NumDiff == 0, by definition of Equal method. |
| 407 | {equalResult, true, true}, |
| 408 | // similarResult is similar since it is a binary result where only one |
| 409 | // element was compared (i.e., Either NumSame==1 or NumDiff==1). |
| 410 | {similarResult, false, true}, |
| 411 | // differentResult is different since there are enough differences that |
| 412 | // it isn't even considered similar. |
| 413 | {differentResult, false, false}, |
| 414 | |
| 415 | // Zero value is always equal. |
| 416 | {Result{NumSame: 0, NumDiff: 0}, true, true}, |
| 417 | |
| 418 | // Binary comparisons (where NumSame+NumDiff == 1) are always similar. |
| 419 | {Result{NumSame: 1, NumDiff: 0}, true, true}, |
| 420 | {Result{NumSame: 0, NumDiff: 1}, false, true}, |
| 421 | |
| 422 | // More complex ratios. The exact ratio for similarity may change, |
| 423 | // and may require updates to these test cases. |
| 424 | {Result{NumSame: 1, NumDiff: 1}, false, true}, |
| 425 | {Result{NumSame: 1, NumDiff: 2}, false, true}, |
| 426 | {Result{NumSame: 1, NumDiff: 3}, false, false}, |
| 427 | {Result{NumSame: 2, NumDiff: 1}, false, true}, |
| 428 | {Result{NumSame: 2, NumDiff: 2}, false, true}, |
| 429 | {Result{NumSame: 2, NumDiff: 3}, false, true}, |
| 430 | {Result{NumSame: 3, NumDiff: 1}, false, true}, |
| 431 | {Result{NumSame: 3, NumDiff: 2}, false, true}, |
| 432 | {Result{NumSame: 3, NumDiff: 3}, false, true}, |
| 433 | {Result{NumSame: 1000, NumDiff: 0}, true, true}, |
| 434 | {Result{NumSame: 1000, NumDiff: 1}, false, true}, |
| 435 | {Result{NumSame: 1000, NumDiff: 2}, false, true}, |
| 436 | {Result{NumSame: 0, NumDiff: 1000}, false, false}, |
| 437 | {Result{NumSame: 1, NumDiff: 1000}, false, false}, |
| 438 | {Result{NumSame: 2, NumDiff: 1000}, false, false}, |
| 439 | } |
| 440 | |
| 441 | for _, tt := range tests { |
| 442 | if got := tt.result.Equal(); got != tt.wantEqual { |
| 443 | t.Errorf("%#v.Equal() = %v, want %v", tt.result, got, tt.wantEqual) |
| 444 | } |
| 445 | if got := tt.result.Similar(); got != tt.wantSimilar { |
| 446 | t.Errorf("%#v.Similar() = %v, want %v", tt.result, got, tt.wantSimilar) |
| 447 | } |
| 448 | } |
| 449 | } |