/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . serialization . json Ċ Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . json . internal .* Ċ import Ġkotlinx . serialization . test .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠSpecial Floating Point Values Test Ġ: ĠJson TestBase () Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠBox ( val Ġd : ĠDouble , Ġval Ġf : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠBox ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d Ġ!= Ġother . d Ġ&& Ġ!( d . isNaN () Ġ&& Ġother . d . isNaN ())) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġ!= Ġother . f Ġ&& Ġ!( f . isNaN () Ġ&& Ġother . f . isNaN ())) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġd . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġf . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjson Ġ= ĠJson Ġ{ Ġallow Special Floating Point Values Ġ= Ġtrue Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest N ans () Ġ= Ġparame tri zed Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ( Box ( Double . NaN , ĠFloat . NaN ), Ġ""" {" d ": NaN ," f ": NaN } """, Ġit ) ĊĠĠĠĠĠĠĠ Ġno Js Ġ{ Ġ// ĠNumber Ġformatting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest ( Box ( 0 . 0 , ĠFloat . NaN ), Ġ""" {" d ": 0 . 0 ," f ": NaN } """, Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest ( Box ( Double . NaN , Ġ 0 . 0 f ), Ġ""" {" d ": NaN ," f ": 0 . 0 } """, Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Inf init ies () Ġ= Ġparame tri zed Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ( Box ( Double . NEGATIVE _ INFINITY , ĠFloat . POSITIVE _ INFINITY ), Ġ""" {" d ": - Infinity ," f ": Infinity } """, Ġit ) ĊĠĠĠĠĠĠĠ Ġtest ( Box ( Double . POSITIVE _ INFINITY , ĠFloat . NEGATIVE _ INFINITY ), Ġ""" {" d ": Infinity ," f ": - Infinity } """, Ġit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest ( box : ĠBox , Ġexpected : ĠString , Ġuse Streaming : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe 1 Ġ= Ġassert Fails With < Json Exception > Ġ{ Ġdefault . encode ToString ( Box . serializer (), Ġbox , Ġuse Streaming ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġe 1 . message !!. contains (" Unexpected Ġspecial Ġfloating - point Ġvalue ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġjson . encode ToString ( Box . serializer (), Ġbox , Ġuse Streaming )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( box , Ġjson . decode FromString ( Box . serializer (), Ġexpected , Ġuse Streaming )) ĊĠĠĠĠĠĠĠ Ġval Ġe 2 Ġ= Ġassert Fails With < Json Exception > Ġ{ Ġdefault . decode FromString ( Box . serializer (), Ġexpected , Ġuse Streaming ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġe 2 . message !!. contains (" Unexpected Ġspecial Ġfloating - point Ġvalue ") Ġ} ĊĠĠĠ Ġ} Ċ } Ċ