{"ScriptPreparationCode":"var a = \u0060\r\nstruct Matrices {\r\n\tmodel: mat4x4f,\r\n\tworld: mat4x4f,\r\n\tmodelView: mat4x4f,\r\n\tmodelViewProjection: mat4x4f\r\n};\r\n\r\nfn getVertex2DToUVCoords(vertex: vec2f) -\u003E vec2f {\r\n return vec2(\r\n vertex.x * 0.5 \u002B 0.5,\r\n 0.5 - vertex.y * 0.5\r\n );\r\n}\r\n\r\nfn getVertex3DToUVCoords(vertex: vec3f) -\u003E vec2f {\r\n return vec2(\r\n vertex.x * 0.5 \u002B 0.5,\r\n 0.5 - vertex.y * 0.5\r\n );\r\n}\r\n\r\n\r\nfn getUVCover(uv: vec2f, textureMatrix: mat4x4f) -\u003E vec2f {\r\n return (textureMatrix * vec4f(uv, 0.0, 1.0)).xy;\r\n}\r\n\r\n@group(1) @binding(0) var\u003Cuniform\u003E matrices: Matrices;\r\n\r\nstruct VSOutput {\r\n @builtin(position) position: vec4f,\r\n @location(0) uv: vec2f,\r\n @location(1) normal: vec3f,\r\n};\r\n\r\n@fragment fn main(fsInput: VSOutput) -\u003E @location(0) vec4f {\r\n // normals\r\n return vec4(normalize(fsInput.normal) * 0.5 \u002B 0.5, 1.0);\r\n}\u0060\r\n\r\nvar b = \u0060\r\nstruct Matrices {\r\n\tmodel: mat4x4f,\r\n\tworld: mat4x4f,\r\n\tmodelView: mat4x4f,\r\n\tmodelViewProjection: mat4x4f\r\n};\r\n\r\nfn getVertex2DToUVCoords(vertex: vec2f) -\u003E vec2f {\r\n return vec2(\r\n vertex.x * 0.5 \u002B 0.5,\r\n 0.5 - vertex.y * 0.5\r\n );\r\n}\r\n\r\nfn getVertex3DToUVCoords(vertex: vec3f) -\u003E vec2f {\r\n return vec2(\r\n vertex.x * 0.5 \u002B 0.5,\r\n 0.5 - vertex.y * 0.5\r\n );\r\n}\r\n\r\n\r\nfn getUVCover(uv: vec2f, textureMatrix: mat4x4f) -\u003E vec2f {\r\n return (textureMatrix * vec4f(uv, 0.0, 1.0)).xy;\r\n}\r\n\r\n@group(1) @binding(0) var\u003Cuniform\u003E matrices: Matrices;\r\n\r\nstruct VSOutput {\r\n @builtin(position) position: vec4f,\r\n @location(0) uv: vec2f,\r\n @location(1) normal: vec3f,\r\n};\r\n\r\n@fragment fn main(fsInput: VSOutput) -\u003E @location(0) vec4f {\r\n // normals\r\n return vec4(normalize(fsInput.normal) * 0.5 \u002B 0.5, 1.0);\r\n}\u0060\r\n\r\nvar c = \u0060struct Attributes {\r\n\t@builtin(vertex_index) vertexIndex : u32,\r\n\t@builtin(instance_index) instanceIndex : u32,\r\n\t@location(0) position: vec3f,\r\n\t@location(1) uv: vec2f,\r\n\t@location(2) normal: vec3f\r\n};\r\n\r\nstruct Matrices {\r\n\tmodel: mat4x4f,\r\n\tworld: mat4x4f,\r\n\tmodelView: mat4x4f,\r\n\tmodelViewProjection: mat4x4f\r\n};\r\n\r\nstruct Camera {\r\n\tmodel: mat4x4f,\r\n\tview: mat4x4f,\r\n\tprojection: mat4x4f\r\n};\r\n\r\nfn getOutputPosition(position: vec3f) -\u003E vec4f {\r\n return matrices.modelViewProjection * vec4f(position, 1.0);\r\n}\r\n\r\nfn getUVCover(uv: vec2f, textureMatrix: mat4x4f) -\u003E vec2f {\r\n return (textureMatrix * vec4f(uv, 0.0, 1.0)).xy;\r\n}\r\n\r\n@group(0) @binding(0) var\u003Cuniform\u003E camera: Camera;\r\n\r\n@group(1) @binding(0) var\u003Cuniform\u003E matrices: Matrices;\r\n\r\nstruct VertexOutput {\r\n @builtin(position) position: vec4f,\r\n @location(0) uv: vec2f,\r\n @location(1) normal: vec3f,\r\n};\r\n\r\n@vertex fn main(\r\n attributes: Attributes,\r\n) -\u003E VertexOutput {\r\n var vsOutput: VertexOutput;\r\n\r\n vsOutput.position = getOutputPosition(attributes.position);\r\n vsOutput.uv = attributes.uv;\r\n vsOutput.normal = attributes.normal;\r\n \r\n return vsOutput;\r\n}\u0060\r\n\r\nvar d = new Set([a, b, c])","TestCases":[{"Name":"a, b equality","Code":"a === b","IsDeferred":false},{"Name":"a, b locale compare","Code":"a.localeCompare(b) === 0","IsDeferred":false},{"Name":"a, c equality","Code":"a === c","IsDeferred":false},{"Name":"a, c locale compare","Code":"a.localeCompare(c) === 0","IsDeferred":false},{"Name":"d get a","Code":"d.get(a)","IsDeferred":false},{"Name":"d get b","Code":"d.get(b)","IsDeferred":false},{"Name":"d get c","Code":"d.get(c)","IsDeferred":false},{"Name":"d get something not in d","Code":"d.get(\u0027test\u0027)","IsDeferred":false}]}