2023-07-04 18:17:31 -03:00
package nson
import (
"encoding/json"
"testing"
"github.com/nbd-wtf/go-nostr"
)
func TestBasicNsonParse ( t * testing . T ) {
for _ , jevt := range nsonTestEvents {
2023-07-05 08:42:36 -03:00
evt := & nostr . Event { }
if err := Unmarshal ( jevt , evt ) ; err != nil {
t . Fatalf ( "error unmarshaling nson: %s" , err )
2023-07-05 08:27:00 -03:00
}
2023-07-04 18:17:31 -03:00
checkParsedCorrectly ( t , evt , jevt )
}
}
func TestNsonPartialGet ( t * testing . T ) {
for _ , jevt := range nsonTestEvents {
2023-07-05 08:42:36 -03:00
evt := & nostr . Event { }
if err := Unmarshal ( jevt , evt ) ; err != nil {
t . Fatalf ( "error unmarshaling nson: %s" , err )
2023-07-05 08:27:00 -03:00
}
2023-07-04 18:17:31 -03:00
wrapper := New ( jevt )
if id := wrapper . GetID ( ) ; id != evt . ID {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial id wrong. got %v, expected %v" , id , evt . ID )
2023-07-04 18:17:31 -03:00
}
if pubkey := wrapper . GetPubkey ( ) ; pubkey != evt . PubKey {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial pubkey wrong. got %v, expected %v" , pubkey , evt . PubKey )
2023-07-04 18:17:31 -03:00
}
if sig := wrapper . GetSig ( ) ; sig != evt . Sig {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial sig wrong. got %v, expected %v" , sig , evt . Sig )
2023-07-04 18:17:31 -03:00
}
if createdAt := wrapper . GetCreatedAt ( ) ; createdAt != evt . CreatedAt {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial created_at wrong. got %v, expected %v" , createdAt , evt . CreatedAt )
2023-07-04 18:17:31 -03:00
}
if kind := wrapper . GetKind ( ) ; kind != evt . Kind {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial kind wrong. got %v, expected %v" , kind , evt . Kind )
2023-07-04 18:17:31 -03:00
}
if content := wrapper . GetContent ( ) ; content != evt . Content {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "partial content wrong. got %v, expected %v" , content , evt . Content )
2023-07-04 18:17:31 -03:00
}
}
}
2023-07-05 08:42:36 -03:00
func TestNsonEncode ( t * testing . T ) {
for _ , jevt := range normalEvents {
pevt := & nostr . Event { }
if err := json . Unmarshal ( [ ] byte ( jevt ) , pevt ) ; err != nil {
t . Fatalf ( "failed to decode normal json: %s" , err )
}
2023-07-05 13:48:14 -03:00
nevt , err := Marshal ( pevt )
2023-07-05 08:42:36 -03:00
if err != nil {
t . Fatalf ( "failed to encode nson: %s" , err )
}
evt := & nostr . Event { }
if err := Unmarshal ( nevt , evt ) ; err != nil {
t . Fatalf ( "error unmarshaling nson: %s" , err )
}
checkParsedCorrectly ( t , pevt , jevt )
checkParsedCorrectly ( t , evt , jevt )
}
}
2023-07-04 18:17:31 -03:00
func checkParsedCorrectly ( t * testing . T , evt * nostr . Event , jevt string ) ( isBad bool ) {
var canonical nostr . Event
err := json . Unmarshal ( [ ] byte ( jevt ) , & canonical )
2023-07-05 08:27:00 -03:00
if err != nil {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "error unmarshaling normal json: %s" , err )
2023-07-05 08:27:00 -03:00
}
2023-07-04 18:17:31 -03:00
if evt . ID != canonical . ID {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "id is wrong: %s != %s" , evt . ID , canonical . ID )
2023-07-04 18:17:31 -03:00
isBad = true
}
if evt . PubKey != canonical . PubKey {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "pubkey is wrong: %s != %s" , evt . PubKey , canonical . PubKey )
2023-07-04 18:17:31 -03:00
isBad = true
}
if evt . Sig != canonical . Sig {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "sig is wrong: %s != %s" , evt . Sig , canonical . Sig )
2023-07-04 18:17:31 -03:00
isBad = true
}
if evt . Content != canonical . Content {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "content is wrong: %s != %s" , evt . Content , canonical . Content )
2023-07-04 18:17:31 -03:00
isBad = true
}
if evt . Kind != canonical . Kind {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "kind is wrong: %d != %d" , evt . Kind , canonical . Kind )
2023-07-04 18:17:31 -03:00
isBad = true
}
if evt . CreatedAt != canonical . CreatedAt {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "created_at is wrong: %v != %v" , evt . CreatedAt , canonical . CreatedAt )
2023-07-04 18:17:31 -03:00
isBad = true
}
if len ( evt . Tags ) != len ( canonical . Tags ) {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "tag number is wrong: %v != %v" , len ( evt . Tags ) , len ( canonical . Tags ) )
2023-07-04 18:17:31 -03:00
isBad = true
}
for i := range evt . Tags {
if len ( evt . Tags [ i ] ) != len ( canonical . Tags [ i ] ) {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "tag[%d] length is wrong: `%v` != `%v`" , i , len ( evt . Tags [ i ] ) , len ( canonical . Tags [ i ] ) )
2023-07-04 18:17:31 -03:00
isBad = true
}
for j := range evt . Tags [ i ] {
if evt . Tags [ i ] [ j ] != canonical . Tags [ i ] [ j ] {
2023-07-05 08:42:36 -03:00
t . Fatalf ( "tag[%d][%d] is wrong: `%s` != `%s`" , i , j , evt . Tags [ i ] [ j ] , canonical . Tags [ i ] [ j ] )
2023-07-04 18:17:31 -03:00
isBad = true
}
}
}
return isBad
}
2023-07-05 08:42:36 -03:00
var nsonTestEvents = [ ] string {
` { "id":"192eaf31bd20476bbe9265a3667cfef6410dfd563c02a64cb15d6fa8efec0ed6","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","sig":"5b9051596a5ba0619fd5fd7d2766b8aeb0cc398f1d1a0804f4b4ed884482025b3d4888e4c892f2fc437415bfc121482a990fad30f5cd9e333e55364052f99bbc","created_at":1688505641,"nson":"0401000500","kind":1,"content":"hello","tags":[]} ` ,
` { "id":"921ada34fe581b506975c641f2d1a3fb4f491f1d30c2490452e8524776895ebf","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","sig":"1f15a39e93a13f14f783eb127b2977e5dc5d207070dfa280fe45879b6b142ec1943ec921ab4268e69a43704d5641b45d18bf3789037c4842e062cd347a8a7ee1","created_at":1688553190,"nson":"12010006020200060005040005004000120006","kind":1,"content":"maçã","tags":[["entity","fruit"],["owner","79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","wss://リレー.jp","person"]]} ` ,
` { "id":"06212bae3cfc917d4b1239a3bad4fdba1e0e1ff09fbd2ee7b6da15d5fd859f58","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","sig":"47199a3a4184528d2c6cbb94df03b9793ea65b4578154ff5edce794d03ee2408cd3ca699b39cc11e791656e98b510194330d3dc215389c5648eddf33b8362444","created_at":1688572619,"nson":"0401000400","kind":1,"content":"x\ny","tags":[]} ` ,
` { "id":"ec9345e2af4225aada296964fa6025a1666dcac8dba154f5591a81f7dee1f84a","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","sig":"49f4b9edd7eff9e127b70077daff9a66da8c1ad974e5e6f47c094e8cc0c553071ff61c07b69d3db80c25f36248237ba6021038f5eb6b569ce79e3b024e8e358d","created_at":1688572819,"nson":"0401000400","kind":1,"content":"x\ty","tags":[]} ` ,
}
var normalEvents = [ ] string {
` { "id":"99b83b56b5e32d41bb950b53e68c8b9e25cb2c5aad0a91f5a063e1899cd610d7","pubkey":"5ec2d2c42dda8b0a560a145f6ef2eae3be8f9f972ca33aca6720de96572f12b9","created_at":1688572804,"kind":1,"tags":[],"content":"Time: 05/07/23 12:00:03\nUptime: 6 days, 17:50:45\n\nCPU:\n\tUsage: 9.8%\n\tTemperature: 35.67°C\nCore Temps:\n\tCore 0:\t35°C\n\tCore 1:\t36°C\n\tCore 2:\t34°C\n\tCore 3:\t35°C\n\tCore 4:\t39°C\n\tCore 5:\t35°C\n\nMemory:\n\tTotal: 15.57 GB\n\tUsed: 3.45 GB\n\tPercent Used: 24.3%","sig":"9eff509ed6fc96067ddee9a7d6c7abfe066136c7d82f0b3601c956765402efa9591e6916ca35aa06976c23b1adb2d368bd0f8d21d73e5f7c74d58acd1599c73a"} ` ,
` { "id" : "080c1acd1df07693fd59ad205d14c4d966a1729c6c6773e2b131f5d2356ace77" , "pubkey" : "06a498e5bf0cd756a4941e422713a7e75deca00332cb3736000f3df8616a2367" , "created_at" : 1688556260 , "kind" : 30078 , "tags" : [ [ "d" , "plebstr" ] ] , "content" : " wrQqhrUOy48lYfuAVcJlEMwygDIWi / pn3WFGptIuFfjkGi8ZBsUACsnpWbXg03TOkZqLK8VsmC4By2bQcDaP9Na0DzZK4MBO0At2vDfOyu / lx1nXLoj2r / efAWX4uEYFo3BsyWMeZfWxRltBuZO92OND7p0AUIdcPsTkkQtikHD5TBko2OGlejAUNu7PEDMh + K0Bg3i1W7iNMV2EUYOW37 + T0AlHSrQh6eUCpLcLh46oqgeg1ZgtpsJTCgSEQjoY5QLgTXw + N / DuLeiC30BjaBBCTSqFjhemE0MEo5Glg4YrCx8HZxP / KIbWie4rbU + 2 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
` { "id":"55ef38277352859c9e70a70e17e565652d5ece390ef05225104bf6f846410f0f","pubkey":"e81ca829c9bd368cc584844078f570c105e59d9392d19ce71bb9f34c1ac633f3","created_at":1688556088,"kind":1,"tags":[["e","29d57dd3bff6fde72141efcf55a09da0e4cb4a41785aa4f7c1411f8505af72b7","","reply"],["p","1e2d080673f959a5d82357d5e2aa5011778af634c33e4207cc54e7df943c798c"]],"content":"Is today the opportunity?","sig":"e9575aa169dbe38c249d7fedae70d1bed9bebca8522793a3d98ab2a12ef3849f85c87a3af2f24557296ef049f7b1f5ff09c5a1d812487ab26fa669d0093840bb"} ` ,
` { "id":"221e4c29c3ea93ddcd2298aaf5a0f5a7c628afb79d005cbb415cef2af8a2bb77","pubkey":"e81ca829c9bd368cc584844078f570c105e59d9392d19ce71bb9f34c1ac633f3","created_at":1688556080,"kind":6,"tags":[["e","29d57dd3bff6fde72141efcf55a09da0e4cb4a41785aa4f7c1411f8505af72b7"],["p","1e2d080673f959a5d82357d5e2aa5011778af634c33e4207cc54e7df943c798c"]],"content":" { \"content\":\"There will always be a another opportunity to buy more Bitcoin. On our way to 1 Whole Bitcoin…. #bitcoin #dip #nostr #plebchain\\n\\n\\n\\nhttps://nostrcheck.me/media/public/nostrcheck.me_2617026328114791421688555844.webp \",\"created_at\":1688555863,\"id\":\"29d57dd3bff6fde72141efcf55a09da0e4cb4a41785aa4f7c1411f8505af72b7\",\"kind\":1,\"pubkey\":\"1e2d080673f959a5d82357d5e2aa5011778af634c33e4207cc54e7df943c798c\",\"sig\":\"5d60fad4103a82934b9fde378b36b67db811b624da70c57f5ff1b50a11e0d606de606e1593a2d7446ed7ab2fc56bb13d89280f9336f6a74c40eb98f9d274bd81\",\"tags\":[[\"t\",\"bitcoin\"],[\"t\",\"dip\"],[\"t\",\"nostr\"],[\"t\",\"plebchain\"]]}","sig":"6cbeaae55176f424520cb13bfa5287e67438b3950653159c914bf7ce838097c29a4e3b95f84610cc8d211b5dc76872482b9cd0cfe09ba5bc84eae71d974a30a9"} ` ,
` { "id":"2dc1a37fce7815aba8a1750801f86c1cd35145bba6cfc35cce2c9c96eef32e5f","pubkey":"7ca66d4166b16f54a16868191ba1c6386a976624f4634f3896d9b6740a388ca3","created_at":1688556074,"kind":1,"tags":[["q","d913924e45928baf48b6b8fce440ebb7ccd177bc0979350923f5375aa42ceda6"],["imeta","url https://nostr.build/av/43715004b4a8ab944a45160869b9f01b1733f453817b4aacf938f563142aa735.mov","blurhash eaDv1LD*ICtkxV}uNGO9nmniVvt5ovaOWCEz$jw1XQX8Ioxas.R*jb","dim 720x1280"]],"content":"Lord knows their Magic 8 Ball is useless https://nostr.build/av/43715004b4a8ab944a45160869b9f01b1733f453817b4aacf938f563142aa735.mov nostr:note1myfeynj9j2967j9khr7wgs8tklxdzaaup9un2zfr75m44fpvaknq0qhsgt","sig":"e3d6f7d2deea211299f22d97be779629f66c31ee6a84382e04503817f2ecf16dacdfe4f535da378b508f917c6c73bcfb32b60510ed4edca32f7247fae4ae7ff6"} ` ,
` { "id":"989a336e2b5f35080afa97b72bfe88f42381c9e624d1849417f364e06b2221b0","pubkey":"634bd19e5c87db216555c814bf88e66ace175805291a6be90b15ac3b2247da9b","created_at":1688557054,"kind":1,"tags":[],"content":"あーあーあーあー、てすてす","sig":"d1ab7eeb73779f2a5bb6a3339aa5afb16afd3347b663823f135f5343c2eea9a4e337565f97e7a4dac34bf75f227489a27f3321fd740c1a426968fb5a76c99717"} ` ,
` { "id":"0d6cf58fe2878c050973bb26e678090258c716c456008aa6d849de555fa788b3","pubkey":"e472cba86ba9df4a48605371a42e90117036cbc1f9919865809346e59064b28f","created_at":1688557024,"kind":1,"tags":[],"content":"strfryのstreamとsyncの違いか今の所よくわからない…","sig":"e7de14d5b6f62c44c3f24838d23e388feabaf2500144e5ca2630adf34bc4e7f512c4f7303109ba9fd4c803d47bd8a48bdacc2e29aa1701c8c6dbfbf3dc9240da"} ` ,
` { "id":"c290be21ddf6188436bf544d5625246de2dde22eb17ab41f40b6b8aa9bee9c98","pubkey":"4d39c23b3b03bf99494df5f3a149c7908ae1bc7416807fdd6b34a31886eaae25","created_at":1688556176,"kind":1,"tags":[],"content":"独裁かはわからんけど、ぽーまんさんはキャッチミーイフユーキャンの詐欺師みたいな感じ","sig":"b8e10a7df4718f0738c0bbc59b7f25401027fa436dc00f0afdcb979bd253050376bbaea1a6ec5fa246be935d6cd5f72d8010e8f800c79a9867f00f5b1e083a14"} ` ,
` { "id":"0ad438f0a34756ecb1bf4d1792dc42a5b0141a39d944dfdd6737e883815a65dc","pubkey":"6a3cdfe891cddc33228a52cd7b27eca17e630569c93c24d70dc1cc01ce45881f","created_at":1688556173,"kind":1,"tags":[],"content":"hallucination やめて","sig":"ddbcc08b16f88532ccc739ab7dfa112fb462aafbeecb859a1b1b511ae9c2eb46872505aec58fe7e8b38639e558f0e9e0a13adf1b2f89d3a96f890acb3cd5c40f"} ` ,
` { "id":"ef1aea4c78f3de5cdd07dfe632e83adef34b3ac0c26afba60852ecd9800adc16","pubkey":"634bd19e5c87db216555c814bf88e66ace175805291a6be90b15ac3b2247da9b","created_at":1688556039,"kind":1,"tags":[],"content":"※日本リレーの relay-jp.nostr.wirednet.jp は何もいじらないので、継続して利用可能です","sig":"94eba6e0a242cf8987e1d8d782968b9e341e4f66278b937fa4da33c708e1f6eb82652796785eb20b21f9c18c0534a568b088297b6bef65729192ea04485b7740"} ` ,
` { "id":"d2c2cee862a4c7c903ecaf129e2458132b3b4134ae3135f71ba4b84798ccdd3f","pubkey":"634bd19e5c87db216555c814bf88e66ace175805291a6be90b15ac3b2247da9b","created_at":1688555969,"kind":1,"tags":[],"content":"relay.nostr.wirednet.jp をちょっとメンテナンスしますー\n一時的に過去のデータにはアクセス出来なくなります。(そのうち復活させる)","sig":"9c0749183db90cac31778523424453ba53532f7537233053fb1629428a4844bc9e69efdb2a2ac75b3e6f10fd28a34c366d79fa86f68a3fba36fea2bcd82d5c9f"} ` ,
` { "id":"4296bfa40427b9cb3e078da9c12de7af57e238caf77ace9b517ecd99ad7f38d8","pubkey":"046284c5d3cc859f58b1ff58d2bdbf22eb6f41a633e97f503a569cc1fe886322","created_at":1688555517,"kind":1,"tags":[],"content":"ブンブンピーブピー","sig":"40426c3677dd61132558e58ec2e0d306a7581a73e7cbcd8fcf447b0da1580b782c12461d4105939faa4caf95864354dba25fe5b10aa794ccc7f68adb2d12bb01"} ` ,
` { "id":"abd1d0c9300b7745bfada6147ceb5b4d9d09ab23925e55c53b835347fdd0cb17","pubkey":"634bd19e5c87db216555c814bf88e66ace175805291a6be90b15ac3b2247da9b","created_at":1688554980,"kind":1,"tags":[],"content":"Threadsには旅立たないかなー。","sig":"4f0243d5380a1757d78a772bb27386d2c2b54926b514f4568e717ed9cfe6d87f8d299a9b34d6bbd90241deabde17a3bf514f3195b4f4c4183429387bdc6f179d"} ` ,
` { "id":"4db06f7e522db1d5166f5455e193690a3e79f256ffa27df09aeede7f70fd87f1","pubkey":"2748ffc20bf0378ace2b32d4e9ca11fceb07fbef335a7124b5368b6338daf18b","created_at":1688554800,"kind":1,"tags":[],"content":"ζ*'ヮ')ζ<ウッウー!! 🕗\n--------\n2023年 7月5日 (水) 20: 00: 00","sig":"16aa8eda88e42711cd2b77f5611cb0f171493d36d58c167513afa3be3bbfb3f3ddc7cbb6a20a8b8e011c0b61befbc8d6e8b012f49619f9a15d77410e849df185"} ` ,
` { "id":"ebd8dd36f274ddf91959bf1225bb4c0353d187b373d91e92e1f971365d556420","pubkey":"634bd19e5c87db216555c814bf88e66ace175805291a6be90b15ac3b2247da9b","created_at":1688554184,"kind":1,"tags":[],"content":"あーーーーーーー、 relay.nostr.wirednet.jp ののぞき窓。\nログインボタンを非表示にしてるんだけど、キーボードショートカットだけ生きてることに気付いた。(※作者です)","sig":"21fc8e74b995bd185031fac03b85e3a1b431f79de26658f00c50e404769ac431ca53f151c3dc9a90435b2e70f4a2ac199c84fcb7ca2858c45665d99f9f9bae0a"} ` ,
` { "id":"e2aec1b7e297329203f67b61f214c2b745a3bc1590f299ca250a1633714c829c","pubkey":"b6ac413652c8431478cb6177722f822f0f7af774a274fc5574872407834c3253","created_at":1688553478,"kind":1,"tags":[],"content":"やー今日も疲れたなー!\n大将! お勧めでイソシアネートとポリオールね! \nあ、6:4でよろしく! ","sig":"12ba5dc9ff18f4ce995941f6de3bfaf8e3636afde37a06a4d3478c930ae22e2f79690e6f0682d532541222746aeb5f6dda29251cd7c31e71d7e206199b04bab4"} ` ,
` { "id":"e4e86256ed64514bcb3350cf8b631ef84b4aeafcdb164cea5096c893ead6a0a1","pubkey":"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","created_at":1688574304,"kind":1,"tags":[],"content":"\b\f\ueeee","sig":"c61a4971facc4899109e1a28b73cbd27f8807fedcff87cfa1d8f5e9b709feab75e3a62a96fc75b5d2a2f42443d5ca35daa6c3d724cd6e6133b9c4a1ef072c1e9"} ` ,
}
2023-07-05 13:48:14 -03:00
func BenchmarkNSONEncoding ( b * testing . B ) {
events := make ( [ ] * nostr . Event , len ( normalEvents ) )
for i , jevt := range normalEvents {
evt := & nostr . Event { }
json . Unmarshal ( [ ] byte ( jevt ) , evt )
events [ i ] = evt
}
b . Run ( "json.Marshal" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , evt := range events {
json . Marshal ( evt )
}
}
} )
b . Run ( "nson.Marshal" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , evt := range events {
Marshal ( evt )
}
}
} )
2023-07-30 17:03:25 -03:00
b . Run ( "nson.Marshal to bytes" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , evt := range events {
MarshalBytes ( evt )
}
}
} )
2023-07-05 13:48:14 -03:00
}
func BenchmarkNSONDecoding ( b * testing . B ) {
events := make ( [ ] string , len ( normalEvents ) )
2023-07-30 17:03:25 -03:00
eventsB := make ( [ ] [ ] byte , len ( normalEvents ) )
2023-07-05 13:48:14 -03:00
for i , jevt := range normalEvents {
evt := & nostr . Event { }
json . Unmarshal ( [ ] byte ( jevt ) , evt )
nevt , _ := Marshal ( evt )
events [ i ] = nevt
2023-07-30 17:03:25 -03:00
eventsB [ i ] = [ ] byte ( nevt )
2023-07-05 13:48:14 -03:00
}
b . Run ( "json.Unmarshal" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , nevt := range events {
evt := & nostr . Event { }
err := json . Unmarshal ( [ ] byte ( nevt ) , evt )
if err != nil {
b . Fatalf ( "failed to unmarshal: %s" , err )
}
}
}
} )
b . Run ( "nson.Unmarshal" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , nevt := range events {
evt := & nostr . Event { }
err := Unmarshal ( nevt , evt )
if err != nil {
b . Fatalf ( "failed to unmarshal: %s" , err )
}
}
}
} )
2023-07-30 17:03:25 -03:00
b . Run ( "nson.Unmarshal from bytes" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , nevt := range eventsB {
evt := & nostr . Event { }
err := UnmarshalBytes ( nevt , evt )
if err != nil {
b . Fatalf ( "failed to unmarshal: %s" , err )
}
}
}
} )
2023-07-05 13:48:14 -03:00
b . Run ( "json.Unmarshal + sig verification" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , nevt := range events {
evt := & nostr . Event { }
err := json . Unmarshal ( [ ] byte ( nevt ) , evt )
if err != nil {
b . Fatalf ( "failed to unmarshal: %s" , err )
}
evt . CheckSignature ( )
}
}
} )
b . Run ( "nson.Unmarshal + sig verification" , func ( b * testing . B ) {
for i := 0 ; i < b . N ; i ++ {
for _ , nevt := range events {
evt := & nostr . Event { }
err := Unmarshal ( nevt , evt )
if err != nil {
b . Fatalf ( "failed to unmarshal: %s" , err )
}
evt . CheckSignature ( )
}
}
} )
}