@@ -8,16 +8,24 @@ Literal_Conversion: do {
8
8
. string( " foobar " ) ,
9
9
. string( " 👨👩👧👧 Family Emoji " ) ,
10
10
. number( 0 ) ,
11
- . number( . max) ,
12
- . number( . min) ,
11
+ . number( Double ( Int32 . max) ) ,
12
+ . number( Double ( Int32 . min) ) ,
13
+ . number( Double . infinity) ,
14
+ . number( Double . nan) ,
13
15
. null,
14
16
. undefined,
15
17
]
16
18
for (index, input) in inputs. enumerated ( ) {
17
19
let prop = " prop_ \( index) "
18
20
setJSValue ( this: global, name: prop, value: input)
19
21
let got = getJSValue ( this: global, name: prop)
20
- try expectEqual ( got, input)
22
+ switch ( got, input) {
23
+ case let ( . number( lhs) , . number( rhs) ) :
24
+ // Compare bitPattern because nan == nan is always false
25
+ try expectEqual ( lhs. bitPattern, rhs. bitPattern)
26
+ default :
27
+ try expectEqual ( got, input)
28
+ }
21
29
}
22
30
} catch {
23
31
print ( error)
@@ -67,6 +75,50 @@ Object_Conversion: do {
67
75
print ( error)
68
76
}
69
77
78
+ Value_Construction: do {
79
+ let globalObject1 = getJSValue ( this: . global, name: " globalObject1 " )
80
+ let globalObject1Ref = try expectObject ( globalObject1)
81
+ let prop_2 = getJSValue ( this: globalObject1Ref, name: " prop_2 " )
82
+ try expectEqual ( Int . construct ( from: prop_2) , 2 )
83
+ let prop_3 = getJSValue ( this: globalObject1Ref, name: " prop_3 " )
84
+ try expectEqual ( Bool . construct ( from: prop_3) , true )
85
+ let prop_7 = getJSValue ( this: globalObject1Ref, name: " prop_7 " )
86
+ try expectEqual ( Double . construct ( from: prop_7) , 3.14 )
87
+ try expectEqual ( Float . construct ( from: prop_7) , 3.14 )
88
+ } catch {
89
+ print ( error)
90
+ }
91
+
92
+ Array_Iterator: do {
93
+ let globalObject1 = getJSValue ( this: . global, name: " globalObject1 " )
94
+ let globalObject1Ref = try expectObject ( globalObject1)
95
+ let prop_4 = getJSValue ( this: globalObject1Ref, name: " prop_4 " )
96
+ let array = try expectArray ( prop_4)
97
+ let expectedProp_4 : [ JSValue ] = [
98
+ . number( 3 ) , . number( 4 ) , . string( " str_elm_1 " ) , . number( 5 )
99
+ ]
100
+ try expectEqual ( Array ( array) , expectedProp_4)
101
+ }
102
+
103
+ Value_Decoder: do {
104
+ struct GlobalObject1 : Codable {
105
+ struct Prop1 : Codable {
106
+ let nested_prop : Int
107
+ }
108
+ let prop_1 : Prop1
109
+ let prop_2 : Int
110
+ let prop_3 : Bool
111
+ let prop_7 : Float
112
+ }
113
+ let decoder = JSValueDecoder ( )
114
+ let rawGlobalObject1 = getJSValue ( this: . global, name: " globalObject1 " )
115
+ let globalObject1 = try decoder. decode ( GlobalObject1 . self, from: rawGlobalObject1)
116
+ try expectEqual ( globalObject1. prop_1. nested_prop, 1 )
117
+ try expectEqual ( globalObject1. prop_2, 2 )
118
+ try expectEqual ( globalObject1. prop_3, true )
119
+ try expectEqual ( globalObject1. prop_7, 3.14 )
120
+ }
121
+
70
122
Function_Call: do {
71
123
// Notes: globalObject1 is defined in JavaScript environment
72
124
//
@@ -154,10 +206,8 @@ Host_Function_Registration: do {
154
206
}
155
207
156
208
try expectEqual ( hostFunc2 ( 3 ) , . number( 6 ) )
157
- // FIXME: Crash with latest toolchain
158
- /*
159
209
_ = try expectString ( hostFunc2 ( true ) )
160
- */
210
+
161
211
} catch {
162
212
print ( error)
163
213
}
0 commit comments