public unsafe void ValidateStrings()
        {
            string invalidJson = @"{ ""name"": ""\udc00\ud800\uggggxy"" }";
            var    bytes       = Encoding.UTF8.GetBytes(invalidJson);

            fixed(byte *ptr = bytes)
            {
                using (ParsedJson doc = SimdJson.ParseJson(ptr, (ulong)bytes.Length))
                {
                    Assert.False(doc.IsValid);
                    Assert.Throws <InvalidOperationException>(() => doc.CreateIterator());
                }
            }
        }
Esempio n. 2
0
        //[Fact]
        public unsafe void ParseDoubles()
        {
            byte[] fileData         = File.ReadAllBytes(Path.Combine(testDataDir, "canada.json"));
            var    simdDoubles      = new List <double>();
            var    referenceDoubles = new List <double>();

            fixed(byte *ptr = fileData)
            {
                using (ParsedJson doc = SimdJson.ParseJson(ptr, fileData.Length))
                {
                    using (var iterator = doc.CreateIterator())
                    {
                        while (iterator.MoveForward())
                        {
                            if (iterator.IsDouble || iterator.IsInteger)
                            {
                                simdDoubles.Add(iterator.GetDouble());
                            }
                        }
                    }
                }
            }

            // compare with doubles from Utf8JsonReader

            Utf8JsonReader reader = new Utf8JsonReader(fileData, true, default);

            while (reader.Read())
            {
                if (reader.TokenType == JsonTokenType.Number) //Utf8JsonReader doesn't have a token type for Double/Float
                {
                    referenceDoubles.Add(reader.GetDouble());
                }
            }

            for (int i = 0; i < simdDoubles.Count; i++)
            {
                var doubleSimd = simdDoubles[i];
                var doubleRef  = referenceDoubles[i];
                // TODO: compare
            }
        }