1
1
package gobenrn
2
2
3
3
import (
4
+ "math/bits"
4
5
"strings"
5
6
"testing"
6
7
"time"
@@ -17,8 +18,9 @@ const (
17
18
unknownBirthDateNrn = "009000 002 00"
18
19
)
19
20
21
+ var validNrns = []string {validNrn , validNrnWithSpaces , validFormattedNrn }
22
+
20
23
func Test_GetBirthDateRFC3339_Success (t * testing.T ) {
21
- validNrns := []string {validNrn , validNrnWithSpaces , validFormattedNrn }
22
24
for _ , nrn := range validNrns {
23
25
t .Run ("With_Valid_NRN_" + nrn , func (t * testing.T ) {
24
26
dateOfBirth , err := GetBirthDate (nrn , time .RFC3339 )
@@ -39,7 +41,6 @@ func Test_GetBirthDateRFC3339_Failure(t *testing.T) {
39
41
}
40
42
41
43
func Test_GetAge_Success (t * testing.T ) {
42
- validNrns := []string {validNrn , validNrnWithSpaces , validFormattedNrn }
43
44
for _ , nrn := range validNrns {
44
45
t .Run ("With_Valid_NRN_" + nrn , func (t * testing.T ) {
45
46
age , err := GetAge (nrn )
@@ -56,7 +57,6 @@ func Test_GetAge_Failure(t *testing.T) {
56
57
}
57
58
58
59
func Test_IsMale_Success (t * testing.T ) {
59
- validNrns := []string {validNrn , validNrnWithSpaces , validFormattedNrn }
60
60
for _ , nrn := range validNrns {
61
61
t .Run ("With_Valid_NRN_" + nrn , func (t * testing.T ) {
62
62
male , err := IsMale (nrn )
@@ -87,7 +87,6 @@ func Test_IsFemale_Failure(t *testing.T) {
87
87
}
88
88
89
89
func Test_IsBirthDateKnown_Success (t * testing.T ) {
90
- validNrns := []string {validNrn , validNrnWithSpaces , validFormattedNrn }
91
90
for _ , nrn := range validNrns {
92
91
t .Run ("With_Valid_NRN_" + nrn , func (t * testing.T ) {
93
92
known , err := IsBirthDateKnown (nrn )
@@ -102,3 +101,46 @@ func Test_IsBirthDateKnown_Failure(t *testing.T) {
102
101
assert .Nil (t , err )
103
102
assert .False (t , known )
104
103
}
104
+
105
+ func Test_Equal_Success (t * testing.T ) {
106
+ combine := func (set []string , n int ) (subsets [][]string ) {
107
+ length := uint (len (set ))
108
+ if n > len (set ) {
109
+ n = len (set )
110
+ }
111
+
112
+ for subsetBits := 1 ; subsetBits < (1 << length ); subsetBits ++ {
113
+ if n > 0 && bits .OnesCount (uint (subsetBits )) != n {
114
+ continue
115
+ }
116
+
117
+ var subset []string
118
+ for object := uint (0 ); object < length ; object ++ {
119
+ if (subsetBits >> object )& 1 == 1 {
120
+ subset = append (subset , set [object ])
121
+ }
122
+ }
123
+ subsets = append (subsets , subset )
124
+ }
125
+ return subsets
126
+ }
127
+
128
+ for _ , combination := range combine (validNrns , 2 ) {
129
+ nrn1 , nrn2 := combination [0 ], combination [1 ]
130
+ t .Run ("With_" + nrn1 + "_And_" + nrn2 , func (t * testing.T ) {
131
+ areEqual , err := Equal (nrn1 , nrn2 )
132
+ assert .Nil (t , err )
133
+ assert .True (t , areEqual )
134
+ })
135
+ }
136
+ }
137
+
138
+ func Test_Equal_Failure (t * testing.T ) {
139
+ areEqual , err := Equal (validNrn , invalidLengthNrn )
140
+ assert .False (t , areEqual )
141
+ assert .ErrorContains (t , err , ErrInvalidNrnLength .Error ())
142
+
143
+ areEqual , err = Equal (validNrn , validFormattedFemaleNrn )
144
+ assert .Nil (t , err )
145
+ assert .False (t , areEqual )
146
+ }
0 commit comments