From 9a3f85913ea160420885fef996b4ef8bc678a44e Mon Sep 17 00:00:00 2001 From: Wayne Manselle Date: Mon, 3 Apr 2023 23:02:53 -0700 Subject: [PATCH 1/5] CUSIPs WIP --- finance.go | 128 ++++++++++++++++++++++++++++++++++++++++++++++++ finance_test.go | 93 +++++++++++++++++++++++++++++++++++ lookup.go | 1 + 3 files changed, 222 insertions(+) create mode 100644 finance.go create mode 100644 finance_test.go diff --git a/finance.go b/finance.go new file mode 100644 index 00000000..8d77fbe0 --- /dev/null +++ b/finance.go @@ -0,0 +1,128 @@ +package gofakeit + +import ( + "math/rand" + "strconv" + "unicode" +) + +const cusipRunes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" +const ppnRunes = "*@#" + +func replaceWithCusipRunes(r *rand.Rand, str string, ppn bool) string { + if str == "" { + return str + } + bytestr := []byte(str) + for i := 0; i < len(bytestr); i++ { + if bytestr[i] == questionmark { + bytestr[i] = byte(randCusipRune(r, ppn)) + } + } + + return string(bytestr) +} + +func randCusipRune(r *rand.Rand, ppn bool) rune { + randRunes := cusipRunes + if ppn { + randRunes = randRunes + ppnRunes + } + return rune(cusipRunes[r.Intn(len(randRunes))]) +} + +func cusip(r *rand.Rand, ppn bool) string { + cusip := replaceWithCusipRunes(r, "????????", ppn) + chkDigit := CusipCheckDigit(cusip) + return cusip + chkDigit +} + +func CusipCheckDigit(cusip string) string { + + sum := 0 + for i, c := range cusip { + v := 0 + if unicode.IsDigit(c) { + v = int(c - '0') + } + if unicode.IsLetter(c) { + v = int(c-'A') + 10 + } + if c == '*' { + v = 36 + } + if c == '@' { + v = 37 + } + if c == '#' { + v = 38 + } + + if (7 - i%2) == 0 { + v = v * 2 + } + + sum = sum + int(v/10) + v%10 + } + + return strconv.Itoa((10 - (sum % 10)) % 10) +} + +func Cusip() string { + return cusip(globalFaker.Rand, false) +} + +func PpnCusip() string { + return cusip(globalFaker.Rand, true) +} + +func (f *Faker) Cusip() string { + return cusip(f.Rand, false) +} + +func (f *Faker) PpnCusip() string { + return cusip(f.Rand, true) +} + +/* +func isin(r *rand.Rand) string { + return "xxxxxxxxxxxx" +} + +func symbol(r *rand.Rand) string { + return "xxxx" +} +*/ + +func addFinanceLookup() { + AddFuncLookup("cusip", Info{ + Display: "CUSIP", + Category: "finance", + Description: "Random CUSIP", + Example: "38259P508", + Output: "string", + Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { + return cusip(r, false), nil + }, + }) + /*AddFuncLookup("isin", Info{ + Display: "ISIN", + Category: "finance", + Description: "Random ISIN", + Example: "", + Output: "string", + Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { + return isin(r), nil + }, + }) + AddFuncLookup("symbol", Info{ + Display: "symbol", + Category: "finance", + Description: "Random Symbol", + Example: "", + Output: "string", + Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { + return symbol(r), nil + }, + })*/ +} diff --git a/finance_test.go b/finance_test.go new file mode 100644 index 00000000..1b000eba --- /dev/null +++ b/finance_test.go @@ -0,0 +1,93 @@ +package gofakeit + +import ( + "fmt" + "testing" +) + +func ExampleCusip() { + Seed(11) + fmt.Println(Cusip()) + // Output: CBHG2P1N5 +} + +func ExampleFaker_Cusip() { + f := New(11) + fmt.Println(f.Cusip()) + // Output: CBHG2P1N5 +} + +func TestCusip(t *testing.T) { + Seed(11) + cusip := Cusip() + if cusip == "" { + t.Error("Valid Cusips are not blank") + } + if len(cusip) != 9 { + t.Error("Valid Cusips are 9 characters in length") + } + if CusipCheckDigit(cusip[:8]) != string(cusip[8]) { + t.Error("Cusip has invalid checksum") + } + +} + +func BenchmarkCusip(b *testing.B) { + b.Run("package", func(b *testing.B) { + for i := 0; i < b.N; i++ { + Cusip() + } + }) + + b.Run("Faker math", func(b *testing.B) { + f := New(0) + + for i := 0; i < b.N; i++ { + f.Cusip() + } + }) + + b.Run("Faker crypto", func(b *testing.B) { + f := NewCrypto() + + for i := 0; i < b.N; i++ { + f.Cusip() + } + }) +} + +func ExamplePpnCusip() { + Seed(11) + fmt.Println(PpnCusip()) + // Output: 6EHPQ4AK9 +} + +func ExampleFaker_PpnCusip() { + f := New(11) + fmt.Println(f.PpnCusip()) + // Output: 6EHPQ4AK9 +} + +func BenchmarkPpnCusip(b *testing.B) { + b.Run("package", func(b *testing.B) { + for i := 0; i < b.N; i++ { + PpnCusip() + } + }) + + b.Run("Faker math", func(b *testing.B) { + f := New(0) + + for i := 0; i < b.N; i++ { + f.PpnCusip() + } + }) + + b.Run("Faker crypto", func(b *testing.B) { + f := NewCrypto() + + for i := 0; i < b.N; i++ { + f.PpnCusip() + } + }) +} diff --git a/lookup.go b/lookup.go index 29732932..8cca8983 100644 --- a/lookup.go +++ b/lookup.go @@ -98,6 +98,7 @@ func initLookup() { addDatabaseSQLLookup() addErrorLookup() addHtmlLookup() + addFinanceLookup() } // NewMapParams will create a new MapParams From 9199e8edeaa4f28195ba7288fadb071a7951fd26 Mon Sep 17 00:00:00 2001 From: Wayne Manselle Date: Sat, 8 Apr 2023 16:43:57 -0700 Subject: [PATCH 2/5] Cleanup and update benchmarks --- BENCHMARKS.md | 631 +++++++++++++++++++++++++++++++++++------------- finance.go | 151 ++++++++---- finance_test.go | 59 ++++- 3 files changed, 618 insertions(+), 223 deletions(-) diff --git a/BENCHMARKS.md b/BENCHMARKS.md index f4b91107..38f1f3e5 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -1,176 +1,461 @@ go test -bench=. -benchmem -goos: darwin -goarch: amd64 -pkg: github.com/brianvoe/gofakeit +goos: linux +goarch: amd64 +pkg: github.com/brianvoe/gofakeit/v6 +cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz Table generated with tablesgenerator.com/markdown_tables -| Benchmark | Ops | CPU | MEM | MEM alloc | -|---------------------------------|-----------|-------------|------------|--------------| -| BenchmarkAddress-16 | 797298 | 1649 ns/op | 248 B/op | 7 allocs/op | -| BenchmarkStreet-16 | 1987233 | 601 ns/op | 62 B/op | 3 allocs/op | -| BenchmarkStreetNumber-16 | 4808812 | 252 ns/op | 36 B/op | 2 allocs/op | -| BenchmarkStreetPrefix-16 | 12750800 | 83.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkStreetName-16 | 14026328 | 81.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkStreetSuffix-16 | 13836478 | 81.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCity-16 | 4617508 | 245 ns/op | 15 B/op | 1 allocs/op | -| BenchmarkState-16 | 12095868 | 86.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkStateAbr-16 | 13337152 | 83.5 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkZip-16 | 6264339 | 201 ns/op | 5 B/op | 1 allocs/op | -| BenchmarkCountry-16 | 12378775 | 85.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCountryAbr-16 | 12770610 | 86.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLatitude-16 | 30935530 | 32.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLongitude-16 | 35305698 | 32.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLatitudeInRange-16 | 35285907 | 34.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLongitudeInRange-16 | 29716158 | 34.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkPetName-16 | 15559858 | 69.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkAnimal-16 | 15493616 | 71.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkAnimalType-16 | 15802927 | 72.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFarmAnimal-16 | 13610484 | 81.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCat-16 | 14966256 | 76.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkDog-16 | 12833390 | 88.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUsername-16 | 5720742 | 220 ns/op | 16 B/op | 2 allocs/op | -| BenchmarkPassword-16 | 2016339 | 593 ns/op | 304 B/op | 6 allocs/op | -| BenchmarkBeerName-16 | 15339746 | 72.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBeerStyle-16 | 12902784 | 86.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBeerHop-16 | 15131584 | 71.5 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBeerYeast-16 | 14747238 | 73.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBeerMalt-16 | 14982421 | 78.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBeerIbu-16 | 20595496 | 53.4 ns/op | 8 B/op | 1 allocs/op | -| BenchmarkBeerAlcohol-16 | 3921880 | 299 ns/op | 40 B/op | 3 allocs/op | -| BenchmarkBeerBlg-16 | 4150712 | 300 ns/op | 48 B/op | 3 allocs/op | -| BenchmarkCar-16 | 1996923 | 597 ns/op | 96 B/op | 1 allocs/op | -| BenchmarkCarType-16 | 17076163 | 65.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCarFuelType-16 | 14844217 | 73.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCarTransmissionType-16 | 16047379 | 68.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCarMaker-16 | 14501310 | 76.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCarModel-16 | 12503469 | 87.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkColor-16 | 14812000 | 75.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkSafeColor-16 | 17647850 | 66.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHexColor-16 | 3710928 | 326 ns/op | 24 B/op | 3 allocs/op | -| BenchmarkRGBColor-16 | 12641104 | 83.3 ns/op | 32 B/op | 1 allocs/op | -| BenchmarkCompany-16 | 17277220 | 67.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCompanySuffix-16 | 17099479 | 60.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBuzzWord-16 | 15963231 | 68.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBS-16 | 15149085 | 71.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkJob-16 | 3203989 | 383 ns/op | 64 B/op | 1 allocs/op | -| BenchmarkJobTitle-16 | 15232904 | 70.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkJobDescriptor-16 | 15603652 | 69.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkJobLevel-16 | 14281743 | 77.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkEmoji-16 | 15016417 | 75.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkEmojiDescription-16 | 14764699 | 76.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkEmojiCategory-16 | 13463936 | 78.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkEmojiAlias-16 | 12291789 | 87.5 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkEmojiTag-16 | 13451284 | 82.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFileMimeType-16 | 16654501 | 67.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFileExtension-16 | 13656126 | 73.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFruit-16 | 15039096 | 74.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkVegetable-16 | 14397543 | 76.5 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBreakfast-16 | 5960095 | 181 ns/op | 35 B/op | 1 allocs/op | -| BenchmarkLunch-16 | 6350367 | 189 ns/op | 37 B/op | 1 allocs/op | -| BenchmarkDinner-16 | 6245412 | 177 ns/op | 37 B/op | 1 allocs/op | -| BenchmarkSnack-16 | 5891965 | 192 ns/op | 36 B/op | 1 allocs/op | -| BenchmarkDessert-16 | 6603031 | 186 ns/op | 34 B/op | 2 allocs/op | -| BenchmarkGamertag-16 | 3237366 | 352 ns/op | 36 B/op | 3 allocs/op | -| BenchmarkGenerate-16 | 457622 | 2652 ns/op | 916 B/op | 23 allocs/op | -| BenchmarkMap-16 | 290334 | 4145 ns/op | 1082 B/op | 16 allocs/op | -| BenchmarkHackerPhrase-16 | 200760 | 5623 ns/op | 2909 B/op | 37 allocs/op | -| BenchmarkHackerAbbreviation-16 | 15939142 | 71.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHackerAdjective-16 | 14837203 | 70.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHackerNoun-16 | 14633212 | 72.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHackerVerb-16 | 13376676 | 82.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHackerIngverb-16 | 14869647 | 72.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkReplaceWithNumbers-16 | 4214044 | 287 ns/op | 32 B/op | 1 allocs/op | -| BenchmarkHipsterWord-16 | 14753112 | 71.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHipsterSentence-16 | 871815 | 1396 ns/op | 305 B/op | 3 allocs/op | -| BenchmarkHipsterParagraph-16 | 42579 | 28624 ns/op | 10560 B/op | 48 allocs/op | -| BenchmarkImageURL-16 | 10556988 | 121 ns/op | 38 B/op | 3 allocs/op | -| BenchmarkDomainName-16 | 2852584 | 428 ns/op | 53 B/op | 2 allocs/op | -| BenchmarkDomainSuffix-16 | 15614646 | 70.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkURL-16 | 1128352 | 1056 ns/op | 189 B/op | 4 allocs/op | -| BenchmarkHTTPMethod-16 | 15604741 | 72.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkIPv4Address-16 | 3539780 | 332 ns/op | 48 B/op | 5 allocs/op | -| BenchmarkIPv6Address-16 | 2419968 | 490 ns/op | 96 B/op | 7 allocs/op | -| BenchmarkMacAddress-16 | 2003596 | 619 ns/op | 79 B/op | 6 allocs/op | -| BenchmarkHTTPStatusCode-16 | 22232200 | 50.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHTTPStatusCodeSimple-16 | 21198192 | 48.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLogLevel-16 | 13729278 | 78.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUserAgent-16 | 1000000 | 1044 ns/op | 300 B/op | 5 allocs/op | -| BenchmarkChromeUserAgent-16 | 1591886 | 783 ns/op | 188 B/op | 5 allocs/op | -| BenchmarkFirefoxUserAgent-16 | 742941 | 1400 ns/op | 362 B/op | 6 allocs/op | -| BenchmarkSafariUserAgent-16 | 930159 | 1306 ns/op | 551 B/op | 7 allocs/op | -| BenchmarkOperaUserAgent-16 | 1454205 | 829 ns/op | 216 B/op | 5 allocs/op | -| BenchmarkLanguage-16 | 15265677 | 71.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLanguageAbbreviation-16 | 16144437 | 68.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkProgrammingLanguage-16 | 16125788 | 71.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkProgrammingLanguageBest-16 | 1000000000 | 0.229 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkBool-16 | 79448815 | 15.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUUID-16 | 11553009 | 106 ns/op | 48 B/op | 1 allocs/op | -| BenchmarkNumber-16 | 59585859 | 17.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUint8-16 | 79947612 | 15.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUint16-16 | 79249844 | 15.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUint32-16 | 81112372 | 14.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkUint64-16 | 50800922 | 20.5 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkInt8-16 | 66494482 | 15.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkInt16-16 | 79505629 | 15.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkInt32-16 | 79967979 | 15.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkInt64-16 | 60566858 | 19.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFloat32-16 | 84251548 | 14.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFloat32Range-16 | 80528571 | 14.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFloat64-16 | 94149510 | 12.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkFloat64Range-16 | 94346104 | 12.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkShuffleInts-16 | 9075564 | 130 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCurrency-16 | 11273227 | 115 ns/op | 32 B/op | 1 allocs/op | -| BenchmarkCurrencyShort-16 | 15565836 | 72.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCurrencyLong-16 | 15420937 | 71.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkPrice-16 | 80781411 | 15.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCreditCard-16 | 1637452 | 751 ns/op | 88 B/op | 4 allocs/op | -| BenchmarkCreditCardType-16 | 17678868 | 64.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkCreditCardNumber-16 | 3361524 | 349 ns/op | 16 B/op | 1 allocs/op | -| BenchmarkCreditCardNumberLuhn-16 | 279769 | 3620 ns/op | 160 B/op | 10 allocs/op | -| BenchmarkCreditCardExp-16 | 7523824 | 150 ns/op | 5 B/op | 1 allocs/op | -| BenchmarkCreditCardCvv-16 | 15185973 | 73.6 ns/op | 3 B/op | 1 allocs/op | -| BenchmarkName-16 | 5436148 | 215 ns/op | 17 B/op | 1 allocs/op | -| BenchmarkFirstName-16 | 14362125 | 72.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLastName-16 | 15530926 | 72.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkNamePrefix-16 | 18074462 | 66.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkNameSuffix-16 | 14657012 | 73.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkSSN-16 | 18693813 | 68.9 ns/op | 16 B/op | 1 allocs/op | -| BenchmarkGender-16 | 72023787 | 15.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkPerson-16 | 282908 | 4377 ns/op | 752 B/op | 24 allocs/op | -| BenchmarkContact-16 | 1369327 | 911 ns/op | 146 B/op | 6 allocs/op | -| BenchmarkPhone-16 | 6015615 | 204 ns/op | 16 B/op | 1 allocs/op | -| BenchmarkPhoneFormatted-16 | 3928914 | 296 ns/op | 16 B/op | 1 allocs/op | -| BenchmarkEmail-16 | 1901041 | 653 ns/op | 98 B/op | 4 allocs/op | -| BenchmarkLetter-16 | 65959573 | 17.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkDigit-16 | 58815334 | 17.4 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkNumerify-16 | 5526314 | 207 ns/op | 16 B/op | 1 allocs/op | -| BenchmarkLexify-16 | 9712312 | 129 ns/op | 8 B/op | 1 allocs/op | -| BenchmarkShuffleStrings-16 | 8997901 | 119 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkDate-16 | 5949220 | 194 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkDateRange-16 | 7122076 | 166 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkMonth-16 | 56979296 | 19.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkDay-16 | 61808844 | 17.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkWeekDay-16 | 62598561 | 19.3 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkYear-16 | 14533374 | 76.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkHour-16 | 62130793 | 17.0 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkMinute-16 | 66836017 | 17.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkSecond-16 | 69860632 | 17.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkNanoSecond-16 | 66957362 | 17.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkTimeZone-16 | 13841594 | 78.7 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkTimeZoneFull-16 | 12788362 | 89.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkTimeZoneAbv-16 | 14413452 | 77.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkTimeZoneOffset-16 | 10699014 | 103 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkNoun-16 | 15025992 | 74.6 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkVerb-16 | 13394044 | 82.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkAdverb-16 | 13968967 | 78.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkPreposition-16 | 14575834 | 81.1 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkAdjective-16 | 13957762 | 82.9 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkWord-16 | 11083752 | 98.2 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkSentence-16 | 647954 | 1642 ns/op | 251 B/op | 2 allocs/op | -| BenchmarkParagraph-16 | 34026 | 35489 ns/op | 9587 B/op | 47 allocs/op | -| BenchmarkLoremIpsumWord-16 | 15156211 | 70.8 ns/op | 0 B/op | 0 allocs/op | -| BenchmarkLoremIpsumSentence-16 | 908371 | 1293 ns/op | 229 B/op | 2 allocs/op | -| BenchmarkLoremIpsumParagraph-16 | 41920 | 27860 ns/op | 9214 B/op | 45 allocs/op | -| BenchmarkQuestion-16 | 1000000 | 1152 ns/op | 315 B/op | 4 allocs/op | -| BenchmarkQuote-16 | 924054 | 1263 ns/op | 268 B/op | 3 allocs/op | -| BenchmarkPhrase-16 | 11034157 | 94.6 ns/op | 0 B/op | 0 allocs/op | \ No newline at end of file +| Benchmark | Ops | CPU | MEM | MEM alloc | +|--------------------------------------------------|------------|------------------|----------------|-------------------| +| BenchmarkAddress/package-8 | 1270872 | 940.1 ns/op | 197 B/op | 5 allocs/op | +| BenchmarkAddress/Faker_math-8 | 1238563 | 1042 ns/op | 197 B/op | 5 allocs/op | +| BenchmarkAddress/Faker_crypto-8 | 139857 | 7862 ns/op | 197 B/op | 5 allocs/op | +| BenchmarkStreet/package-8 | 2955518 | 422.6 ns/op | 26 B/op | 2 allocs/op | +| BenchmarkStreet/Faker_math-8 | 3027224 | 427.3 ns/op | 26 B/op | 2 allocs/op | +| BenchmarkStreet/Faker_crypto-8 | 352165 | 3559 ns/op | 26 B/op | 2 allocs/op | +| BenchmarkStreetNumber/package-8 | 6842211 | 149.2 ns/op | 4 B/op | 1 allocs/op | +| BenchmarkStreetNumber/Faker_math-8 | 6924288 | 158.8 ns/op | 4 B/op | 1 allocs/op | +| BenchmarkStreetNumber/Faker_crypto-8 | 549988 | 1900 ns/op | 4 B/op | 1 allocs/op | +| BenchmarkStreetPrefix/package-8 | 18441643 | 74.12 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetPrefix/Faker_math-8 | 17888110 | 67.51 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetPrefix/Faker_crypto-8 | 2650390 | 458.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetName/package-8 | 18799832 | 62.90 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetName/Faker_math-8 | 16124620 | 63.57 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetName/Faker_crypto-8 | 2873138 | 428.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetSuffix/package-8 | 17192164 | 72.19 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetSuffix/Faker_math-8 | 16545355 | 65.44 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStreetSuffix/Faker_crypto-8 | 2986934 | 450.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCity/package-8 | 18553683 | 64.93 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCity/Faker_math-8 | 17648109 | 63.77 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCity/Faker_crypto-8 | 2567427 | 470.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkState/package-8 | 18262387 | 66.25 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkState/Faker_math-8 | 16690209 | 73.21 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkState/Faker_crypto-8 | 2599795 | 401.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStateAbr/package-8 | 17492332 | 63.87 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStateAbr/Faker_math-8 | 18612169 | 64.82 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkStateAbr/Faker_crypto-8 | 2821579 | 460.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkZip/package-8 | 7573238 | 157.1 ns/op | 5 B/op | 1 allocs/op | +| BenchmarkZip/Faker_math-8 | 6644562 | 163.4 ns/op | 5 B/op | 1 allocs/op | +| BenchmarkZip/Faker_crypto-8 | 484525 | 2470 ns/op | 5 B/op | 1 allocs/op | +| BenchmarkCountry/package-8 | 15623450 | 65.65 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCountry/Faker_math-8 | 17786485 | 76.22 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCountry/Faker_crypto-8 | 3002818 | 400.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCountryAbr/package-8 | 17296935 | 66.75 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCountryAbr/Faker_math-8 | 17862819 | 67.41 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCountryAbr/Faker_crypto-8 | 2931120 | 426.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitude/package-8 | 46248466 | 26.11 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitude/Faker_math-8 | 46120956 | 26.00 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitude/Faker_crypto-8 | 3512108 | 366.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitude/package-8 | 47443129 | 24.03 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitude/Faker_math-8 | 46691144 | 24.64 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitude/Faker_crypto-8 | 3501789 | 365.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitudeInRange/package-8 | 44125588 | 26.96 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitudeInRange/Faker_math-8 | 40113348 | 27.36 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLatitudeInRange/Faker_crypto-8 | 3227358 | 378.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitudeInRange/package-8 | 38948743 | 32.36 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitudeInRange/Faker_math-8 | 36491187 | 27.86 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLongitudeInRange/Faker_crypto-8 | 3004773 | 350.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkPetName/package-8 | 23445927 | 60.81 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkPetName/Faker_math-8 | 23982228 | 53.68 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkPetName/Faker_crypto-8 | 2681886 | 458.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimal/package-8 | 23230071 | 55.13 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimal/Faker_math-8 | 21923606 | 53.10 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimal/Faker_crypto-8 | 2680177 | 411.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimalType/package-8 | 18826995 | 53.45 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimalType/Faker_math-8 | 22170756 | 63.39 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAnimalType/Faker_crypto-8 | 2780270 | 399.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFarmAnimal/package-8 | 18548028 | 64.87 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFarmAnimal/Faker_math-8 | 17291526 | 62.47 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFarmAnimal/Faker_crypto-8 | 2543520 | 409.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCat/package-8 | 21213028 | 68.91 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCat/Faker_math-8 | 19973062 | 58.74 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCat/Faker_crypto-8 | 2985601 | 405.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkDog/package-8 | 16995627 | 68.15 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkDog/Faker_math-8 | 17296502 | 81.35 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkDog/Faker_crypto-8 | 2530860 | 433.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBird/package-8 | 14445968 | 81.31 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBird/Faker_math-8 | 14545851 | 82.69 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBird/Faker_crypto-8 | 2892721 | 420.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkAppName/package-8 | 2799828 | 438.6 ns/op | 25 B/op | 1 allocs/op | +| BenchmarkAppName/Faker_math-8 | 2784135 | 431.1 ns/op | 25 B/op | 1 allocs/op | +| BenchmarkAppName/Faker_crypto-8 | 611072 | 1923 ns/op | 25 B/op | 1 allocs/op | +| BenchmarkAppVersion/package-8 | 7552165 | 154.1 ns/op | 7 B/op | 1 allocs/op | +| BenchmarkAppVersion/Faker_math-8 | 8020767 | 156.6 ns/op | 7 B/op | 1 allocs/op | +| BenchmarkAppVersion/Faker_crypto-8 | 875899 | 1209 ns/op | 7 B/op | 1 allocs/op | +| BenchmarkAppAuthor/package-8 | 9596493 | 119.7 ns/op | 8 B/op | 0 allocs/op | +| BenchmarkAppAuthor/Faker_math-8 | 10068729 | 121.0 ns/op | 8 B/op | 0 allocs/op | +| BenchmarkAppAuthor/Faker_crypto-8 | 1212542 | 983.7 ns/op | 8 B/op | 0 allocs/op | +| BenchmarkUsername/package-8 | 6687600 | 174.6 ns/op | 16 B/op | 2 allocs/op | +| BenchmarkUsername/Faker_math-8 | 7233685 | 173.3 ns/op | 16 B/op | 2 allocs/op | +| BenchmarkUsername/Faker_crypto-8 | 616884 | 2166 ns/op | 16 B/op | 2 allocs/op | +| BenchmarkPassword/package-8 | 2966407 | 401.0 ns/op | 336 B/op | 6 allocs/op | +| BenchmarkPassword/Faker_math-8 | 3080845 | 399.8 ns/op | 336 B/op | 6 allocs/op | +| BenchmarkPassword/Faker_crypto-8 | 182074 | 5963 ns/op | 336 B/op | 6 allocs/op | +| BenchmarkBeerName/package-8 | 23768442 | 53.26 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerName/Faker_math-8 | 22010898 | 63.87 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerName/Faker_crypto-8 | 2569424 | 392.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerStyle/package-8 | 17567354 | 69.64 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerStyle/Faker_math-8 | 16695721 | 80.73 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerStyle/Faker_crypto-8 | 2710214 | 407.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerHop/package-8 | 20877854 | 56.43 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerHop/Faker_math-8 | 22603234 | 65.04 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerHop/Faker_crypto-8 | 2618493 | 419.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerYeast/package-8 | 20738073 | 67.89 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerYeast/Faker_math-8 | 21325231 | 67.34 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerYeast/Faker_crypto-8 | 3042529 | 399.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerMalt/package-8 | 15756969 | 65.67 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerMalt/Faker_math-8 | 18026910 | 71.42 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerMalt/Faker_crypto-8 | 2949741 | 429.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBeerIbu/package-8 | 32683443 | 35.57 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkBeerIbu/Faker_math-8 | 29983339 | 36.03 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkBeerIbu/Faker_crypto-8 | 3094896 | 386.6 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkBeerAlcohol/package-8 | 4744302 | 243.6 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkBeerAlcohol/Faker_math-8 | 4718923 | 252.0 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkBeerAlcohol/Faker_crypto-8 | 1952740 | 656.0 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkBeerBlg/package-8 | 4086861 | 270.6 ns/op | 40 B/op | 3 allocs/op | +| BenchmarkBeerBlg/Faker_math-8 | 4488897 | 259.5 ns/op | 40 B/op | 3 allocs/op | +| BenchmarkBeerBlg/Faker_crypto-8 | 1865367 | 646.7 ns/op | 40 B/op | 3 allocs/op | +| BenchmarkCar/package-8 | 2800782 | 400.5 ns/op | 96 B/op | 1 allocs/op | +| BenchmarkCar/Faker_math-8 | 2938509 | 396.5 ns/op | 96 B/op | 1 allocs/op | +| BenchmarkCar/Faker_crypto-8 | 461906 | 2590 ns/op | 96 B/op | 1 allocs/op | +| BenchmarkCarType/package-8 | 23655384 | 51.72 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarType/Faker_math-8 | 25902462 | 50.55 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarType/Faker_crypto-8 | 3035287 | 455.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarFuelType/package-8 | 18750069 | 63.80 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarFuelType/Faker_math-8 | 18858705 | 63.15 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarFuelType/Faker_crypto-8 | 3028026 | 387.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarTransmissionType/package-8 | 22570701 | 54.01 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarTransmissionType/Faker_math-8 | 21484246 | 64.27 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarTransmissionType/Faker_crypto-8 | 3061364 | 387.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarMaker/package-8 | 17628445 | 68.23 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarMaker/Faker_math-8 | 21573310 | 64.19 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarMaker/Faker_crypto-8 | 2688284 | 475.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarModel/package-8 | 18500498 | 73.43 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarModel/Faker_math-8 | 16116993 | 66.91 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCarModel/Faker_crypto-8 | 2487638 | 440.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityActor/package-8 | 18712833 | 74.12 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityActor/Faker_math-8 | 18564168 | 68.96 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityActor/Faker_crypto-8 | 2593150 | 415.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityBusiness/package-8 | 18721152 | 68.98 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityBusiness/Faker_math-8 | 16916186 | 70.66 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebrityBusiness/Faker_crypto-8 | 2578786 | 407.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebritySport/package-8 | 16716724 | 87.51 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebritySport/Faker_math-8 | 16602294 | 86.41 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCelebritySport/Faker_crypto-8 | 2919696 | 419.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkColor/package-8 | 17871778 | 62.28 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkColor/Faker_math-8 | 21601353 | 62.63 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkColor/Faker_crypto-8 | 3040459 | 463.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkNiceColors/package-8 | 81438092 | 14.86 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkNiceColors/Faker_math-8 | 75775309 | 18.52 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkNiceColors/Faker_crypto-8 | 3450939 | 353.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkSafeColor/package-8 | 22775230 | 53.52 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkSafeColor/Faker_math-8 | 24526308 | 59.40 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkSafeColor/Faker_crypto-8 | 3103851 | 413.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHexColor/package-8 | 4640522 | 255.2 ns/op | 24 B/op | 3 allocs/op | +| BenchmarkHexColor/Faker_math-8 | 4723542 | 257.2 ns/op | 24 B/op | 3 allocs/op | +| BenchmarkHexColor/Faker_crypto-8 | 283828 | 4447 ns/op | 24 B/op | 3 allocs/op | +| BenchmarkRGBColor/package-8 | 19721971 | 59.64 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkRGBColor/Faker_math-8 | 18808492 | 67.35 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkRGBColor/Faker_crypto-8 | 1000000 | 1066 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkCompany/package-8 | 22072651 | 48.06 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCompany/Faker_math-8 | 22528284 | 53.94 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCompany/Faker_crypto-8 | 2690668 | 402.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCompanySuffix/package-8 | 28169413 | 48.00 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCompanySuffix/Faker_math-8 | 20685153 | 52.20 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCompanySuffix/Faker_crypto-8 | 3018765 | 418.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBuzzWord/package-8 | 24238677 | 54.55 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBuzzWord/Faker_math-8 | 22195419 | 52.30 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBuzzWord/Faker_crypto-8 | 2840428 | 392.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBS/package-8 | 23481436 | 56.33 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBS/Faker_math-8 | 23195737 | 65.66 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBS/Faker_crypto-8 | 3027972 | 419.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJob/package-8 | 4432520 | 253.5 ns/op | 64 B/op | 1 allocs/op | +| BenchmarkJob/Faker_math-8 | 4513154 | 253.7 ns/op | 64 B/op | 1 allocs/op | +| BenchmarkJob/Faker_crypto-8 | 686028 | 1716 ns/op | 64 B/op | 1 allocs/op | +| BenchmarkJobTitle/package-8 | 20079558 | 54.21 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobTitle/Faker_math-8 | 21871627 | 54.86 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobTitle/Faker_crypto-8 | 3017896 | 413.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobDescriptor/package-8 | 21579855 | 53.36 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobDescriptor/Faker_math-8 | 24638751 | 55.91 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobDescriptor/Faker_crypto-8 | 2984810 | 415.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobLevel/package-8 | 18311070 | 59.35 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobLevel/Faker_math-8 | 17051210 | 59.53 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkJobLevel/Faker_crypto-8 | 2991106 | 426.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCSVLookup100-8 | 1468 | 780852 ns/op | 437416 B/op | 5933 allocs/op | +| BenchmarkCSVLookup1000-8 | 151 | 7853471 ns/op | 4224820 B/op | 59612 allocs/op | +| BenchmarkCSVLookup10000-8 | 14 | 78165009 ns/op | 41208010 B/op | 597842 allocs/op | +| BenchmarkCSVLookup100000-8 | 2 | 768800840 ns/op | 437275164 B/op | 5980461 allocs/op | +| BenchmarkEmoji/package-8 | 22212386 | 54.40 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmoji/Faker_math-8 | 21471013 | 51.55 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmoji/Faker_crypto-8 | 3036081 | 458.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiDescription/package-8 | 18250413 | 57.08 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiDescription/Faker_math-8 | 21924381 | 57.58 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiDescription/Faker_crypto-8 | 2837050 | 387.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiCategory/package-8 | 21270252 | 55.87 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiCategory/Faker_math-8 | 21421813 | 59.59 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiCategory/Faker_crypto-8 | 2635878 | 491.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiAlias/package-8 | 18760875 | 68.20 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiAlias/Faker_math-8 | 16918242 | 67.60 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiAlias/Faker_crypto-8 | 2854717 | 488.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiTag/package-8 | 19953885 | 65.43 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiTag/Faker_math-8 | 18220396 | 72.91 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkEmojiTag/Faker_crypto-8 | 2802847 | 426.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkError/package-8 | 1547610 | 786.6 ns/op | 279 B/op | 8 allocs/op | +| BenchmarkError/Faker_math-8 | 1504578 | 794.1 ns/op | 279 B/op | 8 allocs/op | +| BenchmarkError/Faker_crypto-8 | 800712 | 1476 ns/op | 279 B/op | 8 allocs/op | +| BenchmarkErrorObject/package-8 | 6054552 | 190.3 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkErrorObject/Faker_math-8 | 5968180 | 190.3 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkErrorObject/Faker_crypto-8 | 2088008 | 618.0 ns/op | 32 B/op | 3 allocs/op | +| BenchmarkErrorDatabase/package-8 | 5275713 | 212.8 ns/op | 64 B/op | 3 allocs/op | +| BenchmarkErrorDatabase/Faker_math-8 | 5407803 | 217.3 ns/op | 64 B/op | 3 allocs/op | +| BenchmarkErrorDatabase/Faker_crypto-8 | 2005333 | 628.7 ns/op | 63 B/op | 3 allocs/op | +| BenchmarkErrorGRPC/package-8 | 5700810 | 202.9 ns/op | 64 B/op | 3 allocs/op | +| BenchmarkErrorGRPC/Faker_math-8 | 5907589 | 202.5 ns/op | 64 B/op | 3 allocs/op | +| BenchmarkErrorGRPC/Faker_crypto-8 | 2027650 | 643.3 ns/op | 64 B/op | 3 allocs/op | +| BenchmarkErrorHTTP/package-8 | 3182026 | 321.6 ns/op | 157 B/op | 4 allocs/op | +| BenchmarkErrorHTTP/Faker_math-8 | 3667356 | 314.9 ns/op | 157 B/op | 4 allocs/op | +| BenchmarkErrorHTTP/Faker_crypto-8 | 1590696 | 720.2 ns/op | 157 B/op | 4 allocs/op | +| BenchmarkErrorHTTPClient/package-8 | 5745494 | 204.0 ns/op | 52 B/op | 3 allocs/op | +| BenchmarkErrorHTTPClient/Faker_math-8 | 5549187 | 212.8 ns/op | 52 B/op | 3 allocs/op | +| BenchmarkErrorHTTPClient/Faker_crypto-8 | 2011905 | 596.7 ns/op | 52 B/op | 3 allocs/op | +| BenchmarkErrorHTTPServer/package-8 | 5466012 | 214.7 ns/op | 59 B/op | 3 allocs/op | +| BenchmarkErrorHTTPServer/Faker_math-8 | 5542838 | 207.3 ns/op | 59 B/op | 3 allocs/op | +| BenchmarkErrorHTTPServer/Faker_crypto-8 | 1939080 | 633.9 ns/op | 59 B/op | 3 allocs/op | +| BenchmarkErrorRuntime/package-8 | 4245986 | 263.4 ns/op | 150 B/op | 3 allocs/op | +| BenchmarkErrorRuntime/Faker_math-8 | 4355534 | 263.1 ns/op | 150 B/op | 3 allocs/op | +| BenchmarkErrorRuntime/Faker_crypto-8 | 1782044 | 651.4 ns/op | 150 B/op | 3 allocs/op | +| BenchmarkErrorValidation/package-8 | 1659858 | 715.7 ns/op | 268 B/op | 7 allocs/op | +| BenchmarkErrorValidation/Faker_math-8 | 1690849 | 716.4 ns/op | 268 B/op | 7 allocs/op | +| BenchmarkErrorValidation/Faker_crypto-8 | 883600 | 1348 ns/op | 268 B/op | 7 allocs/op | +| BenchmarkFileMimeType/package-8 | 18005230 | 56.88 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFileMimeType/Faker_math-8 | 21229381 | 54.62 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFileMimeType/Faker_crypto-8 | 2605701 | 462.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFileExtension/package-8 | 19272264 | 73.07 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFileExtension/Faker_math-8 | 20149288 | 60.79 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFileExtension/Faker_crypto-8 | 2627210 | 423.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkCusip/package-8 | 5402995 | 224.9 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkCusip/Faker_math-8 | 5367218 | 221.1 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkCusip/Faker_crypto-8 | 363460 | 2967 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkPpnCusip/package-8 | 4436744 | 267.2 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkPpnCusip/Faker_math-8 | 4465546 | 260.9 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkPpnCusip/Faker_crypto-8 | 307485 | 3621 ns/op | 24 B/op | 2 allocs/op | +| BenchmarkIsin/package-8 | 1742368 | 701.4 ns/op | 533 B/op | 8 allocs/op | +| BenchmarkIsin/Faker_math-8 | 1653408 | 715.5 ns/op | 533 B/op | 8 allocs/op | +| BenchmarkIsin/Faker_crypto-8 | 330396 | 3583 ns/op | 533 B/op | 8 allocs/op | +| BenchmarkFruit/package-8 | 21421066 | 55.23 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFruit/Faker_math-8 | 22680361 | 55.68 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkFruit/Faker_crypto-8 | 2914611 | 486.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkVegetable/package-8 | 21113413 | 56.44 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkVegetable/Faker_math-8 | 21101716 | 60.98 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkVegetable/Faker_crypto-8 | 2811384 | 467.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBreakfast/package-8 | 8954784 | 127.7 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkBreakfast/Faker_math-8 | 9430814 | 128.8 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkBreakfast/Faker_crypto-8 | 2132481 | 496.5 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkLunch/package-8 | 8934501 | 125.9 ns/op | 34 B/op | 1 allocs/op | +| BenchmarkLunch/Faker_math-8 | 8668546 | 128.9 ns/op | 34 B/op | 1 allocs/op | +| BenchmarkLunch/Faker_crypto-8 | 2216348 | 518.3 ns/op | 34 B/op | 1 allocs/op | +| BenchmarkDinner/package-8 | 9317936 | 125.2 ns/op | 36 B/op | 1 allocs/op | +| BenchmarkDinner/Faker_math-8 | 9023473 | 126.3 ns/op | 36 B/op | 1 allocs/op | +| BenchmarkDinner/Faker_crypto-8 | 2435984 | 518.9 ns/op | 36 B/op | 1 allocs/op | +| BenchmarkDrink/package-8 | 7698025 | 143.4 ns/op | 7 B/op | 2 allocs/op | +| BenchmarkDrink/Faker_math-8 | 8096294 | 139.8 ns/op | 7 B/op | 2 allocs/op | +| BenchmarkDrink/Faker_crypto-8 | 2247427 | 536.2 ns/op | 7 B/op | 2 allocs/op | +| BenchmarkSnack/package-8 | 8109601 | 149.2 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkSnack/Faker_math-8 | 7993006 | 150.5 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkSnack/Faker_crypto-8 | 2214736 | 535.7 ns/op | 32 B/op | 1 allocs/op | +| BenchmarkDessert/package-8 | 8295364 | 133.9 ns/op | 31 B/op | 2 allocs/op | +| BenchmarkDessert/Faker_math-8 | 8610325 | 134.1 ns/op | 31 B/op | 2 allocs/op | +| BenchmarkDessert/Faker_crypto-8 | 2205777 | 507.4 ns/op | 31 B/op | 2 allocs/op | +| BenchmarkGamertag/package-8 | 2111506 | 544.8 ns/op | 83 B/op | 5 allocs/op | +| BenchmarkGamertag/Faker_math-8 | 2203573 | 551.4 ns/op | 83 B/op | 5 allocs/op | +| BenchmarkGamertag/Faker_crypto-8 | 487366 | 2428 ns/op | 83 B/op | 5 allocs/op | +| BenchmarkDice/package-8 | 43259642 | 26.58 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkDice/Faker_math-8 | 42908084 | 26.84 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkDice/Faker_crypto-8 | 2953483 | 395.5 ns/op | 8 B/op | 1 allocs/op | +| BenchmarkGenerate/package-8 | 383122 | 2767 ns/op | 1139 B/op | 29 allocs/op | +| BenchmarkGenerate/Complex-8 | 135508 | 8555 ns/op | 4440 B/op | 80 allocs/op | +| BenchmarkGenerate/Faker_math-8 | 377151 | 2817 ns/op | 1139 B/op | 29 allocs/op | +| BenchmarkGenerate/Faker_crypto-8 | 152226 | 7234 ns/op | 1139 B/op | 29 allocs/op | +| BenchmarkRegex/package-8 | 628683 | 1922 ns/op | 1632 B/op | 27 allocs/op | +| BenchmarkRegex/Faker_math-8 | 591548 | 1940 ns/op | 1632 B/op | 27 allocs/op | +| BenchmarkRegex/Faker_crypto-8 | 616701 | 1934 ns/op | 1632 B/op | 27 allocs/op | +| BenchmarkRegexEmail/package-8 | 174812 | 6607 ns/op | 4084 B/op | 90 allocs/op | +| BenchmarkRegexEmail/Faker_math-8 | 174512 | 6619 ns/op | 4084 B/op | 90 allocs/op | +| BenchmarkRegexEmail/Faker_crypto-8 | 62312 | 18793 ns/op | 4083 B/op | 90 allocs/op | +| BenchmarkMap/package-8 | 318559 | 3275 ns/op | 1113 B/op | 16 allocs/op | +| BenchmarkMap/Faker_math-8 | 315990 | 3319 ns/op | 1113 B/op | 16 allocs/op | +| BenchmarkMap/Faker_crypto-8 | 46202 | 23997 ns/op | 1115 B/op | 16 allocs/op | +| BenchmarkHackerPhrase/package-8 | 155998 | 7191 ns/op | 3004 B/op | 50 allocs/op | +| BenchmarkHackerPhrase/Faker_math-8 | 154675 | 7305 ns/op | 3008 B/op | 50 allocs/op | +| BenchmarkHackerPhrase/Faker_crypto-8 | 109282 | 10268 ns/op | 3007 B/op | 50 allocs/op | +| BenchmarkHackerAbbreviation/package-8 | 21881574 | 57.57 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerAbbreviation/Faker_math-8 | 18534495 | 59.55 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerAbbreviation/Faker_crypto-8 | 2607735 | 401.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerAdjective/package-8 | 24286845 | 55.74 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerAdjective/Faker_math-8 | 22684101 | 55.22 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerAdjective/Faker_crypto-8 | 2953530 | 490.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerNoun/package-8 | 22554241 | 55.35 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerNoun/Faker_math-8 | 18360708 | 56.78 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerNoun/Faker_crypto-8 | 2823256 | 464.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerVerb/package-8 | 19236123 | 65.49 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerVerb/Faker_math-8 | 18090754 | 68.18 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackerVerb/Faker_crypto-8 | 2880181 | 439.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackeringVerb/package-8 | 19090326 | 71.74 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackeringVerb/Faker_math-8 | 19048659 | 63.31 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHackeringVerb/Faker_crypto-8 | 3020748 | 404.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkReplaceWithNumbers-8 | 162931 | 7098 ns/op | 32 B/op | 2 allocs/op | +| BenchmarkHipsterWord/package-8 | 24059244 | 54.69 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHipsterWord/Faker_math-8 | 21708511 | 52.98 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHipsterWord/Faker_crypto-8 | 2870858 | 396.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHipsterSentence/package-8 | 1278764 | 927.7 ns/op | 288 B/op | 3 allocs/op | +| BenchmarkHipsterSentence/Faker_math-8 | 1287939 | 955.0 ns/op | 288 B/op | 3 allocs/op | +| BenchmarkHipsterSentence/Faker_crypto-8 | 237703 | 4595 ns/op | 288 B/op | 3 allocs/op | +| BenchmarkHipsterParagraph/package-8 | 57895 | 18466 ns/op | 10521 B/op | 48 allocs/op | +| BenchmarkHipsterParagraph/Faker_math-8 | 61772 | 19188 ns/op | 10520 B/op | 48 allocs/op | +| BenchmarkHipsterParagraph/Faker_crypto-8 | 12978 | 91733 ns/op | 10522 B/op | 48 allocs/op | +| BenchmarkInputName/package-8 | 15728428 | 74.49 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkInputName/Faker_math-8 | 13243030 | 89.75 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkInputName/Faker_crypto-8 | 2736225 | 478.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkSvg/package-8 | 172828 | 7906 ns/op | 8871 B/op | 52 allocs/op | +| BenchmarkSvg/Faker_math-8 | 161821 | 6754 ns/op | 8875 B/op | 52 allocs/op | +| BenchmarkSvg/Faker_crypto-8 | 29023 | 40910 ns/op | 8862 B/op | 52 allocs/op | +| BenchmarkImageURL/package-8 | 11692422 | 94.34 ns/op | 38 B/op | 3 allocs/op | +| BenchmarkImageURL/Faker_math-8 | 11451087 | 91.39 ns/op | 38 B/op | 3 allocs/op | +| BenchmarkImageURL/Faker_crypto-8 | 12107578 | 92.30 ns/op | 38 B/op | 3 allocs/op | +| BenchmarkImage/package-8 | 50 | 20495942 ns/op | 2457673 B/op | 307202 allocs/op | +| BenchmarkImage/Faker_math-8 | 51 | 20349126 ns/op | 2457780 B/op | 307202 allocs/op | +| BenchmarkImage/Faker_crypto-8 | 3 | 393591549 ns/op | 2457685 B/op | 307202 allocs/op | +| BenchmarkImageJpeg/package-8 | 31 | 32857846 ns/op | 2982318 B/op | 307214 allocs/op | +| BenchmarkImageJpeg/Faker_math-8 | 34 | 31873165 ns/op | 2982479 B/op | 307214 allocs/op | +| BenchmarkImageJpeg/Faker_crypto-8 | 3 | 387670345 ns/op | 2982357 B/op | 307215 allocs/op | +| BenchmarkImagePng/package-8 | 16 | 65425256 ns/op | 5899024 B/op | 307270 allocs/op | +| BenchmarkImagePng/Faker_math-8 | 18 | 67804235 ns/op | 5899314 B/op | 307270 allocs/op | +| BenchmarkImagePng/Faker_crypto-8 | 3 | 396378778 ns/op | 5899005 B/op | 307270 allocs/op | +| BenchmarkDomainName/package-8 | 2344912 | 505.6 ns/op | 95 B/op | 5 allocs/op | +| BenchmarkDomainName/Faker_math-8 | 2265744 | 512.5 ns/op | 95 B/op | 5 allocs/op | +| BenchmarkDomainName/Faker_crypto-8 | 639775 | 1788 ns/op | 95 B/op | 5 allocs/op | +| BenchmarkDomainSuffix/package-8 | 19431498 | 59.95 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkDomainSuffix/Faker_math-8 | 20097267 | 59.04 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkDomainSuffix/Faker_crypto-8 | 2498906 | 437.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkURL/package-8 | 1000000 | 1155 ns/op | 277 B/op | 10 allocs/op | +| BenchmarkURL/Faker_math-8 | 1000000 | 1165 ns/op | 277 B/op | 10 allocs/op | +| BenchmarkURL/Faker_crypto-8 | 275793 | 4371 ns/op | 276 B/op | 10 allocs/op | +| BenchmarkHTTPMethod/package-8 | 17651594 | 59.20 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPMethod/Faker_math-8 | 20081227 | 61.28 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPMethod/Faker_crypto-8 | 2844322 | 460.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkIPv4Address/package-8 | 5215255 | 229.2 ns/op | 16 B/op | 1 allocs/op | +| BenchmarkIPv4Address/Faker_math-8 | 4852905 | 224.9 ns/op | 16 B/op | 1 allocs/op | +| BenchmarkIPv4Address/Faker_crypto-8 | 670951 | 1827 ns/op | 16 B/op | 1 allocs/op | +| BenchmarkIPv6Address/package-8 | 2312482 | 510.0 ns/op | 111 B/op | 8 allocs/op | +| BenchmarkIPv6Address/Faker_math-8 | 2261472 | 521.2 ns/op | 111 B/op | 8 allocs/op | +| BenchmarkIPv6Address/Faker_crypto-8 | 338601 | 3623 ns/op | 111 B/op | 8 allocs/op | +| BenchmarkMacAddress/package-8 | 2809762 | 426.2 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkMacAddress/Faker_math-8 | 2863842 | 425.5 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkMacAddress/Faker_crypto-8 | 376604 | 2688 ns/op | 24 B/op | 1 allocs/op | +| BenchmarkHTTPStatusCode/package-8 | 13488582 | 88.27 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPStatusCode/Faker_math-8 | 14188726 | 73.23 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPStatusCode/Faker_crypto-8 | 2497014 | 463.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPStatusCodeSimple/package-8 | 17822486 | 81.54 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPStatusCodeSimple/Faker_math-8 | 16282341 | 70.72 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkHTTPStatusCodeSimple/Faker_crypto-8 | 2360576 | 451.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLogLevel/package-8 | 19343472 | 67.40 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLogLevel/Faker_math-8 | 19445798 | 61.84 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLogLevel/Faker_crypto-8 | 2296162 | 468.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkUserAgent/package-8 | 1503814 | 813.9 ns/op | 297 B/op | 5 allocs/op | +| BenchmarkUserAgent/Faker_math-8 | 1462177 | 803.6 ns/op | 298 B/op | 5 allocs/op | +| BenchmarkUserAgent/Faker_crypto-8 | 181178 | 6157 ns/op | 298 B/op | 5 allocs/op | +| BenchmarkChromeUserAgent/package-8 | 1911201 | 596.8 ns/op | 184 B/op | 5 allocs/op | +| BenchmarkChromeUserAgent/Faker_math-8 | 1969712 | 598.1 ns/op | 184 B/op | 5 allocs/op | +| BenchmarkChromeUserAgent/Faker_crypto-8 | 264816 | 4433 ns/op | 184 B/op | 5 allocs/op | +| BenchmarkFirefoxUserAgent/package-8 | 1000000 | 1043 ns/op | 362 B/op | 6 allocs/op | +| BenchmarkFirefoxUserAgent/Faker_math-8 | 1000000 | 1054 ns/op | 362 B/op | 6 allocs/op | +| BenchmarkFirefoxUserAgent/Faker_crypto-8 | 166128 | 7646 ns/op | 362 B/op | 6 allocs/op | +| BenchmarkSafariUserAgent/package-8 | 1000000 | 1022 ns/op | 551 B/op | 7 allocs/op | +| BenchmarkSafariUserAgent/Faker_math-8 | 1000000 | 1017 ns/op | 551 B/op | 7 allocs/op | +| BenchmarkSafariUserAgent/Faker_crypto-8 | 146463 | 7525 ns/op | 551 B/op | 7 allocs/op | +| BenchmarkOperaUserAgent/package-8 | 1844185 | 643.8 ns/op | 212 B/op | 5 allocs/op | +| BenchmarkOperaUserAgent/Faker_math-8 | 1805168 | 654.3 ns/op | 212 B/op | 5 allocs/op | +| BenchmarkOperaUserAgent/Faker_crypto-8 | 219927 | 5257 ns/op | 212 B/op | 5 allocs/op | +| BenchmarkJSONLookup100-8 | 894 | 1194698 ns/op | 537673 B/op | 8141 allocs/op | +| BenchmarkJSONLookup1000-8 | 91 | 12099728 ns/op | 5616708 B/op | 81606 allocs/op | +| BenchmarkJSONLookup10000-8 | 8 | 128144166 ns/op | 62638763 B/op | 817708 allocs/op | +| BenchmarkJSONLookup100000-8 | 1 | 1324756016 ns/op | 616116744 B/op | 8179136 allocs/op | +| BenchmarkLanguage/package-8 | 20946056 | 68.53 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguage/Faker_math-8 | 16884613 | 61.06 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguage/Faker_crypto-8 | 2889944 | 442.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageAbbreviation/package-8 | 20782443 | 53.79 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageAbbreviation/Faker_math-8 | 17936367 | 56.26 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageAbbreviation/Faker_crypto-8 | 2630406 | 423.8 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageBCP/package-8 | 19858063 | 59.00 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageBCP/Faker_math-8 | 20712447 | 60.02 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLanguageBCP/Faker_crypto-8 | 2654044 | 469.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguage/package-8 | 17849598 | 58.34 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguage/Faker_math-8 | 20090289 | 70.59 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguage/Faker_crypto-8 | 2628798 | 424.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguageBest/package-8 | 1000000000 | 0.4044 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguageBest/Faker_math-8 | 1000000000 | 0.2975 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkProgrammingLanguageBest/Faker_crypto-8 | 1000000000 | 0.2543 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLoremIpsumWord-8 | 22434632 | 54.96 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkLoremIpsumSentence-8 | 1000000 | 1038 ns/op | 219 B/op | 2 allocs/op | +| BenchmarkLoremIpsumParagraph-8 | 59320 | 19442 ns/op | 8479 B/op | 40 allocs/op | +| BenchmarkMinecraftOre/package-8 | 14624242 | 90.01 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftOre/Faker_math-8 | 16379578 | 86.91 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftOre/Faker_crypto-8 | 2757652 | 477.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWood/package-8 | 15815132 | 83.23 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWood/Faker_math-8 | 14872902 | 75.36 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWood/Faker_crypto-8 | 2524514 | 514.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorTier/package-8 | 15296107 | 78.58 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorTier/Faker_math-8 | 14341870 | 86.33 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorTier/Faker_crypto-8 | 2344278 | 473.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorPart/package-8 | 16863422 | 82.04 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorPart/Faker_math-8 | 14052031 | 76.92 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftArmorPart/Faker_crypto-8 | 2770314 | 474.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeapon/package-8 | 15759004 | 77.42 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeapon/Faker_math-8 | 15945940 | 81.48 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeapon/Faker_crypto-8 | 2254436 | 464.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftTool/package-8 | 15887787 | 76.39 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftTool/Faker_math-8 | 14269508 | 91.01 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftTool/Faker_crypto-8 | 2718507 | 525.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftDye/package-8 | 16131942 | 71.06 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftDye/Faker_math-8 | 16802478 | 73.40 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftDye/Faker_crypto-8 | 2584966 | 476.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftFood/package-8 | 14680048 | 87.15 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftFood/Faker_math-8 | 13558227 | 86.71 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftFood/Faker_crypto-8 | 2329946 | 435.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftAnimal/package-8 | 15871832 | 85.92 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftAnimal/Faker_math-8 | 12411510 | 83.88 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftAnimal/Faker_crypto-8 | 2528960 | 441.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerJob/package-8 | 13549438 | 80.41 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerJob/Faker_math-8 | 13769702 | 104.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerJob/Faker_crypto-8 | 2397300 | 452.2 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerStation/package-8 | 15069139 | 93.65 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerStation/Faker_math-8 | 15468883 | 82.27 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerStation/Faker_crypto-8 | 2469778 | 453.9 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerLevel/package-8 | 13468396 | 102.1 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerLevel/Faker_math-8 | 14354506 | 92.55 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftVillagerLevel/Faker_crypto-8 | 2416441 | 544.5 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobPassive/package-8 | 13299806 | 84.84 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobPassive/Faker_math-8 | 14181126 | 87.18 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobPassive/Faker_crypto-8 | 2539264 | 510.0 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobNeutral/package-8 | 11043175 | 110.7 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobNeutral/Faker_math-8 | 13059249 | 99.36 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobNeutral/Faker_crypto-8 | 2394342 | 544.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobHostile/package-8 | 13963809 | 95.66 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobHostile/Faker_math-8 | 15182318 | 96.90 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobHostile/Faker_crypto-8 | 2204600 | 538.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobBoss/package-8 | 12737437 | 89.68 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobBoss/Faker_math-8 | 13494093 | 90.65 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftMobBoss/Faker_crypto-8 | 2671172 | 461.3 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftBiome/package-8 | 13233918 | 81.47 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftBiome/Faker_math-8 | 16109408 | 85.68 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftBiome/Faker_crypto-8 | 2205704 | 499.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeather/package-8 | 13371518 | 79.93 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeather/Faker_math-8 | 14987182 | 80.69 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkMinecraftWeather/Faker_crypto-8 | 2373735 | 473.6 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBool/package-8 | 75772935 | 15.03 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBool/Faker_math-8 | 76893664 | 19.04 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkBool/Faker_crypto-8 | 3141634 | 376.4 ns/op | 0 B/op | 0 allocs/op | +| BenchmarkUUID/package-8 | 9382911 | 115.3 ns/op | 64 B/op | 2 allocs/op | +| BenchmarkUUID/Faker_math-8 | 9492183 | 114.1 ns/op | 64 B/op | 2 allocs/op | +| BenchmarkUUID/Faker_crypto-8 | 1000000 | 1039 ns/op | 64 B/op | 2 allocs/op | +| BenchmarkShuffleAnySlice/package-8 | 2234314 | 511.5 ns/op | 24 B/op | 1 allocs/op | \ No newline at end of file diff --git a/finance.go b/finance.go index 8d77fbe0..fefb5121 100644 --- a/finance.go +++ b/finance.go @@ -6,35 +6,21 @@ import ( "unicode" ) +// Reference Constants const cusipRunes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" const ppnRunes = "*@#" -func replaceWithCusipRunes(r *rand.Rand, str string, ppn bool) string { - if str == "" { - return str - } - bytestr := []byte(str) - for i := 0; i < len(bytestr); i++ { - if bytestr[i] == questionmark { - bytestr[i] = byte(randCusipRune(r, ppn)) - } - } - - return string(bytestr) +// CUSIP +func Cusip() string { + return cusip(globalFaker.Rand) } -func randCusipRune(r *rand.Rand, ppn bool) rune { - randRunes := cusipRunes - if ppn { - randRunes = randRunes + ppnRunes - } - return rune(cusipRunes[r.Intn(len(randRunes))]) +func (f *Faker) Cusip() string { + return cusip(f.Rand) } -func cusip(r *rand.Rand, ppn bool) string { - cusip := replaceWithCusipRunes(r, "????????", ppn) - chkDigit := CusipCheckDigit(cusip) - return cusip + chkDigit +func cusip(r *rand.Rand) string { + return buildCusip(r, false) } func CusipCheckDigit(cusip string) string { @@ -57,7 +43,6 @@ func CusipCheckDigit(cusip string) string { if c == '#' { v = 38 } - if (7 - i%2) == 0 { v = v * 2 } @@ -68,32 +53,104 @@ func CusipCheckDigit(cusip string) string { return strconv.Itoa((10 - (sum % 10)) % 10) } -func Cusip() string { - return cusip(globalFaker.Rand, false) +// PPN CUSIP (Insurance Industry Specific) +func PpnCusip() string { + return ppnCusip(globalFaker.Rand) } -func PpnCusip() string { - return cusip(globalFaker.Rand, true) +func (f *Faker) PpnCusip() string { + return ppnCusip(f.Rand) } -func (f *Faker) Cusip() string { - return cusip(f.Rand, false) +func ppnCusip(r *rand.Rand) string { + return buildCusip(r, true) } -func (f *Faker) PpnCusip() string { - return cusip(f.Rand, true) +// ISIN +func Isin() string { + return isin(globalFaker.Rand) +} + +func (f *Faker) Isin() string { + return isin(f.Rand) } -/* func isin(r *rand.Rand) string { - return "xxxxxxxxxxxx" + countryCode := CountryAbr() + nsin := cusip(r) + isinChkDig := IsinCheckDigit(countryCode + nsin) + return countryCode + nsin + isinChkDig } -func symbol(r *rand.Rand) string { - return "xxxx" +func IsinCheckDigit(isin string) string { + flattened := []int{} + for _, c := range isin { + if unicode.IsLetter(c) { + convVal := int(c) - 55 + // Each digit is added as a separate value + flattened = append(flattened, convVal/10) + flattened = append(flattened, convVal%10) + } + if unicode.IsDigit(c) { + flattened = append(flattened, int(c-'0')) + } + } + + oddSum := 0 + evenSum := 0 + + // Per digit summation of each side. + for i, d := range flattened { + if i%2 == 0 { + elem := 2 * d + if elem > 9 { + lastDigit := elem % 10 + firstDigit := elem / 10 + elem = firstDigit + lastDigit + } + evenSum += elem + } else { + oddSum += d + } + } + + return strconv.Itoa((10 - (oddSum+evenSum)%10) % 10) +} + +// Helper Functions +func buildCusip(r *rand.Rand, ppn bool) string { + cusip := replaceWithCusipRunes(r, "????????", ppn) + chkDigit := CusipCheckDigit(cusip) + return cusip + chkDigit +} + +func replaceWithCusipRunes(r *rand.Rand, str string, ppn bool) string { + if str == "" { + return str + } + bytestr := []byte(str) + for i := 0; i < len(bytestr); i++ { + if bytestr[i] == questionmark { + bytestr[i] = byte(randCusipRune(r)) + } + } + if ppn { + // PPN Identifiers occur in the 6-8th place + bytestr[5+r.Intn(3)] = byte(randPpnRune(r)) + } + + return string(bytestr) } -*/ +func randCusipRune(r *rand.Rand) rune { + return rune(cusipRunes[r.Intn(len(cusipRunes))]) +} + +func randPpnRune(r *rand.Rand) rune { + return rune(ppnRunes[r.Intn(len(ppnRunes))]) +} + +// Lookup Adds func addFinanceLookup() { AddFuncLookup("cusip", Info{ Display: "CUSIP", @@ -102,27 +159,27 @@ func addFinanceLookup() { Example: "38259P508", Output: "string", Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { - return cusip(r, false), nil + return cusip(r), nil }, }) - /*AddFuncLookup("isin", Info{ - Display: "ISIN", + AddFuncLookup("ppncusip", Info{ + Display: "PPN CUSIP", Category: "finance", - Description: "Random ISIN", - Example: "", + Description: "Random PPN CUSIP", + Example: "38259P508", Output: "string", Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { - return isin(r), nil + return ppnCusip(r), nil }, }) - AddFuncLookup("symbol", Info{ - Display: "symbol", + AddFuncLookup("isin", Info{ + Display: "ISIN", Category: "finance", - Description: "Random Symbol", + Description: "Random ISIN", Example: "", Output: "string", Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { - return symbol(r), nil + return isin(r), nil }, - })*/ + }) } diff --git a/finance_test.go b/finance_test.go index 1b000eba..59630852 100644 --- a/finance_test.go +++ b/finance_test.go @@ -5,6 +5,7 @@ import ( "testing" ) +// CUSIP Tests func ExampleCusip() { Seed(11) fmt.Println(Cusip()) @@ -27,7 +28,7 @@ func TestCusip(t *testing.T) { t.Error("Valid Cusips are 9 characters in length") } if CusipCheckDigit(cusip[:8]) != string(cusip[8]) { - t.Error("Cusip has invalid checksum") + t.Error("Generated Cusip has invalid checksum") } } @@ -56,16 +57,17 @@ func BenchmarkCusip(b *testing.B) { }) } +// PPN CUSIP Tests func ExamplePpnCusip() { Seed(11) fmt.Println(PpnCusip()) - // Output: 6EHPQ4AK9 + // Output: CBHG2P*N7 } func ExampleFaker_PpnCusip() { f := New(11) fmt.Println(f.PpnCusip()) - // Output: 6EHPQ4AK9 + // Output: CBHG2P*N7 } func BenchmarkPpnCusip(b *testing.B) { @@ -91,3 +93,54 @@ func BenchmarkPpnCusip(b *testing.B) { } }) } + +// ISIN Tests +func ExampleIsin() { + Seed(11) + fmt.Println(Isin()) + // Output: CVBHG2P1NG14 +} + +func ExampleFaker_Isin() { + f := New(11) + fmt.Println(f.Isin()) + // Output: AMCBHG2P1N52 +} + +func TestIsin(t *testing.T) { + Seed(11) + isin := Isin() + if isin == "" { + t.Error("Valid ISINs are not blank") + } + if len(isin) != 12 { + t.Error("Valid ISINs are 12 characters in length") + } + if IsinCheckDigit(isin[:11]) != string(isin[11]) { + t.Error("Generated ISIN has invalid check digit") + } +} + +func BenchmarkIsin(b *testing.B) { + b.Run("package", func(b *testing.B) { + for i := 0; i < b.N; i++ { + Isin() + } + }) + + b.Run("Faker math", func(b *testing.B) { + f := New(0) + + for i := 0; i < b.N; i++ { + f.Isin() + } + }) + + b.Run("Faker crypto", func(b *testing.B) { + f := NewCrypto() + + for i := 0; i < b.N; i++ { + f.Isin() + } + }) +} From 9838042b60e0c4718590e1c4fceea97bacebc3e5 Mon Sep 17 00:00:00 2001 From: Wayne Manselle Date: Sat, 8 Apr 2023 16:46:40 -0700 Subject: [PATCH 3/5] Add details to README --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 05c27fa9..07bed979 100644 --- a/README.md +++ b/README.md @@ -533,6 +533,14 @@ BitcoinAddress() string BitcoinPrivateKey() string ``` +### Finance + +```go +Cusip() string +PpnCusip() string +Isin() string +``` + ### Company ```go From d5b014645d002e213d548956c0bea5c2e4e0a7cf Mon Sep 17 00:00:00 2001 From: Wayne Manselle Date: Tue, 11 Apr 2023 11:51:46 -0700 Subject: [PATCH 4/5] Wrap up simplification, expand check digit tests --- finance.go | 135 ++++++++++++++---------------------------------- finance_test.go | 82 ++++++++++++++--------------- 2 files changed, 80 insertions(+), 137 deletions(-) diff --git a/finance.go b/finance.go index fefb5121..e38b6ce1 100644 --- a/finance.go +++ b/finance.go @@ -6,9 +6,7 @@ import ( "unicode" ) -// Reference Constants -const cusipRunes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" -const ppnRunes = "*@#" +const cusipStr = upperStr + numericStr // CUSIP func Cusip() string { @@ -20,9 +18,34 @@ func (f *Faker) Cusip() string { } func cusip(r *rand.Rand) string { - return buildCusip(r, false) + cusipBytes := make([]byte, 8) + for i := 0; i < len(cusipBytes); i++ { + cusipBytes[i] = byte(cusipStr[r.Intn(len(cusipStr))]) + } + + baseCusip := string(cusipBytes) + + chkDigit := CusipCheckDigit(baseCusip) + return baseCusip + chkDigit +} + +// ISIN +func Isin() string { + return isin(globalFaker.Rand) +} + +func (f *Faker) Isin() string { + return isin(f.Rand) +} + +func isin(r *rand.Rand) string { + countryCode := CountryAbr() + nsin := cusip(r) + isinChkDig := IsinCheckDigit(countryCode + nsin) + return countryCode + nsin + isinChkDig } +// Functions to generate Checksum Digits func CusipCheckDigit(cusip string) string { sum := 0 @@ -32,18 +55,11 @@ func CusipCheckDigit(cusip string) string { v = int(c - '0') } if unicode.IsLetter(c) { + //0-indexed ordinal position of Letter + 10 v = int(c-'A') + 10 } - if c == '*' { - v = 36 - } - if c == '@' { - v = 37 - } - if c == '#' { - v = 38 - } - if (7 - i%2) == 0 { + if i%2 != 0 { + // Multiply odd digits by two v = v * 2 } @@ -53,60 +69,30 @@ func CusipCheckDigit(cusip string) string { return strconv.Itoa((10 - (sum % 10)) % 10) } -// PPN CUSIP (Insurance Industry Specific) -func PpnCusip() string { - return ppnCusip(globalFaker.Rand) -} - -func (f *Faker) PpnCusip() string { - return ppnCusip(f.Rand) -} - -func ppnCusip(r *rand.Rand) string { - return buildCusip(r, true) -} - -// ISIN -func Isin() string { - return isin(globalFaker.Rand) -} - -func (f *Faker) Isin() string { - return isin(f.Rand) -} - -func isin(r *rand.Rand) string { - countryCode := CountryAbr() - nsin := cusip(r) - isinChkDig := IsinCheckDigit(countryCode + nsin) - return countryCode + nsin + isinChkDig -} - func IsinCheckDigit(isin string) string { - flattened := []int{} + isinDigits := make([]int, 0) for _, c := range isin { if unicode.IsLetter(c) { - convVal := int(c) - 55 + letterVal := int(c) - 55 // Each digit is added as a separate value - flattened = append(flattened, convVal/10) - flattened = append(flattened, convVal%10) + isinDigits = append(isinDigits, letterVal/10) + isinDigits = append(isinDigits, letterVal%10) } if unicode.IsDigit(c) { - flattened = append(flattened, int(c-'0')) + isinDigits = append(isinDigits, int(c-'0')) } } oddSum := 0 evenSum := 0 - // Per digit summation of each side. - for i, d := range flattened { + // Take the per digit sum of the digitized ISIN, doubling even indexed digits + for i, d := range isinDigits { if i%2 == 0 { elem := 2 * d if elem > 9 { - lastDigit := elem % 10 - firstDigit := elem / 10 - elem = firstDigit + lastDigit + // If the element now has two digits, sum those digits + elem = (elem % 10) + (elem / 10) } evenSum += elem } else { @@ -117,39 +103,6 @@ func IsinCheckDigit(isin string) string { return strconv.Itoa((10 - (oddSum+evenSum)%10) % 10) } -// Helper Functions -func buildCusip(r *rand.Rand, ppn bool) string { - cusip := replaceWithCusipRunes(r, "????????", ppn) - chkDigit := CusipCheckDigit(cusip) - return cusip + chkDigit -} - -func replaceWithCusipRunes(r *rand.Rand, str string, ppn bool) string { - if str == "" { - return str - } - bytestr := []byte(str) - for i := 0; i < len(bytestr); i++ { - if bytestr[i] == questionmark { - bytestr[i] = byte(randCusipRune(r)) - } - } - if ppn { - // PPN Identifiers occur in the 6-8th place - bytestr[5+r.Intn(3)] = byte(randPpnRune(r)) - } - - return string(bytestr) -} - -func randCusipRune(r *rand.Rand) rune { - return rune(cusipRunes[r.Intn(len(cusipRunes))]) -} - -func randPpnRune(r *rand.Rand) rune { - return rune(ppnRunes[r.Intn(len(ppnRunes))]) -} - // Lookup Adds func addFinanceLookup() { AddFuncLookup("cusip", Info{ @@ -162,16 +115,6 @@ func addFinanceLookup() { return cusip(r), nil }, }) - AddFuncLookup("ppncusip", Info{ - Display: "PPN CUSIP", - Category: "finance", - Description: "Random PPN CUSIP", - Example: "38259P508", - Output: "string", - Generate: func(r *rand.Rand, m *MapParams, info *Info) (interface{}, error) { - return ppnCusip(r), nil - }, - }) AddFuncLookup("isin", Info{ Display: "ISIN", Category: "finance", diff --git a/finance_test.go b/finance_test.go index 59630852..25f8cd64 100644 --- a/finance_test.go +++ b/finance_test.go @@ -9,13 +9,13 @@ import ( func ExampleCusip() { Seed(11) fmt.Println(Cusip()) - // Output: CBHG2P1N5 + // Output: MLRQCZBX0 } func ExampleFaker_Cusip() { f := New(11) fmt.Println(f.Cusip()) - // Output: CBHG2P1N5 + // Output: MLRQCZBX0 } func TestCusip(t *testing.T) { @@ -30,7 +30,25 @@ func TestCusip(t *testing.T) { if CusipCheckDigit(cusip[:8]) != string(cusip[8]) { t.Error("Generated Cusip has invalid checksum") } +} + +func TestCusipCheckDigit(t *testing.T) { + type test struct { + base string + want string + } + tests := []test{ + {base: "03783310", want: "0"}, + {base: "17275R10", want: "2"}, + {base: "38259P50", want: "8"}, + } + for _, tc := range tests { + digit := CusipCheckDigit(tc.base) + if digit != tc.want { + t.Errorf("Expected check digit of %s, got %s", tc.want, digit) + } + } } func BenchmarkCusip(b *testing.B) { @@ -57,54 +75,17 @@ func BenchmarkCusip(b *testing.B) { }) } -// PPN CUSIP Tests -func ExamplePpnCusip() { - Seed(11) - fmt.Println(PpnCusip()) - // Output: CBHG2P*N7 -} - -func ExampleFaker_PpnCusip() { - f := New(11) - fmt.Println(f.PpnCusip()) - // Output: CBHG2P*N7 -} - -func BenchmarkPpnCusip(b *testing.B) { - b.Run("package", func(b *testing.B) { - for i := 0; i < b.N; i++ { - PpnCusip() - } - }) - - b.Run("Faker math", func(b *testing.B) { - f := New(0) - - for i := 0; i < b.N; i++ { - f.PpnCusip() - } - }) - - b.Run("Faker crypto", func(b *testing.B) { - f := NewCrypto() - - for i := 0; i < b.N; i++ { - f.PpnCusip() - } - }) -} - // ISIN Tests func ExampleIsin() { Seed(11) fmt.Println(Isin()) - // Output: CVBHG2P1NG14 + // Output: CVLRQCZBXQ97 } func ExampleFaker_Isin() { f := New(11) fmt.Println(f.Isin()) - // Output: AMCBHG2P1N52 + // Output: AMMLRQCZBX03 } func TestIsin(t *testing.T) { @@ -121,6 +102,25 @@ func TestIsin(t *testing.T) { } } +func TestIsinCheckDigit(t *testing.T) { + type test struct { + base string + want string + } + + tests := []test{ + {base: "US037833100", want: "5"}, + {base: "GB000263494", want: "6"}, + {base: "US000402625", want: "0"}, + } + for _, tc := range tests { + digit := IsinCheckDigit(tc.base) + if digit != tc.want { + t.Errorf("Expected check digit of %s, got %s", tc.want, digit) + } + } +} + func BenchmarkIsin(b *testing.B) { b.Run("package", func(b *testing.B) { for i := 0; i < b.N; i++ { From e01921f2b1876cbfac7d3873c11ba86cd549cad0 Mon Sep 17 00:00:00 2001 From: Wayne Manselle Date: Tue, 11 Apr 2023 11:56:50 -0700 Subject: [PATCH 5/5] Remove references to PPNCusip --- BENCHMARKS.md | 3 --- README.md | 1 - 2 files changed, 4 deletions(-) diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 38f1f3e5..2568ecf0 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -236,9 +236,6 @@ Table generated with tablesgenerator.com/markdown_tables | BenchmarkCusip/package-8 | 5402995 | 224.9 ns/op | 24 B/op | 2 allocs/op | | BenchmarkCusip/Faker_math-8 | 5367218 | 221.1 ns/op | 24 B/op | 2 allocs/op | | BenchmarkCusip/Faker_crypto-8 | 363460 | 2967 ns/op | 24 B/op | 2 allocs/op | -| BenchmarkPpnCusip/package-8 | 4436744 | 267.2 ns/op | 24 B/op | 2 allocs/op | -| BenchmarkPpnCusip/Faker_math-8 | 4465546 | 260.9 ns/op | 24 B/op | 2 allocs/op | -| BenchmarkPpnCusip/Faker_crypto-8 | 307485 | 3621 ns/op | 24 B/op | 2 allocs/op | | BenchmarkIsin/package-8 | 1742368 | 701.4 ns/op | 533 B/op | 8 allocs/op | | BenchmarkIsin/Faker_math-8 | 1653408 | 715.5 ns/op | 533 B/op | 8 allocs/op | | BenchmarkIsin/Faker_crypto-8 | 330396 | 3583 ns/op | 533 B/op | 8 allocs/op | diff --git a/README.md b/README.md index 07bed979..5e2416df 100644 --- a/README.md +++ b/README.md @@ -537,7 +537,6 @@ BitcoinPrivateKey() string ```go Cusip() string -PpnCusip() string Isin() string ```