github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library@v0.2.0/FloatCompare/FloatCompare.go (about) 1 // Package FloatCompare 2 // Dafny module FloatCompare compiled into Go 3 4 package FloatCompare 5 6 import ( 7 os "os" 8 9 m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts" 10 m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals" 11 m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear" 12 m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod" 13 m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO" 14 m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions" 15 m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals" 16 m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt" 17 m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings" 18 m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm" 19 m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_" 20 m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals" 21 m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear" 22 m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul" 23 m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals" 24 m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear" 25 m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power" 26 m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations" 27 m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq" 28 m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort" 29 m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting" 30 m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary" 31 m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop" 32 m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence" 33 m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String" 34 m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt" 35 m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams" 36 m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings" 37 m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_" 38 m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm" 39 m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm" 40 m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers" 41 m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_" 42 _dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny" 43 ) 44 45 var _ = os.Args 46 var _ _dafny.Dummy__ 47 var _ m__System.Dummy__ 48 var _ m_Wrappers.Dummy__ 49 var _ m_Relations.Dummy__ 50 var _ m_Seq_MergeSort.Dummy__ 51 var _ m__Math.Dummy__ 52 var _ m_Seq.Dummy__ 53 var _ m_BoundedInts.Dummy__ 54 var _ m__Unicode.Dummy__ 55 var _ m_Functions.Dummy__ 56 var _ m_Utf8EncodingForm.Dummy__ 57 var _ m_Utf16EncodingForm.Dummy__ 58 var _ m_UnicodeStrings.Dummy__ 59 var _ m_FileIO.Dummy__ 60 var _ m_GeneralInternals.Dummy__ 61 var _ m_MulInternalsNonlinear.Dummy__ 62 var _ m_MulInternals.Dummy__ 63 var _ m_Mul.Dummy__ 64 var _ m_ModInternalsNonlinear.Dummy__ 65 var _ m_DivInternalsNonlinear.Dummy__ 66 var _ m_ModInternals.Dummy__ 67 var _ m_DivInternals.Dummy__ 68 var _ m_DivMod.Dummy__ 69 var _ m_Power.Dummy__ 70 var _ m_Logarithm.Dummy__ 71 var _ m_StandardLibraryInterop.Dummy__ 72 var _ m_StandardLibrary_UInt.Dummy__ 73 var _ m_StandardLibrary_Sequence.Dummy__ 74 var _ m_StandardLibrary_String.Dummy__ 75 var _ m_StandardLibrary.Dummy__ 76 var _ m_Streams.Dummy__ 77 var _ m_Sorting.Dummy__ 78 var _ m_HexStrings.Dummy__ 79 var _ m_GetOpt.Dummy__ 80 81 type Dummy__ struct{} 82 83 // Definition of class Default__ 84 type Default__ struct { 85 dummy byte 86 } 87 88 func New_Default___() *Default__ { 89 _this := Default__{} 90 91 return &_this 92 } 93 94 type CompanionStruct_Default___ struct { 95 } 96 97 var Companion_Default___ = CompanionStruct_Default___{} 98 99 func (_this *Default__) Equals(other *Default__) bool { 100 return _this == other 101 } 102 103 func (_this *Default__) EqualsGeneric(x interface{}) bool { 104 other, ok := x.(*Default__) 105 return ok && _this.Equals(other) 106 } 107 108 func (*Default__) String() string { 109 return "FloatCompare.Default__" 110 } 111 func (_this *Default__) ParentTraits_() []*_dafny.TraitID { 112 return [](*_dafny.TraitID){} 113 } 114 115 var _ _dafny.TraitOffspring = &Default__{} 116 117 func (_static *CompanionStruct_Default___) StrToIntInner(s _dafny.Sequence, acc _dafny.Int) _dafny.Int { 118 goto TAIL_CALL_START 119 TAIL_CALL_START: 120 if (_dafny.IntOfUint32((s).Cardinality())).Sign() == 0 { 121 return acc 122 } else if ((_dafny.Char('0')) <= ((s).Select(0).(_dafny.Char))) && (((s).Select(0).(_dafny.Char)) <= (_dafny.Char('9'))) { 123 var _in0 _dafny.Sequence = (s).Drop(1) 124 _ = _in0 125 var _in1 _dafny.Int = (((acc).Times(_dafny.IntOfInt64(10))).Plus(_dafny.IntOfInt32(rune((s).Select(0).(_dafny.Char))))).Minus(_dafny.IntOfInt32(rune(_dafny.Char('0')))) 126 _ = _in1 127 s = _in0 128 acc = _in1 129 goto TAIL_CALL_START 130 } else { 131 var _in2 _dafny.Sequence = (s).Drop(1) 132 _ = _in2 133 var _in3 _dafny.Int = acc 134 _ = _in3 135 s = _in2 136 acc = _in3 137 goto TAIL_CALL_START 138 } 139 } 140 func (_static *CompanionStruct_Default___) SkipLeadingSpace(val _dafny.Sequence) _dafny.Sequence { 141 goto TAIL_CALL_START 142 TAIL_CALL_START: 143 if ((_dafny.IntOfUint32((val).Cardinality())).Sign() == 1) && (((val).Select(0).(_dafny.Char)) <= (_dafny.Char(' '))) { 144 var _in0 _dafny.Sequence = (val).Drop(1) 145 _ = _in0 146 val = _in0 147 goto TAIL_CALL_START 148 } else { 149 return val 150 } 151 } 152 func (_static *CompanionStruct_Default___) StrToInt(s _dafny.Sequence, acc _dafny.Int) _dafny.Int { 153 var _0_tmp _dafny.Sequence = Companion_Default___.SkipLeadingSpace(s) 154 _ = _0_tmp 155 if (_dafny.IntOfUint32((_0_tmp).Cardinality())).Sign() == 0 { 156 return _dafny.Zero 157 } else if ((_0_tmp).Select(0).(_dafny.Char)) == (_dafny.Char('-')) { 158 return (_dafny.Zero).Minus(Companion_Default___.StrToIntInner(s, _dafny.Zero)) 159 } else { 160 return Companion_Default___.StrToIntInner(s, _dafny.Zero) 161 } 162 } 163 func (_static *CompanionStruct_Default___) SplitE(x _dafny.Sequence) m_Wrappers.Option { 164 var _0_parts m_Wrappers.Option = m_StandardLibrary.Companion_Default___.SplitOnce_q(x, _dafny.Char('e')) 165 _ = _0_parts 166 if (_0_parts).Is_Some() { 167 return _0_parts 168 } else { 169 return m_StandardLibrary.Companion_Default___.SplitOnce_q(x, _dafny.Char('E')) 170 } 171 } 172 func (_static *CompanionStruct_Default___) SplitExp(x _dafny.Sequence) _dafny.Tuple { 173 var _0_parts m_Wrappers.Option = Companion_Default___.SplitE(x) 174 _ = _0_parts 175 if (_0_parts).Is_Some() { 176 return _dafny.TupleOf((*((_0_parts).Dtor_value().(_dafny.Tuple)).IndexInt(0)).(_dafny.Sequence), Companion_Default___.StrToInt((*((_0_parts).Dtor_value().(_dafny.Tuple)).IndexInt(1)).(_dafny.Sequence), _dafny.Zero)) 177 } else { 178 return _dafny.TupleOf(x, _dafny.Zero) 179 } 180 } 181 func (_static *CompanionStruct_Default___) SkipLeadingZeros(val _dafny.Sequence) _dafny.Sequence { 182 goto TAIL_CALL_START 183 TAIL_CALL_START: 184 if ((_dafny.IntOfUint32((val).Cardinality())).Sign() == 1) && (((val).Select(0).(_dafny.Char)) == (_dafny.Char('0'))) { 185 var _in0 _dafny.Sequence = (val).Drop(1) 186 _ = _in0 187 val = _in0 188 goto TAIL_CALL_START 189 } else { 190 return val 191 } 192 } 193 func (_static *CompanionStruct_Default___) SkipTrailingZeros(val _dafny.Sequence) _dafny.Sequence { 194 goto TAIL_CALL_START 195 TAIL_CALL_START: 196 if ((_dafny.IntOfUint32((val).Cardinality())).Sign() == 1) && (((val).Select(((_dafny.IntOfUint32((val).Cardinality())).Minus(_dafny.One)).Uint32()).(_dafny.Char)) == (_dafny.Char('0'))) { 197 var _in0 _dafny.Sequence = (val).Take(((_dafny.IntOfUint32((val).Cardinality())).Minus(_dafny.One)).Uint32()) 198 _ = _in0 199 val = _in0 200 goto TAIL_CALL_START 201 } else { 202 return val 203 } 204 } 205 func (_static *CompanionStruct_Default___) SplitDot(x _dafny.Sequence) _dafny.Tuple { 206 var _0_parts m_Wrappers.Option = m_StandardLibrary.Companion_Default___.SplitOnce_q(x, _dafny.Char('.')) 207 _ = _0_parts 208 if (_0_parts).Is_Some() { 209 return _dafny.TupleOf(Companion_Default___.SkipLeadingZeros((*((_0_parts).Dtor_value().(_dafny.Tuple)).IndexInt(0)).(_dafny.Sequence)), Companion_Default___.SkipTrailingZeros((*((_0_parts).Dtor_value().(_dafny.Tuple)).IndexInt(1)).(_dafny.Sequence))) 210 } else { 211 return _dafny.TupleOf(Companion_Default___.SkipLeadingZeros(x), _dafny.SeqOfString("")) 212 } 213 } 214 func (_static *CompanionStruct_Default___) StrCmp(x _dafny.Sequence, y _dafny.Sequence) int8 { 215 goto TAIL_CALL_START 216 TAIL_CALL_START: 217 if ((_dafny.IntOfUint32((x).Cardinality())).Sign() == 0) && ((_dafny.IntOfUint32((y).Cardinality())).Sign() == 0) { 218 return int8(0) 219 } else if (_dafny.IntOfUint32((x).Cardinality())).Sign() == 0 { 220 return int8(-1) 221 } else if (_dafny.IntOfUint32((y).Cardinality())).Sign() == 0 { 222 return int8(1) 223 } else if ((x).Select(0).(_dafny.Char)) < ((y).Select(0).(_dafny.Char)) { 224 return int8(-1) 225 } else if ((x).Select(0).(_dafny.Char)) > ((y).Select(0).(_dafny.Char)) { 226 return int8(1) 227 } else { 228 var _in0 _dafny.Sequence = (x).Drop(1) 229 _ = _in0 230 var _in1 _dafny.Sequence = (y).Drop(1) 231 _ = _in1 232 x = _in0 233 y = _in1 234 goto TAIL_CALL_START 235 } 236 } 237 func (_static *CompanionStruct_Default___) AppendZeros(x _dafny.Sequence, newLength _dafny.Int) _dafny.Sequence { 238 return _dafny.Companion_Sequence_.Concatenate(x, _dafny.SeqCreate(((newLength).Minus(_dafny.IntOfUint32((x).Cardinality()))).Uint32(), func(coer26 func(_dafny.Int) _dafny.Char) func(_dafny.Int) interface{} { 239 return func(arg30 _dafny.Int) interface{} { 240 return coer26(arg30) 241 } 242 }(func(_0_i _dafny.Int) _dafny.Char { 243 return _dafny.Char('0') 244 })).SetString()) 245 } 246 func (_static *CompanionStruct_Default___) CompareFloatInner(x _dafny.Sequence, y _dafny.Sequence) int8 { 247 var _0_xParts _dafny.Tuple = Companion_Default___.SplitExp(x) 248 _ = _0_xParts 249 var _1_yParts _dafny.Tuple = Companion_Default___.SplitExp(y) 250 _ = _1_yParts 251 var _2_xNum _dafny.Tuple = Companion_Default___.SplitDot((*(_0_xParts).IndexInt(0)).(_dafny.Sequence)) 252 _ = _2_xNum 253 var _3_yNum _dafny.Tuple = Companion_Default___.SplitDot((*(_1_yParts).IndexInt(0)).(_dafny.Sequence)) 254 _ = _3_yNum 255 var _4_xDigits _dafny.Sequence = Companion_Default___.SkipLeadingZeros(_dafny.Companion_Sequence_.Concatenate((*(_2_xNum).IndexInt(0)).(_dafny.Sequence), (*(_2_xNum).IndexInt(1)).(_dafny.Sequence))) 256 _ = _4_xDigits 257 var _5_yDigits _dafny.Sequence = Companion_Default___.SkipLeadingZeros(_dafny.Companion_Sequence_.Concatenate((*(_3_yNum).IndexInt(0)).(_dafny.Sequence), (*(_3_yNum).IndexInt(1)).(_dafny.Sequence))) 258 _ = _5_yDigits 259 var _6_xExp _dafny.Int = ((*(_0_xParts).IndexInt(1)).(_dafny.Int)).Minus(_dafny.IntOfUint32(((*(_2_xNum).IndexInt(1)).(_dafny.Sequence)).Cardinality())) 260 _ = _6_xExp 261 var _7_yExp _dafny.Int = ((*(_1_yParts).IndexInt(1)).(_dafny.Int)).Minus(_dafny.IntOfUint32(((*(_3_yNum).IndexInt(1)).(_dafny.Sequence)).Cardinality())) 262 _ = _7_yExp 263 var _8_logX _dafny.Int = (_6_xExp).Plus(_dafny.IntOfUint32((_4_xDigits).Cardinality())) 264 _ = _8_logX 265 var _9_logY _dafny.Int = (_7_yExp).Plus(_dafny.IntOfUint32((_5_yDigits).Cardinality())) 266 _ = _9_logY 267 if (_8_logX).Cmp(_9_logY) > 0 { 268 return int8(1) 269 } else if (_9_logY).Cmp(_8_logX) > 0 { 270 return int8(-1) 271 } else if (_dafny.IntOfUint32((_4_xDigits).Cardinality())).Cmp(_dafny.IntOfUint32((_5_yDigits).Cardinality())) < 0 { 272 return Companion_Default___.StrCmp(Companion_Default___.AppendZeros(_4_xDigits, _dafny.IntOfUint32((_5_yDigits).Cardinality())), _5_yDigits) 273 } else if (_dafny.IntOfUint32((_5_yDigits).Cardinality())).Cmp(_dafny.IntOfUint32((_4_xDigits).Cardinality())) < 0 { 274 return Companion_Default___.StrCmp(_4_xDigits, Companion_Default___.AppendZeros(_5_yDigits, _dafny.IntOfUint32((_4_xDigits).Cardinality()))) 275 } else { 276 return Companion_Default___.StrCmp(_4_xDigits, _5_yDigits) 277 } 278 } 279 func (_static *CompanionStruct_Default___) IsNegative(x _dafny.Sequence) bool { 280 return ((_dafny.IntOfUint32((x).Cardinality())).Sign() == 1) && (((x).Select(0).(_dafny.Char)) == (_dafny.Char('-'))) 281 } 282 func (_static *CompanionStruct_Default___) SkipLeadingPlus(x _dafny.Sequence) _dafny.Sequence { 283 if ((_dafny.IntOfUint32((x).Cardinality())).Sign() == 1) && (((x).Select(0).(_dafny.Char)) == (_dafny.Char('+'))) { 284 return (x).Drop(1) 285 } else { 286 return x 287 } 288 } 289 func (_static *CompanionStruct_Default___) IsZero(x _dafny.Sequence) bool { 290 goto TAIL_CALL_START 291 TAIL_CALL_START: 292 if (_dafny.IntOfUint32((x).Cardinality())).Sign() == 0 { 293 return true 294 } else if (((x).Select(0).(_dafny.Char)) == (_dafny.Char('0'))) || (((x).Select(0).(_dafny.Char)) == (_dafny.Char('.'))) { 295 var _in0 _dafny.Sequence = (x).Drop(1) 296 _ = _in0 297 x = _in0 298 goto TAIL_CALL_START 299 } else if ((_dafny.Char('1')) <= ((x).Select(0).(_dafny.Char))) && (((x).Select(0).(_dafny.Char)) <= (_dafny.Char('9'))) { 300 return false 301 } else { 302 return true 303 } 304 } 305 func (_static *CompanionStruct_Default___) RecognizeZero(x _dafny.Sequence) _dafny.Sequence { 306 if Companion_Default___.IsNegative(x) { 307 if Companion_Default___.IsZero((x).Drop(1)) { 308 return _dafny.SeqOfString("0") 309 } else { 310 return x 311 } 312 } else if Companion_Default___.IsZero(x) { 313 return _dafny.SeqOfString("0") 314 } else { 315 return x 316 } 317 } 318 func (_static *CompanionStruct_Default___) CleanNumber(x _dafny.Sequence) _dafny.Sequence { 319 return Companion_Default___.RecognizeZero(Companion_Default___.SkipLeadingPlus(Companion_Default___.SkipLeadingSpace(x))) 320 } 321 func (_static *CompanionStruct_Default___) CompareFloat(x _dafny.Sequence, y _dafny.Sequence) int8 { 322 var _0_x _dafny.Sequence = Companion_Default___.CleanNumber(x) 323 _ = _0_x 324 var _1_y _dafny.Sequence = Companion_Default___.CleanNumber(y) 325 _ = _1_y 326 if (Companion_Default___.IsNegative(_0_x)) && (Companion_Default___.IsNegative(_1_y)) { 327 return Companion_Default___.CompareFloatInner((_1_y).Drop(1), (_0_x).Drop(1)) 328 } else if Companion_Default___.IsNegative(_0_x) { 329 return int8(-1) 330 } else if Companion_Default___.IsNegative(_1_y) { 331 return int8(1) 332 } else { 333 return Companion_Default___.CompareFloatInner(_0_x, _1_y) 334 } 335 } 336 func (_static *CompanionStruct_Default___) Less() int8 { 337 return int8(-1) 338 } 339 func (_static *CompanionStruct_Default___) Equal() int8 { 340 return int8(0) 341 } 342 func (_static *CompanionStruct_Default___) Greater() int8 { 343 return int8(1) 344 } 345 346 // End of class Default__ 347 348 // Definition of class CompareType 349 type CompareType struct { 350 } 351 352 func New_CompareType_() *CompareType { 353 _this := CompareType{} 354 355 return &_this 356 } 357 358 type CompanionStruct_CompareType_ struct { 359 } 360 361 var Companion_CompareType_ = CompanionStruct_CompareType_{} 362 363 func (*CompareType) String() string { 364 return "FloatCompare.CompareType" 365 } 366 func (_this *CompareType) ParentTraits_() []*_dafny.TraitID { 367 return [](*_dafny.TraitID){} 368 } 369 370 var _ _dafny.TraitOffspring = &CompareType{} 371 372 func (_this *CompanionStruct_CompareType_) IntegerRange(lo _dafny.Int, hi _dafny.Int) _dafny.Iterator { 373 iter := _dafny.IntegerRange(lo, hi) 374 return func() (interface{}, bool) { 375 next, ok := iter() 376 if !ok { 377 return int8(0), false 378 } 379 return next.(_dafny.Int).Int8(), true 380 } 381 } 382 383 // End of class CompareType 384 385 func Type_CompareType_() _dafny.TypeDescriptor { 386 return type_CompareType_{} 387 } 388 389 type type_CompareType_ struct { 390 } 391 392 func (_this type_CompareType_) Default() interface{} { 393 return int8(0) 394 } 395 396 func (_this type_CompareType_) String() string { 397 return "FloatCompare.CompareType" 398 } 399 func (_this *CompanionStruct_CompareType_) Is_(__source int8) bool { 400 var _0_x _dafny.Int = _dafny.IntOfInt8(__source) 401 _ = _0_x 402 return ((_dafny.IntOfInt64(-1)).Cmp(_0_x) <= 0) && ((_0_x).Cmp(_dafny.One) <= 0) 403 }