Move UniJSON to Assets/*

This commit is contained in:
yutopp
2018-12-28 22:27:19 +09:00
parent f0bc0a29bd
commit d96e88f9c8
197 changed files with 13953 additions and 13953 deletions

View File

@@ -1,44 +1,44 @@
using NUnit.Framework;
using UniJSON;
using System.Linq;
using System.Text;
using System;
namespace UniJSON
{
public class StoreTests
{
[Test]
public void StringBuilderStoreTest()
{
var sb = new StringBuilder();
var stream = new StringBuilderStore(sb);
stream.Write("abc");
Assert.AreEqual("abc", sb.ToString());
stream.Write("d");
Assert.AreEqual("abcd", sb.ToString());
stream.Clear();
stream.Write("e");
Assert.AreEqual("e", sb.ToString());
}
[Test]
public void ArrayStoreTest()
{
var store = new BytesStore(1);
store.WriteValues(1, 2, 3);
Assert.True(new Byte[] { 1, 2, 3 }.SequenceEqual(store.Bytes.ToEnumerable()));
store.Write(4);
Assert.True(new Byte[] { 1, 2, 3, 4 }.SequenceEqual(store.Bytes.ToEnumerable()));
store.Clear();
store.Write(5);
Assert.True(new Byte[] { 5 }.SequenceEqual(store.Bytes.ToEnumerable()));
}
}
}
using NUnit.Framework;
using UniJSON;
using System.Linq;
using System.Text;
using System;
namespace UniJSON
{
public class StoreTests
{
[Test]
public void StringBuilderStoreTest()
{
var sb = new StringBuilder();
var stream = new StringBuilderStore(sb);
stream.Write("abc");
Assert.AreEqual("abc", sb.ToString());
stream.Write("d");
Assert.AreEqual("abcd", sb.ToString());
stream.Clear();
stream.Write("e");
Assert.AreEqual("e", sb.ToString());
}
[Test]
public void ArrayStoreTest()
{
var store = new BytesStore(1);
store.WriteValues(1, 2, 3);
Assert.True(new Byte[] { 1, 2, 3 }.SequenceEqual(store.Bytes.ToEnumerable()));
store.Write(4);
Assert.True(new Byte[] { 1, 2, 3, 4 }.SequenceEqual(store.Bytes.ToEnumerable()));
store.Clear();
store.Write(5);
Assert.True(new Byte[] { 5 }.SequenceEqual(store.Bytes.ToEnumerable()));
}
}
}

View File

@@ -1,71 +1,71 @@
using NUnit.Framework;
using System.Linq;
namespace UniJSON
{
public class JsonDiffTests
{
[Test]
public void PathTest()
{
var json=@"
{
""a"": [
{
""aa"": 1
}
]
}
";
var root = JsonParser.Parse(json);
{
var it = root.Traverse().GetEnumerator();
it.MoveNext(); Assert.AreEqual("/", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a/0", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a/0/aa", it.Current.Pointer().ToString());
Assert.False(it.MoveNext());
}
{
var it = root.Traverse().GetEnumerator();
var f = new JsonFormatter();
f.Serialize("JsonPath");
root.SetValue(Utf8String.From("/a"), f.GetStoreBytes());
it.MoveNext(); Assert.AreEqual("/", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a", it.Current.Pointer().ToString());
Assert.False(it.MoveNext());
}
}
[Test]
public void DiffTest()
{
var a = @"{
""a"": 1
}";
var b = @"{
}";
var diff = JsonParser.Parse(a).Diff(JsonParser.Parse(b)).ToArray();
Assert.AreEqual(1, diff.Length);
}
#if UNITY_EDITOR
[Test]
public void Vector3()
{
var src = new UnityEngine.Vector3(1, 2, 3);
var json = UnityEngine.JsonUtility.ToJson(src);
Assert.AreEqual("{\"x\":1.0,\"y\":2.0,\"z\":3.0}", json);
var dst = UnityEngine.JsonUtility.FromJson<UnityEngine.Vector3>(json);
Assert.AreEqual(src, dst);
}
#endif
}
}
using NUnit.Framework;
using System.Linq;
namespace UniJSON
{
public class JsonDiffTests
{
[Test]
public void PathTest()
{
var json=@"
{
""a"": [
{
""aa"": 1
}
]
}
";
var root = JsonParser.Parse(json);
{
var it = root.Traverse().GetEnumerator();
it.MoveNext(); Assert.AreEqual("/", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a/0", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a/0/aa", it.Current.Pointer().ToString());
Assert.False(it.MoveNext());
}
{
var it = root.Traverse().GetEnumerator();
var f = new JsonFormatter();
f.Serialize("JsonPath");
root.SetValue(Utf8String.From("/a"), f.GetStoreBytes());
it.MoveNext(); Assert.AreEqual("/", it.Current.Pointer().ToString());
it.MoveNext(); Assert.AreEqual("/a", it.Current.Pointer().ToString());
Assert.False(it.MoveNext());
}
}
[Test]
public void DiffTest()
{
var a = @"{
""a"": 1
}";
var b = @"{
}";
var diff = JsonParser.Parse(a).Diff(JsonParser.Parse(b)).ToArray();
Assert.AreEqual(1, diff.Length);
}
#if UNITY_EDITOR
[Test]
public void Vector3()
{
var src = new UnityEngine.Vector3(1, 2, 3);
var json = UnityEngine.JsonUtility.ToJson(src);
Assert.AreEqual("{\"x\":1.0,\"y\":2.0,\"z\":3.0}", json);
var dst = UnityEngine.JsonUtility.FromJson<UnityEngine.Vector3>(json);
Assert.AreEqual(src, dst);
}
#endif
}
}

View File

@@ -1,47 +1,47 @@
using NUnit.Framework;
using UnityEngine;
using System.Linq;
using System.Text;
namespace UniJSON
{
public class JsonFormatterTests
{
[Test]
public void IndentTest()
{
var formatter = new JsonFormatter(2);
formatter.BeginMap();
formatter.Key("a"); formatter.Value(1);
formatter.EndMap();
//var json = formatter.ToString();
}
[Test]
public void NullTest()
{
var bytes = Encoding.UTF8.GetBytes("null");
var json = new JsonFormatter();
json.Null();
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
[Test]
public void BooleanTest()
{
{
var bytes = Encoding.UTF8.GetBytes("true");
var json = new JsonFormatter();
json.Value(true);
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
{
var bytes = Encoding.UTF8.GetBytes("false");
var json = new JsonFormatter();
json.Value(false);
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
}
}
}
using NUnit.Framework;
using UnityEngine;
using System.Linq;
using System.Text;
namespace UniJSON
{
public class JsonFormatterTests
{
[Test]
public void IndentTest()
{
var formatter = new JsonFormatter(2);
formatter.BeginMap();
formatter.Key("a"); formatter.Value(1);
formatter.EndMap();
//var json = formatter.ToString();
}
[Test]
public void NullTest()
{
var bytes = Encoding.UTF8.GetBytes("null");
var json = new JsonFormatter();
json.Null();
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
[Test]
public void BooleanTest()
{
{
var bytes = Encoding.UTF8.GetBytes("true");
var json = new JsonFormatter();
json.Value(true);
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
{
var bytes = Encoding.UTF8.GetBytes("false");
var json = new JsonFormatter();
json.Value(false);
Assert.True(json.GetStoreBytes().ToEnumerable().SequenceEqual(bytes));
}
}
}
}

View File

@@ -1,354 +1,354 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON
{
public class JsonParserTest
{
[Test]
public void Tests()
{
{
var result = JsonParser.Parse("1");
Assert.AreEqual(1, result.GetInt32());
}
{
var result = JsonParser.Parse("{ \"a\": { \"b\": 1 }}");
Assert.True(result.ContainsKey("a"));
}
}
[Test]
public void NullTest()
{
{
var node = JsonParser.Parse("null");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(4, node.Value.Bytes.Count);
Assert.True(node.IsNull());
}
}
[Test]
public void BooleanTest()
{
{
var node = JsonParser.Parse("true");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(4, node.Value.Bytes.Count);
Assert.True(node.IsBoolean());
Assert.AreEqual(true, node.GetBoolean());
Assert.Catch(typeof(FormatException), () => node.GetDouble());
}
{
var node = JsonParser.Parse(" false ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(5, node.Value.Bytes.Count);
Assert.True(node.IsBoolean());
Assert.AreEqual(false, node.GetBoolean());
}
}
[Test]
public void NumberTest()
{
{
var node = JsonParser.Parse("1");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(1, node.Value.Bytes.Count);
Assert.True(node.IsInteger());
Assert.AreEqual(1, (int)node.GetDouble());
Assert.Catch(typeof(DeserializationException), () => node.GetBoolean());
}
{
var node = JsonParser.Parse(" 22 ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsInteger());
Assert.AreEqual(22, (int)node.GetDouble());
}
{
var node = JsonParser.Parse(" 3.3 ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(3, node.Value.Bytes.Count);
Assert.True(node.IsFloat());
Assert.AreEqual(3, (int)node.GetDouble());
Assert.AreEqual(3.3f, (float)node.GetDouble());
}
{
var node = JsonParser.Parse(" -4.44444444444444444444 ");
Assert.True(node.IsFloat());
Assert.AreEqual(-4, (int)node.GetDouble());
Assert.AreEqual(-4.44444444444444444444, node.GetDouble());
}
{
var node = JsonParser.Parse(" -5e-4 ");
Assert.True(node.IsFloat());
Assert.AreEqual(0, (int)node.GetDouble());
Assert.AreEqual(-5e-4, node.GetDouble());
}
{
var node = JsonParser.Parse("NaN");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.NaN, node.GetDouble());
}
{
var node = JsonParser.Parse("Infinity");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.PositiveInfinity, node.GetDouble());
}
{
var node = JsonParser.Parse("-Infinity");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.NegativeInfinity, node.GetDouble());
}
}
[Test]
public void StringTest()
{
{
var value = "hoge";
var quoted = "\"hoge\"";
Assert.AreEqual(quoted, JsonString.Quote(value));
var node = JsonParser.Parse(quoted);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(quoted.Length, node.Value.Bytes.Count);
Assert.True(node.IsString());
Assert.AreEqual("hoge", node.GetString());
}
{
var value = "fuga\n hoge";
var quoted = "\"fuga\\n hoge\"";
Assert.AreEqual(quoted, JsonString.Quote(value));
var node = JsonParser.Parse(quoted);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(quoted.Length, node.Value.Bytes.Count);
Assert.True(node.IsString());
Assert.AreEqual(value, node.GetString());
}
}
[Test]
public void StringEscapeTest()
{
{
var value = "\"";
var escaped = "\\\"";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\\";
var escaped = "\\\\";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "/";
var escaped = "\\/";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\b";
var escaped = "\\b";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\f";
var escaped = "\\f";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\n";
var escaped = "\\n";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\r";
var escaped = "\\r";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\t";
var escaped = "\\t";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
}
[Test]
public void ObjectTest()
{
{
var json = "{}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsMap());
Assert.AreEqual(0, node.ObjectItems().Count());
}
{
var json = "{\"key\":\"value\"}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsMap());
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.AreEqual("value", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
{
var json = "{\"key\":\"value\"}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsMap());
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.AreEqual("value", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
}
[Test]
public void NestedObjectTest()
{
{
var json = "{\"key\":{ \"nestedKey\": \"nestedValue\" }, \"key2\": { \"nestedKey2\": \"nestedValue2\" } }";
var node = JsonParser.Parse(json);
Assert.True(node.IsMap());
{
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.True(it.Current.Value.IsMap());
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key2", it.Current.Key.GetString());
Assert.True(it.Current.Value.IsMap());
Assert.IsFalse(it.MoveNext());
}
var nested = node["key2"];
{
var it = nested.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("nestedKey2", it.Current.Key.GetString());
Assert.AreEqual("nestedValue2", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
Assert.AreEqual("nestedValue2", node["key2"]["nestedKey2"].GetString());
}
}
[Test]
public void ArrayTest()
{
{
var json = "[]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsArray());
Assert.AreEqual("[\n]", node.ToString(" "));
}
{
var json = "[1,2,3]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.True(node.IsArray());
Assert.AreEqual(1, node[0].GetDouble());
Assert.AreEqual(2, node[1].GetDouble());
Assert.AreEqual(3, node[2].GetDouble());
Assert.AreEqual("[\n 1,\n 2,\n 3\n]", node.ToString(" "));
}
{
var json = "[\"key\",1]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsArray());
var it = node.ArrayItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.GetString());
Assert.IsTrue(it.MoveNext());
Assert.AreEqual(1, it.Current.GetDouble());
Assert.IsFalse(it.MoveNext());
Assert.AreEqual("key", node[0].GetString());
Assert.AreEqual(1, node[1].GetDouble());
Assert.AreEqual("[\n \"key\",\n 1\n]", node.ToString(" "));
}
}
[Test]
public void ParseTest()
{
var json = "{";
Assert.Catch(typeof(ParserException), () => JsonParser.Parse(json));
}
[Test]
public void Utf8Test()
{
JsonParser.Parse("\"\"");
}
[Test]
public void TimeTest()
{
var f = new JsonFormatter();
f.Value(new DateTimeOffset());
Assert.AreEqual("\"0001-01-01T00:00:00Z\"", new Utf8String(f.GetStoreBytes()).ToString());
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON
{
public class JsonParserTest
{
[Test]
public void Tests()
{
{
var result = JsonParser.Parse("1");
Assert.AreEqual(1, result.GetInt32());
}
{
var result = JsonParser.Parse("{ \"a\": { \"b\": 1 }}");
Assert.True(result.ContainsKey("a"));
}
}
[Test]
public void NullTest()
{
{
var node = JsonParser.Parse("null");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(4, node.Value.Bytes.Count);
Assert.True(node.IsNull());
}
}
[Test]
public void BooleanTest()
{
{
var node = JsonParser.Parse("true");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(4, node.Value.Bytes.Count);
Assert.True(node.IsBoolean());
Assert.AreEqual(true, node.GetBoolean());
Assert.Catch(typeof(FormatException), () => node.GetDouble());
}
{
var node = JsonParser.Parse(" false ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(5, node.Value.Bytes.Count);
Assert.True(node.IsBoolean());
Assert.AreEqual(false, node.GetBoolean());
}
}
[Test]
public void NumberTest()
{
{
var node = JsonParser.Parse("1");
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(1, node.Value.Bytes.Count);
Assert.True(node.IsInteger());
Assert.AreEqual(1, (int)node.GetDouble());
Assert.Catch(typeof(DeserializationException), () => node.GetBoolean());
}
{
var node = JsonParser.Parse(" 22 ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsInteger());
Assert.AreEqual(22, (int)node.GetDouble());
}
{
var node = JsonParser.Parse(" 3.3 ");
Assert.AreEqual(1, node.Value.Bytes.Offset);
Assert.AreEqual(3, node.Value.Bytes.Count);
Assert.True(node.IsFloat());
Assert.AreEqual(3, (int)node.GetDouble());
Assert.AreEqual(3.3f, (float)node.GetDouble());
}
{
var node = JsonParser.Parse(" -4.44444444444444444444 ");
Assert.True(node.IsFloat());
Assert.AreEqual(-4, (int)node.GetDouble());
Assert.AreEqual(-4.44444444444444444444, node.GetDouble());
}
{
var node = JsonParser.Parse(" -5e-4 ");
Assert.True(node.IsFloat());
Assert.AreEqual(0, (int)node.GetDouble());
Assert.AreEqual(-5e-4, node.GetDouble());
}
{
var node = JsonParser.Parse("NaN");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.NaN, node.GetDouble());
}
{
var node = JsonParser.Parse("Infinity");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.PositiveInfinity, node.GetDouble());
}
{
var node = JsonParser.Parse("-Infinity");
Assert.True(node.IsFloat());
Assert.AreEqual(Double.NegativeInfinity, node.GetDouble());
}
}
[Test]
public void StringTest()
{
{
var value = "hoge";
var quoted = "\"hoge\"";
Assert.AreEqual(quoted, JsonString.Quote(value));
var node = JsonParser.Parse(quoted);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(quoted.Length, node.Value.Bytes.Count);
Assert.True(node.IsString());
Assert.AreEqual("hoge", node.GetString());
}
{
var value = "fuga\n hoge";
var quoted = "\"fuga\\n hoge\"";
Assert.AreEqual(quoted, JsonString.Quote(value));
var node = JsonParser.Parse(quoted);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(quoted.Length, node.Value.Bytes.Count);
Assert.True(node.IsString());
Assert.AreEqual(value, node.GetString());
}
}
[Test]
public void StringEscapeTest()
{
{
var value = "\"";
var escaped = "\\\"";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\\";
var escaped = "\\\\";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "/";
var escaped = "\\/";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\b";
var escaped = "\\b";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\f";
var escaped = "\\f";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\n";
var escaped = "\\n";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\r";
var escaped = "\\r";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
{
var value = "\t";
var escaped = "\\t";
Assert.AreEqual(escaped, JsonString.Escape(value));
Assert.AreEqual(value, JsonString.Unescape(escaped));
}
}
[Test]
public void ObjectTest()
{
{
var json = "{}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsMap());
Assert.AreEqual(0, node.ObjectItems().Count());
}
{
var json = "{\"key\":\"value\"}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsMap());
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.AreEqual("value", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
{
var json = "{\"key\":\"value\"}";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsMap());
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.AreEqual("value", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
}
[Test]
public void NestedObjectTest()
{
{
var json = "{\"key\":{ \"nestedKey\": \"nestedValue\" }, \"key2\": { \"nestedKey2\": \"nestedValue2\" } }";
var node = JsonParser.Parse(json);
Assert.True(node.IsMap());
{
var it = node.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.Key.GetString());
Assert.True(it.Current.Value.IsMap());
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key2", it.Current.Key.GetString());
Assert.True(it.Current.Value.IsMap());
Assert.IsFalse(it.MoveNext());
}
var nested = node["key2"];
{
var it = nested.ObjectItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("nestedKey2", it.Current.Key.GetString());
Assert.AreEqual("nestedValue2", it.Current.Value.GetString());
Assert.IsFalse(it.MoveNext());
}
Assert.AreEqual("nestedValue2", node["key2"]["nestedKey2"].GetString());
}
}
[Test]
public void ArrayTest()
{
{
var json = "[]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.AreEqual(2, node.Value.Bytes.Count);
Assert.True(node.IsArray());
Assert.AreEqual("[\n]", node.ToString(" "));
}
{
var json = "[1,2,3]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.True(node.IsArray());
Assert.AreEqual(1, node[0].GetDouble());
Assert.AreEqual(2, node[1].GetDouble());
Assert.AreEqual(3, node[2].GetDouble());
Assert.AreEqual("[\n 1,\n 2,\n 3\n]", node.ToString(" "));
}
{
var json = "[\"key\",1]";
var node = JsonParser.Parse(json);
Assert.AreEqual(0, node.Value.Bytes.Offset);
//Assert.Catch(() => { var result = node.Value.Bytes.Count; }, "raise exception");
Assert.AreEqual(json.Length, node.Value.Bytes.Count);
Assert.True(node.IsArray());
var it = node.ArrayItems().GetEnumerator();
Assert.IsTrue(it.MoveNext());
Assert.AreEqual("key", it.Current.GetString());
Assert.IsTrue(it.MoveNext());
Assert.AreEqual(1, it.Current.GetDouble());
Assert.IsFalse(it.MoveNext());
Assert.AreEqual("key", node[0].GetString());
Assert.AreEqual(1, node[1].GetDouble());
Assert.AreEqual("[\n \"key\",\n 1\n]", node.ToString(" "));
}
}
[Test]
public void ParseTest()
{
var json = "{";
Assert.Catch(typeof(ParserException), () => JsonParser.Parse(json));
}
[Test]
public void Utf8Test()
{
JsonParser.Parse("\"\"");
}
[Test]
public void TimeTest()
{
var f = new JsonFormatter();
f.Value(new DateTimeOffset());
Assert.AreEqual("\"0001-01-01T00:00:00Z\"", new Utf8String(f.GetStoreBytes()).ToString());
}
}
}

View File

@@ -1,152 +1,152 @@
#pragma warning disable 0649
using System;
using NUnit.Framework;
using System.Collections.Generic;
namespace UniJSON
{
public class JsonSerializerTests
{
struct Point
{
public float X;
public float Y;
public float[] Vector;
public override string ToString()
{
return string.Format("{{X={0}, Y={1}, {2}}}", X, Y, Vector);
}
}
enum HogeFuga
{
Hoge,
Fuga,
}
struct EnumTest
{
public HogeFuga EnumDefault;
[JsonSchema(EnumSerializationType =EnumSerializationType.AsInt)]
public HogeFuga EnumAsInt;
[JsonSchema(EnumSerializationType = EnumSerializationType.AsString)]
public HogeFuga EnumAsString;
[JsonSchema(EnumSerializationType = EnumSerializationType.AsLowerString)]
public HogeFuga EnumAsLowerString;
}
#region Serializer
static void SerializeValue<T>(T value, string json)
{
var b = new BytesStore();
var f = new JsonFormatter(b);
f.Serialize(value);
Assert.AreEqual(json, new Utf8String(b.Bytes).ToString());
}
[Test]
public void JsonSerializerTest()
{
SerializeValue(1, "1");
SerializeValue(1.1f, "1.1");
SerializeValue(1.2, "1.2");
SerializeValue(Double.NaN, "NaN");
SerializeValue(Double.PositiveInfinity, "Infinity");
SerializeValue(Double.NegativeInfinity, "-Infinity");
SerializeValue(true, "true");
SerializeValue(false, "false");
SerializeValue("ascii", "\"ascii\"");
SerializeValue(new[] { 1 }, "[1]");
SerializeValue(new[] { 1.1f }, "[1.1]");
SerializeValue(new[] { 1.2 }, "[1.2]");
SerializeValue(new[] { true, false }, "[true,false]");
SerializeValue(new[] { "ascii" }, "[\"ascii\"]");
SerializeValue(new List<int> { 1 }, "[1]");
//SerializeValue(new object[] { null, 1, "a" }, "[null,1,\"a\"]");
SerializeValue(new Dictionary<string, object> { }, "{}");
SerializeValue(new Dictionary<string, object> { { "a", 1 } }, "{\"a\":1}");
SerializeValue(new Dictionary<string, object> { { "a",
new Dictionary<string, object>{
} } }, "{\"a\":{}}");
SerializeValue(new Point { X = 1 }, "{\"X\":1,\"Y\":0}");
SerializeValue(HogeFuga.Fuga, "1");
SerializeValue(new EnumTest(), "{\"EnumDefault\":0,\"EnumAsInt\":0,\"EnumAsString\":\"Hoge\",\"EnumAsLowerString\":\"hoge\"}");
}
[Test]
public void KeyValue()
{
var p = new Point
{
X = 1,
Vector = new float[] { 1, 2, 3 }
};
var f = new JsonFormatter();
f.BeginMap();
f.KeyValue(() => p.Vector);
f.EndMap();
var json = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
Assert.AreEqual(1, json.GetObjectCount());
Assert.AreEqual(1, json["Vector"][0].GetInt32());
}
#endregion
#region Deserialize
static void DeserializeValue<T>(T value, string json)
{
var parsed = JsonParser.Parse(json);
var t = default(T);
parsed.Deserialize(ref t);
Assert.AreEqual(value, t);
}
[Test]
public void JsonDeserializerTest()
{
DeserializeValue(1, "1");
DeserializeValue(1.1f, "1.1");
DeserializeValue(1.2, "1.2");
DeserializeValue(true, "true");
DeserializeValue(false, "false");
DeserializeValue("ascii", "\"ascii\"");
DeserializeValue(new[] { 1 }, "[1]");
DeserializeValue(new[] { 1.1f }, "[1.1]");
DeserializeValue(new[] { 1.2 }, "[1.2]");
DeserializeValue(new[] { true, false }, "[true,false]");
DeserializeValue(new[] { "ascii" }, "[\"ascii\"]");
DeserializeValue(new List<int> { 1 }, "[1]");
//DeserializeValue(new object[] { null, 1, "a" }, "[null,1,\"a\"]");
DeserializeValue(new Dictionary<string, object> { }, "{}");
DeserializeValue(new Dictionary<string, object> { { "a", 1 } }, "{\"a\":1}");
DeserializeValue(new Dictionary<string, object> { { "a",
new Dictionary<string, object>{
} } }, "{\"a\":{}}");
DeserializeValue(new Point { X = 1 }, "{\"X\":1,\"Y\":0}");
DeserializeValue(HogeFuga.Fuga, "1");
DeserializeValue(new EnumTest(), "{\"EnumDefault\":0,\"EnumAsInt\":0,\"EnumAsString\":\"Hoge\",\"EnumAsLowerString\":\"hoge\"}");
}
#endregion
}
}
#pragma warning disable 0649
using System;
using NUnit.Framework;
using System.Collections.Generic;
namespace UniJSON
{
public class JsonSerializerTests
{
struct Point
{
public float X;
public float Y;
public float[] Vector;
public override string ToString()
{
return string.Format("{{X={0}, Y={1}, {2}}}", X, Y, Vector);
}
}
enum HogeFuga
{
Hoge,
Fuga,
}
struct EnumTest
{
public HogeFuga EnumDefault;
[JsonSchema(EnumSerializationType =EnumSerializationType.AsInt)]
public HogeFuga EnumAsInt;
[JsonSchema(EnumSerializationType = EnumSerializationType.AsString)]
public HogeFuga EnumAsString;
[JsonSchema(EnumSerializationType = EnumSerializationType.AsLowerString)]
public HogeFuga EnumAsLowerString;
}
#region Serializer
static void SerializeValue<T>(T value, string json)
{
var b = new BytesStore();
var f = new JsonFormatter(b);
f.Serialize(value);
Assert.AreEqual(json, new Utf8String(b.Bytes).ToString());
}
[Test]
public void JsonSerializerTest()
{
SerializeValue(1, "1");
SerializeValue(1.1f, "1.1");
SerializeValue(1.2, "1.2");
SerializeValue(Double.NaN, "NaN");
SerializeValue(Double.PositiveInfinity, "Infinity");
SerializeValue(Double.NegativeInfinity, "-Infinity");
SerializeValue(true, "true");
SerializeValue(false, "false");
SerializeValue("ascii", "\"ascii\"");
SerializeValue(new[] { 1 }, "[1]");
SerializeValue(new[] { 1.1f }, "[1.1]");
SerializeValue(new[] { 1.2 }, "[1.2]");
SerializeValue(new[] { true, false }, "[true,false]");
SerializeValue(new[] { "ascii" }, "[\"ascii\"]");
SerializeValue(new List<int> { 1 }, "[1]");
//SerializeValue(new object[] { null, 1, "a" }, "[null,1,\"a\"]");
SerializeValue(new Dictionary<string, object> { }, "{}");
SerializeValue(new Dictionary<string, object> { { "a", 1 } }, "{\"a\":1}");
SerializeValue(new Dictionary<string, object> { { "a",
new Dictionary<string, object>{
} } }, "{\"a\":{}}");
SerializeValue(new Point { X = 1 }, "{\"X\":1,\"Y\":0}");
SerializeValue(HogeFuga.Fuga, "1");
SerializeValue(new EnumTest(), "{\"EnumDefault\":0,\"EnumAsInt\":0,\"EnumAsString\":\"Hoge\",\"EnumAsLowerString\":\"hoge\"}");
}
[Test]
public void KeyValue()
{
var p = new Point
{
X = 1,
Vector = new float[] { 1, 2, 3 }
};
var f = new JsonFormatter();
f.BeginMap();
f.KeyValue(() => p.Vector);
f.EndMap();
var json = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
Assert.AreEqual(1, json.GetObjectCount());
Assert.AreEqual(1, json["Vector"][0].GetInt32());
}
#endregion
#region Deserialize
static void DeserializeValue<T>(T value, string json)
{
var parsed = JsonParser.Parse(json);
var t = default(T);
parsed.Deserialize(ref t);
Assert.AreEqual(value, t);
}
[Test]
public void JsonDeserializerTest()
{
DeserializeValue(1, "1");
DeserializeValue(1.1f, "1.1");
DeserializeValue(1.2, "1.2");
DeserializeValue(true, "true");
DeserializeValue(false, "false");
DeserializeValue("ascii", "\"ascii\"");
DeserializeValue(new[] { 1 }, "[1]");
DeserializeValue(new[] { 1.1f }, "[1.1]");
DeserializeValue(new[] { 1.2 }, "[1.2]");
DeserializeValue(new[] { true, false }, "[true,false]");
DeserializeValue(new[] { "ascii" }, "[\"ascii\"]");
DeserializeValue(new List<int> { 1 }, "[1]");
//DeserializeValue(new object[] { null, 1, "a" }, "[null,1,\"a\"]");
DeserializeValue(new Dictionary<string, object> { }, "{}");
DeserializeValue(new Dictionary<string, object> { { "a", 1 } }, "{\"a\":1}");
DeserializeValue(new Dictionary<string, object> { { "a",
new Dictionary<string, object>{
} } }, "{\"a\":{}}");
DeserializeValue(new Point { X = 1 }, "{\"X\":1,\"Y\":0}");
DeserializeValue(HogeFuga.Fuga, "1");
DeserializeValue(new EnumTest(), "{\"EnumDefault\":0,\"EnumAsInt\":0,\"EnumAsString\":\"Hoge\",\"EnumAsLowerString\":\"hoge\"}");
}
#endregion
}
}

View File

@@ -1,41 +1,41 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON
{
public class JsonValueTests
{
// TODO: Add tests for values which have other types
[Test]
public void NaNTest()
{
{
var v = new JsonValue(Utf8String.From("NaN"), ValueNodeType.NaN, -1);
Assert.AreEqual("NaN", v.ToString());
Assert.AreEqual(Double.NaN, v.GetValue<double>());
}
}
[Test]
public void InfinityTest()
{
{
var v = new JsonValue(Utf8String.From("Infinity"), ValueNodeType.Infinity, -1);
Assert.AreEqual("Infinity", v.ToString());
Assert.AreEqual(Double.PositiveInfinity, v.GetValue<double>());
}
}
[Test]
public void MinusInfinityTest()
{
{
var v = new JsonValue(Utf8String.From("-Infinity"), ValueNodeType.MinusInfinity, -1);
Assert.AreEqual("-Infinity", v.ToString());
Assert.AreEqual(Double.NegativeInfinity, v.GetValue<double>());
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON
{
public class JsonValueTests
{
// TODO: Add tests for values which have other types
[Test]
public void NaNTest()
{
{
var v = new JsonValue(Utf8String.From("NaN"), ValueNodeType.NaN, -1);
Assert.AreEqual("NaN", v.ToString());
Assert.AreEqual(Double.NaN, v.GetValue<double>());
}
}
[Test]
public void InfinityTest()
{
{
var v = new JsonValue(Utf8String.From("Infinity"), ValueNodeType.Infinity, -1);
Assert.AreEqual("Infinity", v.ToString());
Assert.AreEqual(Double.PositiveInfinity, v.GetValue<double>());
}
}
[Test]
public void MinusInfinityTest()
{
{
var v = new JsonValue(Utf8String.From("-Infinity"), ValueNodeType.MinusInfinity, -1);
Assert.AreEqual("-Infinity", v.ToString());
Assert.AreEqual(Double.NegativeInfinity, v.GetValue<double>());
}
}
}
}

View File

@@ -1,3 +1,3 @@
fileFormatVersion: 2
guid: 1b0dfab85f59470d8cba21b351fa766b
fileFormatVersion: 2
guid: 1b0dfab85f59470d8cba21b351fa766b
timeCreated: 1545750553

View File

@@ -1,134 +1,134 @@
#pragma warning disable 0649
using NUnit.Framework;
namespace UniJSON
{
public class SchemaTests
{
/// <summary>
/// http://json-schema.org/examples.html
/// </summary>
[JsonSchema(Title="Person")]
public class Person
{
[JsonSchema(Required = true)]
public string firstName;
[JsonSchema(Required = true)]
public string lastName;
[JsonSchema(Description = "Age in years", Minimum = 0)]
public int age;
}
[Test]
public void CreateFromClass()
{
var s = JsonSchema.FromType<Person>();
Assert.AreEqual("Person", s.Title);
var v = s.Validator as JsonObjectValidator;
Assert.AreEqual("Age in years", v.Properties["age"].Description);
Assert.AreEqual(new[] { "firstName", "lastName" }, v.Required);
var f = new JsonFormatter(2);
s.ToJson(f);
var json = f.ToString();
var parsed = JsonParser.Parse(json);
Assert.AreEqual(0, parsed["properties"]["age"]["minimum"].GetInt32());
}
public enum ProjectionType
{
Perspective,
Orthographic
}
class EnumStringTest
{
[JsonSchema(EnumSerializationType =EnumSerializationType.AsLowerString)]
public ProjectionType type;
}
class EnumIntTest
{
[JsonSchema(EnumSerializationType = EnumSerializationType.AsInt)]
public ProjectionType type;
}
[Test]
public void TestEnumAsString()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ ""perspective"" ]
},
{
""enum"": [ ""orthographic"" ]
},
{
""type"": ""string""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumStringTest>();
Assert.AreEqual(fromJson, fromType);
}
[Test]
public void TestEnumAsInt()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ 0 ]
},
{
""enum"": [ 1 ]
},
{
""type"": ""integer""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumIntTest>();
Assert.AreEqual(fromJson, fromType);
}
}
}
#pragma warning disable 0649
using NUnit.Framework;
namespace UniJSON
{
public class SchemaTests
{
/// <summary>
/// http://json-schema.org/examples.html
/// </summary>
[JsonSchema(Title="Person")]
public class Person
{
[JsonSchema(Required = true)]
public string firstName;
[JsonSchema(Required = true)]
public string lastName;
[JsonSchema(Description = "Age in years", Minimum = 0)]
public int age;
}
[Test]
public void CreateFromClass()
{
var s = JsonSchema.FromType<Person>();
Assert.AreEqual("Person", s.Title);
var v = s.Validator as JsonObjectValidator;
Assert.AreEqual("Age in years", v.Properties["age"].Description);
Assert.AreEqual(new[] { "firstName", "lastName" }, v.Required);
var f = new JsonFormatter(2);
s.ToJson(f);
var json = f.ToString();
var parsed = JsonParser.Parse(json);
Assert.AreEqual(0, parsed["properties"]["age"]["minimum"].GetInt32());
}
public enum ProjectionType
{
Perspective,
Orthographic
}
class EnumStringTest
{
[JsonSchema(EnumSerializationType =EnumSerializationType.AsLowerString)]
public ProjectionType type;
}
class EnumIntTest
{
[JsonSchema(EnumSerializationType = EnumSerializationType.AsInt)]
public ProjectionType type;
}
[Test]
public void TestEnumAsString()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ ""perspective"" ]
},
{
""enum"": [ ""orthographic"" ]
},
{
""type"": ""string""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumStringTest>();
Assert.AreEqual(fromJson, fromType);
}
[Test]
public void TestEnumAsInt()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ 0 ]
},
{
""enum"": [ 1 ]
},
{
""type"": ""integer""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumIntTest>();
Assert.AreEqual(fromJson, fromType);
}
}
}

View File

@@ -1,251 +1,251 @@
using NUnit.Framework;
using System.Collections.Generic;
namespace UniJSON
{
public class ValidatorTests
{
[Test]
public void IntValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonIntValidator();
v.Maximum = 0;
Assert.NotNull(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Maximum = 0;
v.ExclusiveMaximum = true;
Assert.NotNull(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Minimum = 0;
Assert.Null(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Minimum = 0;
v.ExclusiveMinimum = true;
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.MultipleOf = 4;
Assert.Null(v.Validate(c, 4));
Assert.NotNull(v.Validate(c, 5));
}
Assert.True(c.IsEmpty());
}
[Test]
public void NumberValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonNumberValidator();
v.Maximum = 0.1;
Assert.NotNull(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0.1));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Maximum = 0.1;
v.ExclusiveMaximum = true;
Assert.NotNull(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0.1));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Minimum = 0.1;
Assert.Null(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0.1));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Minimum = 0.1;
v.ExclusiveMinimum = true;
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0.1));
Assert.NotNull(v.Validate(c, -1));
}
Assert.True(c.IsEmpty());
}
[Test]
public void BoolValidator()
{
// ???
}
[Test]
public void StringValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonStringValidator();
v.MinLength = 1;
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, ""));
}
{
var v = new JsonStringValidator();
v.MaxLength = 1;
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, "ab"));
}
{
var v = new JsonStringValidator();
v.Pattern = new System.Text.RegularExpressions.Regex("abc");
Assert.Null(v.Validate(c, "abc"));
Assert.NotNull(v.Validate(c, "ab"));
}
{
var v = new JsonStringValidator();
v.Pattern = new System.Text.RegularExpressions.Regex("ab+");
Assert.Null(v.Validate(c, "abb"));
Assert.Null(v.Validate(c, "ab"));
Assert.NotNull(v.Validate(c, "a"));
}
Assert.True(c.IsEmpty());
}
[Test]
public void StringEnumValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = JsonStringEnumValidator.Create(new string[] { "a", "b" }, EnumSerializationType.AsString);
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, "c"));
}
Assert.True(c.IsEmpty());
}
[Test]
public void IntEnumValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonIntEnumValidator();
v.Values = new int[] { 1, 2 };
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 3));
}
Assert.True(c.IsEmpty());
}
[Test]
public void ArrayValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonArrayValidator();
v.MaxItems = 1;
Assert.Null(v.Validate(c, new object[] { 0 }));
Assert.NotNull(v.Validate(c, new object[] { 0, 1 }));
}
{
var v = new JsonArrayValidator();
v.MinItems = 1;
Assert.Null(v.Validate(c, new object[] { 0 }));
Assert.NotNull(v.Validate(c, new object[] { }));
}
Assert.True(c.IsEmpty());
}
class Hoge
{
[JsonSchema(Required = true, Minimum = 1)]
public int Value;
}
[Test]
public void ObjectValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<Hoge>();
Assert.Null(s.Validator.Validate(c, new Hoge { Value = 1 }));
Assert.NotNull(s.Validator.Validate(c, new Hoge { Value = 0 }));
}
Assert.True(c.IsEmpty());
}
[Test]
public void DictionaryValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<Dictionary<string, int>>();
Assert.True(s.Validator is JsonDictionaryValidator<int>);
var v = s.Validator as JsonDictionaryValidator<int>;
v.MinProperties = 1;
v.AdditionalProperties = JsonSchema.FromType<int>();
(v.AdditionalProperties.Validator as JsonIntValidator).Minimum = 0;
Assert.Null(s.Validator.Validate(c, new Dictionary<string, int>
{
{"POSITION", 0}
}));
var result = s.Validator.Validate(c, new Dictionary<string, int>
{
{"POSITION", -1}
});
Assert.NotNull(result);
}
Assert.True(c.IsEmpty());
}
class HasDictionary
{
public Dictionary<string, float> primitiveProperties = new Dictionary<string, float>();
// TODO: fix
// public Dictionary<string, Nested> nestedProperties = new Dictionary<string, Nested>();
}
[Test]
public void HasDictionaryObjectValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<HasDictionary>();
Assert.Null(s.Validator.Validate(c, new HasDictionary()));
}
Assert.True(c.IsEmpty());
}
}
}
using NUnit.Framework;
using System.Collections.Generic;
namespace UniJSON
{
public class ValidatorTests
{
[Test]
public void IntValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonIntValidator();
v.Maximum = 0;
Assert.NotNull(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Maximum = 0;
v.ExclusiveMaximum = true;
Assert.NotNull(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Minimum = 0;
Assert.Null(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.Minimum = 0;
v.ExclusiveMinimum = true;
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonIntValidator();
v.MultipleOf = 4;
Assert.Null(v.Validate(c, 4));
Assert.NotNull(v.Validate(c, 5));
}
Assert.True(c.IsEmpty());
}
[Test]
public void NumberValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonNumberValidator();
v.Maximum = 0.1;
Assert.NotNull(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0.1));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Maximum = 0.1;
v.ExclusiveMaximum = true;
Assert.NotNull(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0.1));
Assert.Null(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Minimum = 0.1;
Assert.Null(v.Validate(c, 1));
Assert.Null(v.Validate(c, 0.1));
Assert.NotNull(v.Validate(c, -1));
}
{
var v = new JsonNumberValidator();
v.Minimum = 0.1;
v.ExclusiveMinimum = true;
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 0.1));
Assert.NotNull(v.Validate(c, -1));
}
Assert.True(c.IsEmpty());
}
[Test]
public void BoolValidator()
{
// ???
}
[Test]
public void StringValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonStringValidator();
v.MinLength = 1;
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, ""));
}
{
var v = new JsonStringValidator();
v.MaxLength = 1;
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, "ab"));
}
{
var v = new JsonStringValidator();
v.Pattern = new System.Text.RegularExpressions.Regex("abc");
Assert.Null(v.Validate(c, "abc"));
Assert.NotNull(v.Validate(c, "ab"));
}
{
var v = new JsonStringValidator();
v.Pattern = new System.Text.RegularExpressions.Regex("ab+");
Assert.Null(v.Validate(c, "abb"));
Assert.Null(v.Validate(c, "ab"));
Assert.NotNull(v.Validate(c, "a"));
}
Assert.True(c.IsEmpty());
}
[Test]
public void StringEnumValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = JsonStringEnumValidator.Create(new string[] { "a", "b" }, EnumSerializationType.AsString);
Assert.Null(v.Validate(c, "a"));
Assert.NotNull(v.Validate(c, "c"));
}
Assert.True(c.IsEmpty());
}
[Test]
public void IntEnumValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonIntEnumValidator();
v.Values = new int[] { 1, 2 };
Assert.Null(v.Validate(c, 1));
Assert.NotNull(v.Validate(c, 3));
}
Assert.True(c.IsEmpty());
}
[Test]
public void ArrayValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var v = new JsonArrayValidator();
v.MaxItems = 1;
Assert.Null(v.Validate(c, new object[] { 0 }));
Assert.NotNull(v.Validate(c, new object[] { 0, 1 }));
}
{
var v = new JsonArrayValidator();
v.MinItems = 1;
Assert.Null(v.Validate(c, new object[] { 0 }));
Assert.NotNull(v.Validate(c, new object[] { }));
}
Assert.True(c.IsEmpty());
}
class Hoge
{
[JsonSchema(Required = true, Minimum = 1)]
public int Value;
}
[Test]
public void ObjectValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<Hoge>();
Assert.Null(s.Validator.Validate(c, new Hoge { Value = 1 }));
Assert.NotNull(s.Validator.Validate(c, new Hoge { Value = 0 }));
}
Assert.True(c.IsEmpty());
}
[Test]
public void DictionaryValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<Dictionary<string, int>>();
Assert.True(s.Validator is JsonDictionaryValidator<int>);
var v = s.Validator as JsonDictionaryValidator<int>;
v.MinProperties = 1;
v.AdditionalProperties = JsonSchema.FromType<int>();
(v.AdditionalProperties.Validator as JsonIntValidator).Minimum = 0;
Assert.Null(s.Validator.Validate(c, new Dictionary<string, int>
{
{"POSITION", 0}
}));
var result = s.Validator.Validate(c, new Dictionary<string, int>
{
{"POSITION", -1}
});
Assert.NotNull(result);
}
Assert.True(c.IsEmpty());
}
class HasDictionary
{
public Dictionary<string, float> primitiveProperties = new Dictionary<string, float>();
// TODO: fix
// public Dictionary<string, Nested> nestedProperties = new Dictionary<string, Nested>();
}
[Test]
public void HasDictionaryObjectValidator()
{
var c = new JsonSchemaValidationContext("test");
{
var s = JsonSchema.FromType<HasDictionary>();
Assert.Null(s.Validator.Validate(c, new HasDictionary()));
}
Assert.True(c.IsEmpty());
}
}
}

View File

@@ -1,92 +1,92 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class ArrayTest
{
[Test]
public void fix_array()
{
var f = new MsgPackFormatter();
// Object[] not supported
f.Serialize(new[] { 0, 1, false, (Object)null });
var _bytes = f.GetStoreBytes();
var bytes = _bytes.Array.Skip(_bytes.Offset).Take(_bytes.Count).ToArray();
Assert.AreEqual(new Byte[]{
(Byte)MsgPackType.FIX_ARRAY_0x4,
(Byte)MsgPackType.POSITIVE_FIXNUM,
(Byte)MsgPackType.POSITIVE_FIXNUM_0x01,
(Byte)MsgPackType.FALSE,
(Byte)MsgPackType.NIL
}, bytes);
var parsed = MsgPackParser.Parse(bytes);
Assert.AreEqual(4, parsed.GetArrayCount());
Assert.AreEqual(0, parsed[0].GetValue());
Assert.AreEqual(1, parsed[1].GetValue());
Assert.False((Boolean)parsed[2].GetValue());
Assert.AreEqual(null, parsed[3].GetValue());
}
[Test]
public void array16()
{
var f = new MsgPackFormatter();
var data = Enumerable.Range(0, 20).Select(x => (Object)x).ToArray();
f.Serialize(data);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
Assert.IsTrue(value.IsArray());
Assert.AreEqual(20, value.GetArrayCount());
for (int i = 0; i < 20; ++i)
{
Assert.AreEqual(i, value[i].GetValue());
}
}
[Test]
public void array129()
{
{
var i128 = Enumerable.Range(0, 128).ToArray();
var f = new MsgPackFormatter();
f.Serialize(i128);
var bytes128 = f.GetStoreBytes();
var deserialized = MsgPackParser.Parse(bytes128);
Assert.AreEqual(128, deserialized.GetArrayCount());
for (int i = 0; i < i128.Length; ++i)
{
Assert.AreEqual(i128[i], deserialized[i].GetValue());
}
}
{
var i129 = Enumerable.Range(0, 129).ToArray();
var f = new MsgPackFormatter();
f.Serialize(i129);
var bytes129 = f.GetStoreBytes();
var deserialized = MsgPackParser.Parse(bytes129);
Assert.AreEqual(129, deserialized.GetArrayCount());
for (int i = 0; i < i129.Length; ++i)
{
Assert.AreEqual(i129[i], deserialized[i].GetValue());
}
}
}
[Test]
public void ReadTest()
{
var data = new int[] { -108, 0, 1, -90, 108, 111, 103, 103, 101, 114, -110, -91, 69, 114, 114, 111, 114, -94, 101, 50 }
.Select(x => (Byte)x).ToArray();
var parsed = MsgPackParser.Parse(data);
Assert.True(parsed.IsArray());
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class ArrayTest
{
[Test]
public void fix_array()
{
var f = new MsgPackFormatter();
// Object[] not supported
f.Serialize(new[] { 0, 1, false, (Object)null });
var _bytes = f.GetStoreBytes();
var bytes = _bytes.Array.Skip(_bytes.Offset).Take(_bytes.Count).ToArray();
Assert.AreEqual(new Byte[]{
(Byte)MsgPackType.FIX_ARRAY_0x4,
(Byte)MsgPackType.POSITIVE_FIXNUM,
(Byte)MsgPackType.POSITIVE_FIXNUM_0x01,
(Byte)MsgPackType.FALSE,
(Byte)MsgPackType.NIL
}, bytes);
var parsed = MsgPackParser.Parse(bytes);
Assert.AreEqual(4, parsed.GetArrayCount());
Assert.AreEqual(0, parsed[0].GetValue());
Assert.AreEqual(1, parsed[1].GetValue());
Assert.False((Boolean)parsed[2].GetValue());
Assert.AreEqual(null, parsed[3].GetValue());
}
[Test]
public void array16()
{
var f = new MsgPackFormatter();
var data = Enumerable.Range(0, 20).Select(x => (Object)x).ToArray();
f.Serialize(data);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
Assert.IsTrue(value.IsArray());
Assert.AreEqual(20, value.GetArrayCount());
for (int i = 0; i < 20; ++i)
{
Assert.AreEqual(i, value[i].GetValue());
}
}
[Test]
public void array129()
{
{
var i128 = Enumerable.Range(0, 128).ToArray();
var f = new MsgPackFormatter();
f.Serialize(i128);
var bytes128 = f.GetStoreBytes();
var deserialized = MsgPackParser.Parse(bytes128);
Assert.AreEqual(128, deserialized.GetArrayCount());
for (int i = 0; i < i128.Length; ++i)
{
Assert.AreEqual(i128[i], deserialized[i].GetValue());
}
}
{
var i129 = Enumerable.Range(0, 129).ToArray();
var f = new MsgPackFormatter();
f.Serialize(i129);
var bytes129 = f.GetStoreBytes();
var deserialized = MsgPackParser.Parse(bytes129);
Assert.AreEqual(129, deserialized.GetArrayCount());
for (int i = 0; i < i129.Length; ++i)
{
Assert.AreEqual(i129[i], deserialized[i].GetValue());
}
}
}
[Test]
public void ReadTest()
{
var data = new int[] { -108, 0, 1, -90, 108, 111, 103, 103, 101, 114, -110, -91, 69, 114, 114, 111, 114, -94, 101, 50 }
.Select(x => (Byte)x).ToArray();
var parsed = MsgPackParser.Parse(data);
Assert.True(parsed.IsArray());
}
}
}

View File

@@ -1,50 +1,50 @@
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
[TestFixture]
public class BooleanTest
{
[Test]
public void nil()
{
{
var f = new MsgPackFormatter();
f.Null();
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC0 }, bytes.ToEnumerable());
var parsed = MsgPackParser.Parse(bytes);
Assert.True(parsed.IsNull());
}
}
[Test]
public void True()
{
var f = new MsgPackFormatter();
f.Value(true);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC3 }, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
var j = value.GetBoolean();
Assert.AreEqual(true, j);
}
[Test]
public void False()
{
var f = new MsgPackFormatter();
f.Value(false);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC2 }, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
var j = value.GetBoolean();
Assert.AreEqual(false, j);
}
}
}
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
[TestFixture]
public class BooleanTest
{
[Test]
public void nil()
{
{
var f = new MsgPackFormatter();
f.Null();
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC0 }, bytes.ToEnumerable());
var parsed = MsgPackParser.Parse(bytes);
Assert.True(parsed.IsNull());
}
}
[Test]
public void True()
{
var f = new MsgPackFormatter();
f.Value(true);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC3 }, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
var j = value.GetBoolean();
Assert.AreEqual(true, j);
}
[Test]
public void False()
{
var f = new MsgPackFormatter();
f.Value(false);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { 0xC2 }, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
var j = value.GetBoolean();
Assert.AreEqual(false, j);
}
}
}

View File

@@ -1,50 +1,50 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class FloatTest
{
[Test]
public void Float32()
{
var i = 1.1f;
var float_be = new byte[]
{
(Byte)MsgPackType.FLOAT, 0x3f, 0x8c, 0xcc, 0xcd
};
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
var body = value.Value.Bytes;
Assert.AreEqual(float_be, body.ToEnumerable().ToArray());
Assert.AreEqual(i, value.GetValue());
}
[Test]
public void Float64()
{
var i = 1.1;
var double_be = new Byte[]{
(Byte)MsgPackType.DOUBLE, 0x3f, 0xf1, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a,
};
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
var body = value.Value.Bytes;
Assert.AreEqual(double_be, body.ToEnumerable().ToArray());
Assert.AreEqual(i, value.GetValue());
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class FloatTest
{
[Test]
public void Float32()
{
var i = 1.1f;
var float_be = new byte[]
{
(Byte)MsgPackType.FLOAT, 0x3f, 0x8c, 0xcc, 0xcd
};
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
var body = value.Value.Bytes;
Assert.AreEqual(float_be, body.ToEnumerable().ToArray());
Assert.AreEqual(i, value.GetValue());
}
[Test]
public void Float64()
{
var i = 1.1;
var double_be = new Byte[]{
(Byte)MsgPackType.DOUBLE, 0x3f, 0xf1, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a,
};
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
var body = value.Value.Bytes;
Assert.AreEqual(double_be, body.ToEnumerable().ToArray());
Assert.AreEqual(i, value.GetValue());
}
}
}

View File

@@ -1,220 +1,220 @@
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
[TestFixture]
public class IntTest
{
[Test]
public void positive_fixnum()
{
for (Byte i = 0; i < 128; ++i)
{
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { i }, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void negative_fixnum()
{
for (SByte i = -32; i < 0; ++i)
{
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint8()
{
{
Byte i = 0x7F + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x93,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void cast_large_type()
{
{
Byte i = 0x7F + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x93,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint16()
{
{
UInt16 i = 0xFF + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcd, 0x01, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint32()
{
{
UInt32 i = 0xFFFF + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xce, 0x00, 0x01, 0x00, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint64()
{
{
UInt64 i = 0xFFFFFFFF;
i += 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int8()
{
{
SByte i = -64;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd0, 0xc0,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int128Test()
{
int i = 128;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x80,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
[Test]
public void int16()
{
{
Int16 i = -150;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd1, 0xFF, 0x6a
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int32()
{
{
Int32 i = -35000;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd2, 0xff, 0xff, 0x77, 0x48
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int64()
{
{
Int64 i = -2147483650;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
}
}
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
[TestFixture]
public class IntTest
{
[Test]
public void positive_fixnum()
{
for (Byte i = 0; i < 128; ++i)
{
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[] { i }, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void negative_fixnum()
{
for (SByte i = -32; i < 0; ++i)
{
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint8()
{
{
Byte i = 0x7F + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x93,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void cast_large_type()
{
{
Byte i = 0x7F + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x93,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint16()
{
{
UInt16 i = 0xFF + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcd, 0x01, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint32()
{
{
UInt32 i = 0xFFFF + 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xce, 0x00, 0x01, 0x00, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void uint64()
{
{
UInt64 i = 0xFFFFFFFF;
i += 20;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int8()
{
{
SByte i = -64;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd0, 0xc0,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int128Test()
{
int i = 128;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xcc, 0x80,
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
[Test]
public void int16()
{
{
Int16 i = -150;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd1, 0xFF, 0x6a
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int32()
{
{
Int32 i = -35000;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd2, 0xff, 0xff, 0x77, 0x48
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
[Test]
public void int64()
{
{
Int64 i = -2147483650;
var f = new MsgPackFormatter();
f.Value(i);
var bytes = f.GetStoreBytes();
Assert.AreEqual(new Byte[]{
0xd3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe
}, bytes.ToEnumerable());
var j = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(i, j);
}
}
}
}

View File

@@ -1,120 +1,120 @@
using NUnit.Framework;
using System;
using System.IO;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class MapTest
{
[Test]
public void fix_map()
{
var f = new MsgPackFormatter();
f.BeginMap(2);
f.Key("0"); f.Value(1);
f.Key("2"); f.Value(3);
f.EndMap();
var bytes =
f.GetStoreBytes();
;
Assert.AreEqual(new Byte[]{
0x82, // map2
0xa1, 0x30, // "0"
0x01, // 1
0xa1, 0x32, // "2"
0x03 // 3
}, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(2, value.GetObjectCount());
Assert.AreEqual(1, value["0"].GetValue());
Assert.AreEqual(3, value["2"].GetValue());
}
[Test]
public void map16()
{
var w = new MsgPackFormatter();
int size = 18;
w.BeginMap(size);
for (int i = 0; i < size; ++i)
{
w.Value(i.ToString());
w.Value(i + 5);
}
var bytes = w.GetStoreBytes().ToEnumerable().ToArray();
var expected = new Byte[]{
0xde, // map18
0x0, 0x12, // 18
0xa1, 0x30, // "0"
0x5,
0xa1, 0x31, // "1"
0x6,
0xa1, 0x32, // "2"
0x7,
0xa1, 0x33, // "3"
0x8,
0xa1, 0x34, // "4"
0x9,
0xa1, 0x35, // "5"
0xa,
0xa1, 0x36, // "6"
0xb,
0xa1, 0x37, // "7"
0xc,
0xa1, 0x38, // "8"
0xd,
0xa1, 0x39, // "9"
0xe,
0xa2, 0x31, 0x30, // "10"
0xf,
0xa2, 0x31, 0x31, // "11"
0x10,
0xa2, 0x31, 0x32, // "12"
0x11,
0xa2, 0x31, 0x33, // "13"
0x12,
0xa2, 0x31, 0x34, // "14"
0x13,
0xa2, 0x31, 0x35, // "15"
0x14,
0xa2, 0x31, 0x36, // "16"
0x15,
0xa2, 0x31, 0x37, // "17",
0x16
};
Assert.AreEqual(expected, bytes);
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(15, value["10"].GetValue());
}
}
}
using NUnit.Framework;
using System;
using System.IO;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class MapTest
{
[Test]
public void fix_map()
{
var f = new MsgPackFormatter();
f.BeginMap(2);
f.Key("0"); f.Value(1);
f.Key("2"); f.Value(3);
f.EndMap();
var bytes =
f.GetStoreBytes();
;
Assert.AreEqual(new Byte[]{
0x82, // map2
0xa1, 0x30, // "0"
0x01, // 1
0xa1, 0x32, // "2"
0x03 // 3
}, bytes.ToEnumerable());
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(2, value.GetObjectCount());
Assert.AreEqual(1, value["0"].GetValue());
Assert.AreEqual(3, value["2"].GetValue());
}
[Test]
public void map16()
{
var w = new MsgPackFormatter();
int size = 18;
w.BeginMap(size);
for (int i = 0; i < size; ++i)
{
w.Value(i.ToString());
w.Value(i + 5);
}
var bytes = w.GetStoreBytes().ToEnumerable().ToArray();
var expected = new Byte[]{
0xde, // map18
0x0, 0x12, // 18
0xa1, 0x30, // "0"
0x5,
0xa1, 0x31, // "1"
0x6,
0xa1, 0x32, // "2"
0x7,
0xa1, 0x33, // "3"
0x8,
0xa1, 0x34, // "4"
0x9,
0xa1, 0x35, // "5"
0xa,
0xa1, 0x36, // "6"
0xb,
0xa1, 0x37, // "7"
0xc,
0xa1, 0x38, // "8"
0xd,
0xa1, 0x39, // "9"
0xe,
0xa2, 0x31, 0x30, // "10"
0xf,
0xa2, 0x31, 0x31, // "11"
0x10,
0xa2, 0x31, 0x32, // "12"
0x11,
0xa2, 0x31, 0x33, // "13"
0x12,
0xa2, 0x31, 0x34, // "14"
0x13,
0xa2, 0x31, 0x35, // "15"
0x14,
0xa2, 0x31, 0x36, // "16"
0x15,
0xa2, 0x31, 0x37, // "17",
0x16
};
Assert.AreEqual(expected, bytes);
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(15, value["10"].GetValue());
}
}
}

View File

@@ -1,34 +1,34 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class RawTest
{
[Test]
public void fix_raw()
{
var src = new Byte[] { 0, 1, 2 };
var f = new MsgPackFormatter();
f.Value(src);
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).Value.GetBody();
Assert.True(src.SequenceEqual(v.ToEnumerable()));
}
[Test]
public void raw16()
{
var src = Enumerable.Range(0, 50).Select(x => (Byte)x).ToArray();
var f = new MsgPackFormatter();
f.Value(src);
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).Value.GetBody();
Assert.True(src.SequenceEqual(v.ToEnumerable()));
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class RawTest
{
[Test]
public void fix_raw()
{
var src = new Byte[] { 0, 1, 2 };
var f = new MsgPackFormatter();
f.Value(src);
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).Value.GetBody();
Assert.True(src.SequenceEqual(v.ToEnumerable()));
}
[Test]
public void raw16()
{
var src = Enumerable.Range(0, 50).Select(x => (Byte)x).ToArray();
var f = new MsgPackFormatter();
f.Value(src);
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).Value.GetBody();
Assert.True(src.SequenceEqual(v.ToEnumerable()));
}
}
}

View File

@@ -1,36 +1,36 @@
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class StringTest
{
[Test]
public void str()
{
var f = new MsgPackFormatter();
f.Value("文字列");
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual("文字列", v);
}
[Test]
public void fix_str()
{
for (int i = 1; i < 32; ++i)
{
var str = String.Join("", Enumerable.Range(0, i).Select(_ => "0").ToArray());
var f = new MsgPackFormatter();
f.Value(str);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(i, ((String)value.GetValue()).Length);
}
}
}
}
using NUnit.Framework;
using System;
using System.Linq;
namespace UniJSON.MsgPack
{
[TestFixture]
public class StringTest
{
[Test]
public void str()
{
var f = new MsgPackFormatter();
f.Value("文字列");
var bytes = f.GetStoreBytes();
var v = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual("文字列", v);
}
[Test]
public void fix_str()
{
for (int i = 1; i < 32; ++i)
{
var str = String.Join("", Enumerable.Range(0, i).Select(_ => "0").ToArray());
var f = new MsgPackFormatter();
f.Value(str);
var bytes = f.GetStoreBytes();
var value = MsgPackParser.Parse(bytes);
Assert.AreEqual(i, ((String)value.GetValue()).Length);
}
}
}
}

View File

@@ -1,50 +1,50 @@
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
public class TimeTests
{
[Test]
public void TimeTest()
{
var f = new MsgPackFormatter();
{
f.GetStore().Clear();
var time = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
f.Value(time);
var bytes = f.GetStoreBytes().ArrayOrCopy();
unchecked
{
Assert.AreEqual(new byte[]
{
(byte)MsgPackType.FIX_EXT_4, (byte)-1, 0, 0, 0, 0
}, bytes);
}
var parsed = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(time, parsed);
}
{
var time = new DateTimeOffset(2018, 12, 8, 2, 12, 15, TimeSpan.Zero);
Assert.AreEqual(1544235135, time.ToUnixTimeSeconds());
f.GetStore().Clear();
f.Value(time);
var bytes = f.GetStoreBytes().ArrayOrCopy();
var parsed = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(time, parsed);
}
{
f.GetStore().Clear();
Assert.Catch(() =>
{
f.Value(new DateTimeOffset());
});
}
}
}
}
using NUnit.Framework;
using System;
namespace UniJSON.MsgPack
{
public class TimeTests
{
[Test]
public void TimeTest()
{
var f = new MsgPackFormatter();
{
f.GetStore().Clear();
var time = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
f.Value(time);
var bytes = f.GetStoreBytes().ArrayOrCopy();
unchecked
{
Assert.AreEqual(new byte[]
{
(byte)MsgPackType.FIX_EXT_4, (byte)-1, 0, 0, 0, 0
}, bytes);
}
var parsed = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(time, parsed);
}
{
var time = new DateTimeOffset(2018, 12, 8, 2, 12, 15, TimeSpan.Zero);
Assert.AreEqual(1544235135, time.ToUnixTimeSeconds());
f.GetStore().Clear();
f.Value(time);
var bytes = f.GetStoreBytes().ArrayOrCopy();
var parsed = MsgPackParser.Parse(bytes).GetValue();
Assert.AreEqual(time, parsed);
}
{
f.GetStore().Clear();
Assert.Catch(() =>
{
f.Value(new DateTimeOffset());
});
}
}
}
}

View File

@@ -1,98 +1,98 @@
using NUnit.Framework;
using UniJSON.MsgPack;
namespace UniJSON
{
public class RPCTests
{
[Test]
public void JsonRpcRequestTest()
{
var f = new JsonFormatter();
{
f.Clear();
var l = JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"num1\",\"params\":[1]}");
f.Request("num1", 1);
var u = new Utf8String(f.GetStoreBytes());
var r = JsonParser.Parse(u);
Assert.AreEqual(
l,
r);
}
{
f.Clear();
f.Request("num2", 2, true);
Assert.AreEqual(
JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"num2\",\"params\":[2,true]}"),
JsonParser.Parse(new Utf8String(f.GetStoreBytes())));
}
{
f.Clear();
f.Request("num3",
3, true, "abc", false, (string)null, new[] { 1, 2 });
Assert.AreEqual(
JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"num3\",\"params\":[3,true,\"abc\",false,null,[1,2]]}"),
JsonParser.Parse(new Utf8String(f.GetStoreBytes())));
}
}
[Test]
public void JsonRpcDispatcherTest()
{
var dispatcher = new RpcDispatcher<JsonValue>();
var f = new JsonFormatter();
{
f.Clear();
dispatcher.Register("add", (int a, int b) => a + b);
f.Request("add", 1, 2);
var parsed = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
f.Clear();
dispatcher.Call(f, parsed["id"].GetInt32(), parsed["method"].GetString(), parsed["params"]);
var response = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
Assert.AreEqual(3, response["result"].GetInt32());
}
{
string msg = null;
dispatcher.Register("print", (string _msg) => { msg = _msg; });
f.Clear();
f.Request("print", "hoge");
var parsed = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
f.Clear();
dispatcher.Call(f, parsed["id"].GetInt32(), parsed["method"].GetString(), parsed["params"]);
Assert.AreEqual("hoge", msg);
}
}
[Test]
public void MsgPackRpcDispatcherTest()
{
var dispatcher = new RpcDispatcher<MsgPackValue>();
var f = new MsgPackFormatter();
{
f.GetStore().Clear();
dispatcher.Register("add", (int a, int b) => a + b);
f.Request("add", 1, 2);
var request = MsgPackParser.Parse(f.GetStoreBytes());
Assert.AreEqual(4, request.GetArrayCount());
Assert.AreEqual(MsgPackFormatter.REQUEST_TYPE, request[0].GetInt32());
f.GetStore().Clear();
dispatcher.Call(f, request[1].GetInt32(), request[2].GetString(), request[3]);
var response = MsgPackParser.Parse(f.GetStoreBytes());
Assert.AreEqual(4, response.GetArrayCount());
Assert.AreEqual(MsgPackFormatter.RESPONSE_TYPE, response[0].GetInt32());
Assert.True(response[2].IsNull());
Assert.AreEqual(3, response[3].GetInt32());
}
}
}
}
using NUnit.Framework;
using UniJSON.MsgPack;
namespace UniJSON
{
public class RPCTests
{
[Test]
public void JsonRpcRequestTest()
{
var f = new JsonFormatter();
{
f.Clear();
var l = JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"num1\",\"params\":[1]}");
f.Request("num1", 1);
var u = new Utf8String(f.GetStoreBytes());
var r = JsonParser.Parse(u);
Assert.AreEqual(
l,
r);
}
{
f.Clear();
f.Request("num2", 2, true);
Assert.AreEqual(
JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"num2\",\"params\":[2,true]}"),
JsonParser.Parse(new Utf8String(f.GetStoreBytes())));
}
{
f.Clear();
f.Request("num3",
3, true, "abc", false, (string)null, new[] { 1, 2 });
Assert.AreEqual(
JsonParser.Parse("{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"num3\",\"params\":[3,true,\"abc\",false,null,[1,2]]}"),
JsonParser.Parse(new Utf8String(f.GetStoreBytes())));
}
}
[Test]
public void JsonRpcDispatcherTest()
{
var dispatcher = new RpcDispatcher<JsonValue>();
var f = new JsonFormatter();
{
f.Clear();
dispatcher.Register("add", (int a, int b) => a + b);
f.Request("add", 1, 2);
var parsed = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
f.Clear();
dispatcher.Call(f, parsed["id"].GetInt32(), parsed["method"].GetString(), parsed["params"]);
var response = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
Assert.AreEqual(3, response["result"].GetInt32());
}
{
string msg = null;
dispatcher.Register("print", (string _msg) => { msg = _msg; });
f.Clear();
f.Request("print", "hoge");
var parsed = JsonParser.Parse(new Utf8String(f.GetStoreBytes()));
f.Clear();
dispatcher.Call(f, parsed["id"].GetInt32(), parsed["method"].GetString(), parsed["params"]);
Assert.AreEqual("hoge", msg);
}
}
[Test]
public void MsgPackRpcDispatcherTest()
{
var dispatcher = new RpcDispatcher<MsgPackValue>();
var f = new MsgPackFormatter();
{
f.GetStore().Clear();
dispatcher.Register("add", (int a, int b) => a + b);
f.Request("add", 1, 2);
var request = MsgPackParser.Parse(f.GetStoreBytes());
Assert.AreEqual(4, request.GetArrayCount());
Assert.AreEqual(MsgPackFormatter.REQUEST_TYPE, request[0].GetInt32());
f.GetStore().Clear();
dispatcher.Call(f, request[1].GetInt32(), request[2].GetString(), request[3]);
var response = MsgPackParser.Parse(f.GetStoreBytes());
Assert.AreEqual(4, response.GetArrayCount());
Assert.AreEqual(MsgPackFormatter.RESPONSE_TYPE, response[0].GetInt32());
Assert.True(response[2].IsNull());
Assert.AreEqual(3, response[3].GetInt32());
}
}
}
}

View File

@@ -1,128 +1,128 @@
using NUnit.Framework;
/*
namespace UniJSON.Toml
{
class TomlParserTests
{
[Test]
public void BareKeyTests()
{
{
var result = TomlParser.Parse(@"
value = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
}
[Test]
public void DottedKeyTests()
{
{
var result = TomlParser.Parse(@"
value.value2 = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"]["value2"].GetInt32());
}
}
[Test]
public void DuplicatedKey()
{
{
Assert.Catch(() => TomlParser.Parse(@"
value = 1
value = 2
"));
}
}
[Test]
public void QuotedKeyTests()
{
{
var result = TomlParser.Parse(@"
""value"" = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
{
var result = TomlParser.Parse(@"
""[key=value]"" = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
}
[Test]
public void TableTests()
{
{
var result = @"
[table]
value = 1
".ParseAsToml();
Assert.True(result.IsMap());
Assert.AreEqual(1, result["table"]["value"].GetInt32());
}
{
var result = @"
[table.table2]
value = 1
".ParseAsToml();
Assert.True(result.IsMap());
Assert.AreEqual(1, result["table"]["table2"]["value"].GetInt32());
}
}
[Test]
public void TomlExample()
{
var result = @"
# This is a TOML document.
title = ""TOML Example""
[owner]
name = ""Tom Preston-Werner""
dob = 1979 - 05 - 27T07: 32:00 - 08:00 # First class dates
[database]
server = ""192.168.1.1""
ports = [8001, 8001, 8002]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = ""10.0.0.1""
dc = ""eqdc10""
[servers.beta]
ip = ""10.0.0.2""
dc = ""eqdc10""
[clients]
data = [ [""gamma"", ""delta""], [1, 2] ]
# Line breaks are OK when inside arrays
hosts = [
""alpha"",
""omega""
]
".ParseAsToml();
Assert.AreEqual("TOML Example", result["title"].GetString());
}
}
}
*/
using NUnit.Framework;
/*
namespace UniJSON.Toml
{
class TomlParserTests
{
[Test]
public void BareKeyTests()
{
{
var result = TomlParser.Parse(@"
value = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
}
[Test]
public void DottedKeyTests()
{
{
var result = TomlParser.Parse(@"
value.value2 = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"]["value2"].GetInt32());
}
}
[Test]
public void DuplicatedKey()
{
{
Assert.Catch(() => TomlParser.Parse(@"
value = 1
value = 2
"));
}
}
[Test]
public void QuotedKeyTests()
{
{
var result = TomlParser.Parse(@"
""value"" = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
{
var result = TomlParser.Parse(@"
""[key=value]"" = 1
");
Assert.True(result.IsMap());
Assert.AreEqual(1, result["value"].GetInt32());
}
}
[Test]
public void TableTests()
{
{
var result = @"
[table]
value = 1
".ParseAsToml();
Assert.True(result.IsMap());
Assert.AreEqual(1, result["table"]["value"].GetInt32());
}
{
var result = @"
[table.table2]
value = 1
".ParseAsToml();
Assert.True(result.IsMap());
Assert.AreEqual(1, result["table"]["table2"]["value"].GetInt32());
}
}
[Test]
public void TomlExample()
{
var result = @"
# This is a TOML document.
title = ""TOML Example""
[owner]
name = ""Tom Preston-Werner""
dob = 1979 - 05 - 27T07: 32:00 - 08:00 # First class dates
[database]
server = ""192.168.1.1""
ports = [8001, 8001, 8002]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = ""10.0.0.1""
dc = ""eqdc10""
[servers.beta]
ip = ""10.0.0.2""
dc = ""eqdc10""
[clients]
data = [ [""gamma"", ""delta""], [1, 2] ]
# Line breaks are OK when inside arrays
hosts = [
""alpha"",
""omega""
]
".ParseAsToml();
Assert.AreEqual("TOML Example", result["title"].GetString());
}
}
}
*/

View File

@@ -1,129 +1,129 @@
using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace GenericTree
{
/// <summary>
/// Generic tree interface
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
interface ITreeNode<T, U>
where T : ITreeNode<T, U>
{
bool IsValid { get; }
int ValueIndex { get; }
U Value { get; }
bool HasParent { get; }
T Parent { get; }
IEnumerable<T> Children { get; }
}
/// <summary>
/// Item has parent reference by list index
/// </summary>
public interface ITreeItem
{
int ParentIndex { get; }
}
/// <summary>
/// Generic tree implementation
/// </summary>
/// <typeparam name="T"></typeparam>
struct TreeNode<T> : ITreeNode<TreeNode<T>, T>
where T : ITreeItem
{
/// <summary>
/// Whole tree ndoes
/// </summary>
public readonly List<T> Values;
public bool IsValid
{
get
{
return Values != null;
}
}
/// <summary>
/// This node index
/// </summary>
public int ValueIndex
{
get;
private set;
}
public T Value
{
get
{
if (Values == null)
{
return default(T);
}
return Values[ValueIndex];
}
}
public IEnumerable<TreeNode<T>> Children
{
get
{
for (int i = 0; i < Values.Count; ++i)
{
if (Values[i].ParentIndex == ValueIndex)
{
yield return new TreeNode<T>(Values, i);
}
}
}
}
public bool HasParent
{
get
{
return Value.ParentIndex >= 0 && Value.ParentIndex < Values.Count;
}
}
public TreeNode<T> Parent
{
get
{
if (Value.ParentIndex < 0)
{
throw new Exception("this may root node");
}
if (Value.ParentIndex >= Values.Count)
{
throw new IndexOutOfRangeException();
}
return new TreeNode<T>(Values, Value.ParentIndex);
}
}
public TreeNode(List<T> values, int index) : this()
{
Values = values;
ValueIndex = index;
}
}
class TreeTests
{
[Test]
public void TreeTest()
{
}
}
}
using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace GenericTree
{
/// <summary>
/// Generic tree interface
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
interface ITreeNode<T, U>
where T : ITreeNode<T, U>
{
bool IsValid { get; }
int ValueIndex { get; }
U Value { get; }
bool HasParent { get; }
T Parent { get; }
IEnumerable<T> Children { get; }
}
/// <summary>
/// Item has parent reference by list index
/// </summary>
public interface ITreeItem
{
int ParentIndex { get; }
}
/// <summary>
/// Generic tree implementation
/// </summary>
/// <typeparam name="T"></typeparam>
struct TreeNode<T> : ITreeNode<TreeNode<T>, T>
where T : ITreeItem
{
/// <summary>
/// Whole tree ndoes
/// </summary>
public readonly List<T> Values;
public bool IsValid
{
get
{
return Values != null;
}
}
/// <summary>
/// This node index
/// </summary>
public int ValueIndex
{
get;
private set;
}
public T Value
{
get
{
if (Values == null)
{
return default(T);
}
return Values[ValueIndex];
}
}
public IEnumerable<TreeNode<T>> Children
{
get
{
for (int i = 0; i < Values.Count; ++i)
{
if (Values[i].ParentIndex == ValueIndex)
{
yield return new TreeNode<T>(Values, i);
}
}
}
}
public bool HasParent
{
get
{
return Value.ParentIndex >= 0 && Value.ParentIndex < Values.Count;
}
}
public TreeNode<T> Parent
{
get
{
if (Value.ParentIndex < 0)
{
throw new Exception("this may root node");
}
if (Value.ParentIndex >= Values.Count)
{
throw new IndexOutOfRangeException();
}
return new TreeNode<T>(Values, Value.ParentIndex);
}
}
public TreeNode(List<T> values, int index) : this()
{
Values = values;
ValueIndex = index;
}
}
class TreeTests
{
[Test]
public void TreeTest()
{
}
}
}

View File

@@ -1,168 +1,168 @@
using NUnit.Framework;
using System.Linq;
namespace UniJSON
{
public class Utf8StringTests
{
[Test]
public void Utf8StringTest()
{
var abc = Utf8String.From("abc");
var ab = Utf8String.From("ab");
var bc = Utf8String.From("bc");
Assert.True(abc.StartsWith(ab));
Assert.False(ab.StartsWith(abc));
Assert.True(abc.EndsWith(bc));
Assert.False(bc.EndsWith(abc));
Assert.AreEqual(Utf8String.From("abbc"), ab.Concat(bc));
Assert.AreEqual(2, abc.IndexOf((byte)'c'));
int pos;
abc.TrySearchAscii((byte)'c', 0, out pos);
Assert.AreEqual(2, pos);
abc.TrySearchAscii((byte)'c', 1, out pos);
Assert.AreEqual(2, pos);
}
[Test]
public void ShortUtf8Test()
{
var a0 = Utf8String4.Create("a");
Assert.AreEqual("a", a0);
var a1 = Utf8String4.Create(new byte[] { (byte)'a', 0x00 });
Assert.AreEqual(a0, a1);
var a2 = Utf8String4.Create("");
Assert.AreEqual(3, a2.ByteLength);
}
[Test]
public void QuoteTest()
{
{
var value = Utf8String.From("ho日本語ge");
var quoted = Utf8String.From("\"ho日本語ge\"");
Assert.AreEqual(quoted, JsonString.Quote(value));
Assert.AreEqual(value, JsonString.Unquote(quoted));
}
{
var value = Utf8String.From("fuga\n ho日本語ge");
var quoted = Utf8String.From("\"fuga\\n ho日本語ge\"");
Assert.AreEqual(quoted, JsonString.Quote(value));
Assert.AreEqual(value, JsonString.Unquote(quoted));
}
}
[Test]
public void SplitTest()
{
{
var value = Utf8String.From("a//c");
var splited = value.Split((byte)'/').ToArray();
Assert.AreEqual(3, splited.Length);
Assert.AreEqual(splited[0], Utf8String.From("a"));
Assert.AreEqual(splited[1], Utf8String.From(""));
Assert.AreEqual(splited[2], Utf8String.From("c"));
}
{
var value = Utf8String.From("/a//c/");
var splited = value.Split((byte)'/').ToArray();
Assert.AreEqual(4, splited.Length);
Assert.AreEqual(splited[0], Utf8String.From(""));
Assert.AreEqual(splited[1], Utf8String.From("a"));
Assert.AreEqual(splited[2], Utf8String.From(""));
Assert.AreEqual(splited[3], Utf8String.From("c"));
}
}
[Test]
public void SplitIntegerTest()
{
Assert.AreEqual("1", Utf8String.From("1 ").SplitInteger().ToString());
Assert.AreEqual("123", Utf8String.From("123").SplitInteger().ToString());
Assert.Catch(() => Utf8String.From(" 1").SplitInteger());
Assert.AreEqual("+12", Utf8String.From("+12\n").SplitInteger().ToString());
Assert.AreEqual("-123", Utf8String.From("-123\n").SplitInteger().ToString());
}
[Test]
public void AtoiTest()
{
Assert.AreEqual(1234, Utf8String.From("1234").ToInt32());
}
[Test]
public void ToCharTest()
{
{
// 1byte
var c = 'A';
Assert.AreEqual(1, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// 2byte
var c = '¢';
Assert.AreEqual(2, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// 3byte
var c = '';
Assert.AreEqual(3, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
var c = '仡';
Assert.AreEqual(3, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// emoji
var s = "😃";
Assert.AreEqual(4, Utf8String.From(s).GetFirst().CurrentByteLength);
Assert.AreEqual(0x1F603, Utf8String.From(s).GetFirst().Unicode);
Assert.Catch(() =>
{
var a = Utf8String.From(s).GetFirst().Char;
});
}
}
[Test]
public void FromStringTest()
{
var buffer = new byte[12];
{
var src = "abc";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(3, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
{
var src = "¢";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(2, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
{
var src = "";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(3, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
}
}
}
using NUnit.Framework;
using System.Linq;
namespace UniJSON
{
public class Utf8StringTests
{
[Test]
public void Utf8StringTest()
{
var abc = Utf8String.From("abc");
var ab = Utf8String.From("ab");
var bc = Utf8String.From("bc");
Assert.True(abc.StartsWith(ab));
Assert.False(ab.StartsWith(abc));
Assert.True(abc.EndsWith(bc));
Assert.False(bc.EndsWith(abc));
Assert.AreEqual(Utf8String.From("abbc"), ab.Concat(bc));
Assert.AreEqual(2, abc.IndexOf((byte)'c'));
int pos;
abc.TrySearchAscii((byte)'c', 0, out pos);
Assert.AreEqual(2, pos);
abc.TrySearchAscii((byte)'c', 1, out pos);
Assert.AreEqual(2, pos);
}
[Test]
public void ShortUtf8Test()
{
var a0 = Utf8String4.Create("a");
Assert.AreEqual("a", a0);
var a1 = Utf8String4.Create(new byte[] { (byte)'a', 0x00 });
Assert.AreEqual(a0, a1);
var a2 = Utf8String4.Create("");
Assert.AreEqual(3, a2.ByteLength);
}
[Test]
public void QuoteTest()
{
{
var value = Utf8String.From("ho日本語ge");
var quoted = Utf8String.From("\"ho日本語ge\"");
Assert.AreEqual(quoted, JsonString.Quote(value));
Assert.AreEqual(value, JsonString.Unquote(quoted));
}
{
var value = Utf8String.From("fuga\n ho日本語ge");
var quoted = Utf8String.From("\"fuga\\n ho日本語ge\"");
Assert.AreEqual(quoted, JsonString.Quote(value));
Assert.AreEqual(value, JsonString.Unquote(quoted));
}
}
[Test]
public void SplitTest()
{
{
var value = Utf8String.From("a//c");
var splited = value.Split((byte)'/').ToArray();
Assert.AreEqual(3, splited.Length);
Assert.AreEqual(splited[0], Utf8String.From("a"));
Assert.AreEqual(splited[1], Utf8String.From(""));
Assert.AreEqual(splited[2], Utf8String.From("c"));
}
{
var value = Utf8String.From("/a//c/");
var splited = value.Split((byte)'/').ToArray();
Assert.AreEqual(4, splited.Length);
Assert.AreEqual(splited[0], Utf8String.From(""));
Assert.AreEqual(splited[1], Utf8String.From("a"));
Assert.AreEqual(splited[2], Utf8String.From(""));
Assert.AreEqual(splited[3], Utf8String.From("c"));
}
}
[Test]
public void SplitIntegerTest()
{
Assert.AreEqual("1", Utf8String.From("1 ").SplitInteger().ToString());
Assert.AreEqual("123", Utf8String.From("123").SplitInteger().ToString());
Assert.Catch(() => Utf8String.From(" 1").SplitInteger());
Assert.AreEqual("+12", Utf8String.From("+12\n").SplitInteger().ToString());
Assert.AreEqual("-123", Utf8String.From("-123\n").SplitInteger().ToString());
}
[Test]
public void AtoiTest()
{
Assert.AreEqual(1234, Utf8String.From("1234").ToInt32());
}
[Test]
public void ToCharTest()
{
{
// 1byte
var c = 'A';
Assert.AreEqual(1, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// 2byte
var c = '¢';
Assert.AreEqual(2, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// 3byte
var c = '';
Assert.AreEqual(3, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
var c = '仡';
Assert.AreEqual(3, Utf8String.From(c.ToString()).GetFirst().CurrentByteLength);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Unicode);
Assert.AreEqual(c, Utf8String.From(c.ToString()).GetFirst().Char);
}
{
// emoji
var s = "😃";
Assert.AreEqual(4, Utf8String.From(s).GetFirst().CurrentByteLength);
Assert.AreEqual(0x1F603, Utf8String.From(s).GetFirst().Unicode);
Assert.Catch(() =>
{
var a = Utf8String.From(s).GetFirst().Char;
});
}
}
[Test]
public void FromStringTest()
{
var buffer = new byte[12];
{
var src = "abc";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(3, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
{
var src = "¢";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(2, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
{
var src = "";
var utf8 = Utf8String.From(src, buffer);
Assert.AreEqual(3, utf8.ByteLength);
Assert.AreEqual(src, utf8.ToString());
}
}
}
}

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>

View File

@@ -1,16 +1,16 @@
using System.IO;
using System.Text;
#if UNIJSON_PROFILING
namespace UniJSONPRofiling
{
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText(args[0], Encoding.UTF8);
var parsed = UniJSON.JsonParser.Parse(json);
}
}
}
using System.IO;
using System.Text;
#if UNIJSON_PROFILING
namespace UniJSONPRofiling
{
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText(args[0], Encoding.UTF8);
var parsed = UniJSON.JsonParser.Parse(json);
}
}
}
#endif

View File

@@ -1,36 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
[assembly: AssemblyTitle("UniJSONPRofiling")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UniJSONPRofiling")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
// その型の ComVisible 属性を true に設定してください。
[assembly: ComVisible(false)]
// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
[assembly: Guid("59cc2d5e-d4c5-4118-b6db-d6a9d9ba01f1")]
// アセンブリのバージョン情報は次の 4 つの値で構成されています:
//
// メジャー バージョン
// マイナー バージョン
// ビルド番号
// Revision
//
// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
[assembly: AssemblyTitle("UniJSONPRofiling")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UniJSONPRofiling")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
// その型の ComVisible 属性を true に設定してください。
[assembly: ComVisible(false)]
// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
[assembly: Guid("59cc2d5e-d4c5-4118-b6db-d6a9d9ba01f1")]
// アセンブリのバージョン情報は次の 4 つの値で構成されています:
//
// メジャー バージョン
// マイナー バージョン
// ビルド番号
// Revision
//
// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,80 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>UniJSONPRofiling</RootNamespace>
<AssemblyName>UniJSONPRofiling</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;UNIJSON_PROFILING</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\Scripts\**\*.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 および x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>UniJSONPRofiling</RootNamespace>
<AssemblyName>UniJSONPRofiling</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;UNIJSON_PROFILING</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\Scripts\**\*.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 および x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,28 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2042
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniJSONPRofiling", "UniJSONPRofiling.csproj", "{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}"
EndProject
Global
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9524149F-AB76-43F8-8F93-D198D87C95C5}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2042
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniJSONPRofiling", "UniJSONPRofiling.csproj", "{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}"
EndProject
Global
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59CC2D5E-D4C5-4118-B6DB-D6A9D9BA01F1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9524149F-AB76-43F8-8F93-D198D87C95C5}
EndGlobalSection
EndGlobal

View File

@@ -1,20 +1,20 @@
using System;
namespace UniJSON
{
public struct ActionDisposer : IDisposable
{
Action m_action;
public ActionDisposer(Action action)
{
m_action = action;
}
public void Dispose()
{
m_action();
}
}
}
using System;
namespace UniJSON
{
public struct ActionDisposer : IDisposable
{
Action m_action;
public ActionDisposer(Action action)
{
m_action = action;
}
public void Dispose()
{
m_action();
}
}
}

View File

@@ -1,90 +1,90 @@
using System;
namespace UniJSON
{
public class ByteBuffer
{
Byte[] m_buffer;
public ArraySegment<Byte> Bytes
{
get { return new ArraySegment<byte>(m_buffer, 0, Count); }
}
public ByteBuffer()
{
}
public ByteBuffer(Byte[] buffer)
{
m_buffer = buffer;
}
int m_used;
public int Count
{
get { return m_used; }
}
public int Remain
{
get {
if (m_buffer == null) return 0;
return m_buffer.Length - m_used;
}
}
void Ensure(int size)
{
if (m_buffer != null && size < m_buffer.Length - m_used)
{
return;
}
var buffer = new Byte[m_used + size];
if (m_buffer != null && m_used > 0)
{
Buffer.BlockCopy(m_buffer, 0, buffer, 0, m_used);
}
m_buffer = buffer;
}
public void Push(Byte b)
{
Ensure(1);
m_buffer[m_used++] = b;
}
public void Push(Byte[] buffer)
{
Push(new ArraySegment<Byte>(buffer));
}
public void Push(ArraySegment<Byte> buffer)
{
Ensure(buffer.Count);
Buffer.BlockCopy(buffer.Array, buffer.Offset, m_buffer, m_used, buffer.Count);
m_used += buffer.Count;
}
public void Unshift(int size)
{
if (size > m_used)
{
throw new ArgumentException();
}
if (m_used - size < size)
{
Buffer.BlockCopy(m_buffer, m_used, m_buffer, 0, m_used - size);
m_used = m_used - size;
}
else
{
var buffer = new Byte[m_used];
Buffer.BlockCopy(m_buffer, size, buffer, 0, m_used - size);
m_buffer = buffer;
}
}
}
}
using System;
namespace UniJSON
{
public class ByteBuffer
{
Byte[] m_buffer;
public ArraySegment<Byte> Bytes
{
get { return new ArraySegment<byte>(m_buffer, 0, Count); }
}
public ByteBuffer()
{
}
public ByteBuffer(Byte[] buffer)
{
m_buffer = buffer;
}
int m_used;
public int Count
{
get { return m_used; }
}
public int Remain
{
get {
if (m_buffer == null) return 0;
return m_buffer.Length - m_used;
}
}
void Ensure(int size)
{
if (m_buffer != null && size < m_buffer.Length - m_used)
{
return;
}
var buffer = new Byte[m_used + size];
if (m_buffer != null && m_used > 0)
{
Buffer.BlockCopy(m_buffer, 0, buffer, 0, m_used);
}
m_buffer = buffer;
}
public void Push(Byte b)
{
Ensure(1);
m_buffer[m_used++] = b;
}
public void Push(Byte[] buffer)
{
Push(new ArraySegment<Byte>(buffer));
}
public void Push(ArraySegment<Byte> buffer)
{
Ensure(buffer.Count);
Buffer.BlockCopy(buffer.Array, buffer.Offset, m_buffer, m_used, buffer.Count);
m_used += buffer.Count;
}
public void Unshift(int size)
{
if (size > m_used)
{
throw new ArgumentException();
}
if (m_used - size < size)
{
Buffer.BlockCopy(m_buffer, m_used, m_buffer, 0, m_used - size);
m_used = m_used - size;
}
else
{
var buffer = new Byte[m_used];
Buffer.BlockCopy(m_buffer, size, buffer, 0, m_used - size);
m_buffer = buffer;
}
}
}
}

View File

@@ -1,34 +1,34 @@
using System;
namespace UniJSON
{
public class TreeValueException : ArgumentException
{
protected TreeValueException(string msg) : base(msg) { }
}
/// <summary>
///Exception failure
/// </summary>
public class ParserException : TreeValueException
{
public ParserException(string msg) : base(msg) { }
}
/// <summary>
/// Successfully parsed, but fail to getValue
/// </summary>
public class DeserializationException : TreeValueException
{
public DeserializationException(string msg) : base(msg) { }
}
/// <summary>
/// Formatter exception. key value violation
/// </summary>
public class FormatterException : TreeValueException
{
public FormatterException(string msg) : base(msg) { }
}
}
using System;
namespace UniJSON
{
public class TreeValueException : ArgumentException
{
protected TreeValueException(string msg) : base(msg) { }
}
/// <summary>
///Exception failure
/// </summary>
public class ParserException : TreeValueException
{
public ParserException(string msg) : base(msg) { }
}
/// <summary>
/// Successfully parsed, but fail to getValue
/// </summary>
public class DeserializationException : TreeValueException
{
public DeserializationException(string msg) : base(msg) { }
}
/// <summary>
/// Formatter exception. key value violation
/// </summary>
public class FormatterException : TreeValueException
{
public FormatterException(string msg) : base(msg) { }
}
}

View File

@@ -1,85 +1,85 @@
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public static class ArraySegmentExtensions
{
public static T[] ArrayOrCopy<T>(this ArraySegment<T> self)
{
if (self.Array == null || self.Count==0)
{
return new T[] { };
}
else if(self.Offset==0 && self.Count==self.Array.Length)
{
return self.Array;
}
else
{
var array = new T[self.Count];
Array.Copy(self.Array, self.Offset, array, 0, self.Count);
return array;
}
}
public static IEnumerable<T> ToEnumerable<T>(this ArraySegment<T> self)
{
return self.Array.Skip(self.Offset).Take(self.Count);
}
public static void Set<T>(this ArraySegment<T> self, int index, T value)
{
if (index < 0 || index >= self.Count)
{
throw new ArgumentOutOfRangeException();
}
self.Array[self.Offset + index] = value;
}
public static T Get<T>(this ArraySegment<T> self, int index)
{
if (index < 0 || index >= self.Count)
{
throw new ArgumentOutOfRangeException();
}
return self.Array[self.Offset + index];
}
public static ArraySegment<T> Advance<T>(this ArraySegment<T> self, Int32 n)
{
return new ArraySegment<T>(self.Array, self.Offset + n, self.Count - n);
}
public static ArraySegment<T> Take<T>(this ArraySegment<T> self, Int32 n)
{
return new ArraySegment<T>(self.Array, self.Offset, n);
}
public static T[] TakeReversedArray<T>(this ArraySegment<T> self, Int32 n)
{
var array = new T[n];
var x = n - 1;
for (int i = 0; i < n; ++i, --x)
{
array[i] = self.Get(x);
}
return array;
}
public static byte[] Concat(this byte[] lhs, ArraySegment<byte> rhs)
{
return new ArraySegment<byte>(lhs).Concat(rhs);
}
public static byte[] Concat(this ArraySegment<byte> lhs, ArraySegment<byte> rhs)
{
var bytes = new byte[lhs.Count + rhs.Count];
Buffer.BlockCopy(lhs.Array, lhs.Offset, bytes, 0, lhs.Count);
Buffer.BlockCopy(rhs.Array, rhs.Offset, bytes, lhs.Count, rhs.Count);
return bytes;
}
}
}
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public static class ArraySegmentExtensions
{
public static T[] ArrayOrCopy<T>(this ArraySegment<T> self)
{
if (self.Array == null || self.Count==0)
{
return new T[] { };
}
else if(self.Offset==0 && self.Count==self.Array.Length)
{
return self.Array;
}
else
{
var array = new T[self.Count];
Array.Copy(self.Array, self.Offset, array, 0, self.Count);
return array;
}
}
public static IEnumerable<T> ToEnumerable<T>(this ArraySegment<T> self)
{
return self.Array.Skip(self.Offset).Take(self.Count);
}
public static void Set<T>(this ArraySegment<T> self, int index, T value)
{
if (index < 0 || index >= self.Count)
{
throw new ArgumentOutOfRangeException();
}
self.Array[self.Offset + index] = value;
}
public static T Get<T>(this ArraySegment<T> self, int index)
{
if (index < 0 || index >= self.Count)
{
throw new ArgumentOutOfRangeException();
}
return self.Array[self.Offset + index];
}
public static ArraySegment<T> Advance<T>(this ArraySegment<T> self, Int32 n)
{
return new ArraySegment<T>(self.Array, self.Offset + n, self.Count - n);
}
public static ArraySegment<T> Take<T>(this ArraySegment<T> self, Int32 n)
{
return new ArraySegment<T>(self.Array, self.Offset, n);
}
public static T[] TakeReversedArray<T>(this ArraySegment<T> self, Int32 n)
{
var array = new T[n];
var x = n - 1;
for (int i = 0; i < n; ++i, --x)
{
array[i] = self.Get(x);
}
return array;
}
public static byte[] Concat(this byte[] lhs, ArraySegment<byte> rhs)
{
return new ArraySegment<byte>(lhs).Concat(rhs);
}
public static byte[] Concat(this ArraySegment<byte> lhs, ArraySegment<byte> rhs)
{
var bytes = new byte[lhs.Count + rhs.Count];
Buffer.BlockCopy(lhs.Array, lhs.Offset, bytes, 0, lhs.Count);
Buffer.BlockCopy(rhs.Array, rhs.Offset, bytes, lhs.Count, rhs.Count);
return bytes;
}
}
}

View File

@@ -1,60 +1,60 @@
using System;
using System.IO;
namespace UniJSON
{
public static class ByteExtensions
{
public static Byte GetHexDigit(this UInt16 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this UInt32 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this UInt64 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int16 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int32 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int64 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static UInt32 ToUint32(this Single n, Byte[] buffer)
{
if (buffer.Length < 4)
{
throw new ArgumentException();
}
using (var ms = new MemoryStream(buffer))
using (var w = new BinaryWriter(ms))
{
w.Write(n);
}
return BitConverter.ToUInt32(buffer, 0);
}
public static UInt64 ToUint64(this Double n, Byte[] buffer)
{
if (buffer.Length < 8)
{
throw new ArgumentException();
}
using (var ms = new MemoryStream(buffer))
using (var w = new BinaryWriter(ms))
{
w.Write(n);
}
return BitConverter.ToUInt64(buffer, 0);
}
}
}
using System;
using System.IO;
namespace UniJSON
{
public static class ByteExtensions
{
public static Byte GetHexDigit(this UInt16 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this UInt32 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this UInt64 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int16 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int32 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static Byte GetHexDigit(this Int64 n, int index)
{
return (Byte)(n >> 8 * index & 0xff);
}
public static UInt32 ToUint32(this Single n, Byte[] buffer)
{
if (buffer.Length < 4)
{
throw new ArgumentException();
}
using (var ms = new MemoryStream(buffer))
using (var w = new BinaryWriter(ms))
{
w.Write(n);
}
return BitConverter.ToUInt32(buffer, 0);
}
public static UInt64 ToUint64(this Double n, Byte[] buffer)
{
if (buffer.Length < 8)
{
throw new ArgumentException();
}
using (var ms = new MemoryStream(buffer))
using (var w = new BinaryWriter(ms))
{
w.Write(n);
}
return BitConverter.ToUInt64(buffer, 0);
}
}
}

View File

@@ -1,21 +1,21 @@
using System;
namespace UniJSON
{
public static class DateTimeOffsetExtensions
{
public const long TicksPerSecond = 10000000;
public readonly static DateTimeOffset EpocTime = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
#if !NET_4_6 && !NET_STANDARD_2_0
public static long ToUnixTimeSeconds(this DateTimeOffset now)
{
if (now < EpocTime)
{
throw new ArgumentOutOfRangeException();
}
return (now - EpocTime).Ticks / TicksPerSecond;
}
#endif
}
}
using System;
namespace UniJSON
{
public static class DateTimeOffsetExtensions
{
public const long TicksPerSecond = 10000000;
public readonly static DateTimeOffset EpocTime = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
#if !NET_4_6 && !NET_STANDARD_2_0
public static long ToUnixTimeSeconds(this DateTimeOffset now)
{
if (now < EpocTime)
{
throw new ArgumentOutOfRangeException();
}
return (now - EpocTime).Ticks / TicksPerSecond;
}
#endif
}
}

View File

@@ -1,15 +1,15 @@
using System;
namespace UniJSON
{
public static class EnumExtensions
{
public static bool HasFlag(this Enum keys, Enum flag)
{
if (keys.GetType() != flag.GetType())
throw new ArgumentException("Type Mismatch");
return (Convert.ToUInt64(keys) & Convert.ToUInt64(flag)) != 0;
}
}
}
using System;
namespace UniJSON
{
public static class EnumExtensions
{
public static bool HasFlag(this Enum keys, Enum flag)
{
if (keys.GetType() != flag.GetType())
throw new ArgumentException("Type Mismatch");
return (Convert.ToUInt64(keys) & Convert.ToUInt64(flag)) != 0;
}
}
}

View File

@@ -1,52 +1,52 @@
using System;
namespace UniJSON
{
public static class StringExtensions
{
public static ListTreeNode<JsonValue> ParseAsJson(this string json)
{
return JsonParser.Parse(json);
}
public static ListTreeNode<JsonValue> ParseAsJson(this Utf8String json)
{
return JsonParser.Parse(json);
}
public static ListTreeNode<JsonValue> ParseAsJson(this byte[] bytes)
{
return JsonParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<JsonValue> ParseAsJson(this ArraySegment<byte> bytes)
{
return JsonParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<MsgPackValue> ParseAsMsgPack(this byte[] bytes)
{
return MsgPackParser.Parse(bytes);
}
public static ListTreeNode<MsgPackValue> ParseAsMsgPack(this ArraySegment<byte> bytes)
{
return MsgPackParser.Parse(bytes);
}
public static ListTreeNode<TomlValue> ParseAsToml(this string toml)
{
return TomlParser.Parse(toml);
}
public static ListTreeNode<TomlValue> ParseAsToml(this Utf8String toml)
{
return TomlParser.Parse(toml);
}
public static ListTreeNode<TomlValue> ParseAsToml(this byte[] bytes)
{
return TomlParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<TomlValue> ParseAsToml(this ArraySegment<byte> bytes)
{
return TomlParser.Parse(new Utf8String(bytes));
}
}
}
using System;
namespace UniJSON
{
public static class StringExtensions
{
public static ListTreeNode<JsonValue> ParseAsJson(this string json)
{
return JsonParser.Parse(json);
}
public static ListTreeNode<JsonValue> ParseAsJson(this Utf8String json)
{
return JsonParser.Parse(json);
}
public static ListTreeNode<JsonValue> ParseAsJson(this byte[] bytes)
{
return JsonParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<JsonValue> ParseAsJson(this ArraySegment<byte> bytes)
{
return JsonParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<MsgPackValue> ParseAsMsgPack(this byte[] bytes)
{
return MsgPackParser.Parse(bytes);
}
public static ListTreeNode<MsgPackValue> ParseAsMsgPack(this ArraySegment<byte> bytes)
{
return MsgPackParser.Parse(bytes);
}
public static ListTreeNode<TomlValue> ParseAsToml(this string toml)
{
return TomlParser.Parse(toml);
}
public static ListTreeNode<TomlValue> ParseAsToml(this Utf8String toml)
{
return TomlParser.Parse(toml);
}
public static ListTreeNode<TomlValue> ParseAsToml(this byte[] bytes)
{
return TomlParser.Parse(new Utf8String(bytes));
}
public static ListTreeNode<TomlValue> ParseAsToml(this ArraySegment<byte> bytes)
{
return TomlParser.Parse(new Utf8String(bytes));
}
}
}

View File

@@ -1,28 +1,28 @@
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public static class TypeExtensions
{
public static bool GetIsGenericList(this Type t)
{
if (t == null) return false;
return t.IsGenericType
&& (t.GetGenericTypeDefinition() == typeof(List<>));
}
public static bool GetIsGenericDictionary(this Type t)
{
if (t == null) return false;
return t.IsGenericType
&& (t.GetGenericTypeDefinition() == typeof(Dictionary<,>)
&& t.GetGenericArguments().FirstOrDefault() == typeof(string)
);
}
}
}
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public static class TypeExtensions
{
public static bool GetIsGenericList(this Type t)
{
if (t == null) return false;
return t.IsGenericType
&& (t.GetGenericTypeDefinition() == typeof(List<>));
}
public static bool GetIsGenericDictionary(this Type t)
{
if (t == null) return false;
return t.IsGenericType
&& (t.GetGenericTypeDefinition() == typeof(Dictionary<,>)
&& t.GetGenericArguments().FirstOrDefault() == typeof(string)
);
}
}
}

View File

@@ -1,71 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Linq;
using System.Reflection;
namespace UniJSON
{
public static partial class FormatterExtensions
{
public static void Clear(this IFormatter f)
{
f.GetStore().Clear();
}
public static ArraySegment<Byte> GetStoreBytes(this IFormatter f)
{
return f.GetStore().Bytes;
}
public static void Key(this IFormatter f, string x)
{
f.Key(Utf8String.From(x));
}
public static void Value(this IFormatter f, IEnumerable<byte> raw, int count)
{
f.Value(new ArraySegment<byte>(raw.Take(count).ToArray()));
}
public static void Value(this IFormatter f, Byte[] bytes)
{
f.Value(new ArraySegment<Byte>(bytes));
}
public static void Value(this IFormatter f, UnityEngine.Vector3 v)
{
//CommaCheck();
f.BeginMap(3);
f.Key("x"); f.Value(v.x);
f.Key("y"); f.Value(v.y);
f.Key("z"); f.Value(v.z);
f.EndMap();
}
static MethodInfo GetMethod<T>(Expression<Func<T>> expression)
{
var method = typeof(FormatterExtensions).GetMethod("Serialize");
return method.MakeGenericMethod(typeof(T));
}
public static void KeyValue<T>(this IFormatter f, Expression<Func<T>> expression)
{
var func = expression.Compile();
var value = func();
if (value != null)
{
var body = expression.Body as MemberExpression;
if (body == null)
{
body = ((UnaryExpression)expression.Body).Operand as MemberExpression;
}
f.Key(body.Member.Name);
f.Serialize(expression.Compile()());
//var method = GetMethod(expression);
//method.Invoke(this, new object[] { value });
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Linq;
using System.Reflection;
namespace UniJSON
{
public static partial class FormatterExtensions
{
public static void Clear(this IFormatter f)
{
f.GetStore().Clear();
}
public static ArraySegment<Byte> GetStoreBytes(this IFormatter f)
{
return f.GetStore().Bytes;
}
public static void Key(this IFormatter f, string x)
{
f.Key(Utf8String.From(x));
}
public static void Value(this IFormatter f, IEnumerable<byte> raw, int count)
{
f.Value(new ArraySegment<byte>(raw.Take(count).ToArray()));
}
public static void Value(this IFormatter f, Byte[] bytes)
{
f.Value(new ArraySegment<Byte>(bytes));
}
public static void Value(this IFormatter f, UnityEngine.Vector3 v)
{
//CommaCheck();
f.BeginMap(3);
f.Key("x"); f.Value(v.x);
f.Key("y"); f.Value(v.y);
f.Key("z"); f.Value(v.z);
f.EndMap();
}
static MethodInfo GetMethod<T>(Expression<Func<T>> expression)
{
var method = typeof(FormatterExtensions).GetMethod("Serialize");
return method.MakeGenericMethod(typeof(T));
}
public static void KeyValue<T>(this IFormatter f, Expression<Func<T>> expression)
{
var func = expression.Compile();
var value = func();
if (value != null)
{
var body = expression.Body as MemberExpression;
if (body == null)
{
body = ((UnaryExpression)expression.Body).Operand as MemberExpression;
}
f.Key(body.Member.Name);
f.Serialize(expression.Compile()());
//var method = GetMethod(expression);
//method.Invoke(this, new object[] { value });
}
}
}
}

View File

@@ -1,186 +1,186 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace UniJSON
{
public static class FormatterExtensionsSerializer
{
public static void SerializeDictionary(this IFormatter f, IDictionary<string, object> dictionary)
{
f.BeginMap(dictionary.Count);
foreach (var kv in dictionary)
{
f.Key(kv.Key);
f.SerializeObject(kv.Value);
}
f.EndMap();
}
public static void SerializeArray<T>(this IFormatter f, IEnumerable<T> values)
{
f.BeginList(values.Count());
foreach (var value in values)
{
f.Serialize(value);
}
f.EndList();
}
public static void SerializeObjectArray(this IFormatter f, object[] array)
{
f.BeginList(array.Length);
foreach (var x in array)
{
f.SerializeObject(x);
}
f.EndList();
}
public static void SerializeObject(this IFormatter f, object value)
{
if (value == null)
{
f.Null();
}
else
{
typeof(FormatterExtensionsSerializer).GetMethod("Serialize").MakeGenericMethod(value.GetType()).Invoke(null, new object[] { f, value });
}
}
public static void Serialize<T>(this IFormatter f, T arg)
{
if (arg == null)
{
f.Null();
return;
}
GenericSerializer<T>.Serialize(f, arg);
}
public static void SetCustomSerializer<T>(Action<IFormatter, T> serializer)
{
GenericSerializer<T>.Set(serializer);
}
}
static class GenericSerializer<T>
{
delegate void Serializer(IFormatter f, T t);
static Action<IFormatter, T> GetSerializer(Type t)
{
// object
if (typeof(T) == typeof(object) && t.GetType() != typeof(object))
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeObject",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
try
{
// primitive
var mi = typeof(IFormatter).GetMethod("Value", new Type[] { t });
if (mi != null)
{
// premitives
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(self, mi, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
catch (AmbiguousMatchException)
{
// do nothing
}
{
// dictionary
var idictionary = t.GetInterfaces().FirstOrDefault(x =>
x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IDictionary<,>)
&& x.GetGenericArguments()[0] == typeof(string)
);
if (idictionary != null)
{
//var mi = typeof(IFormatter).GetMethod("SerializeDictionary", new Type[] { t });
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeDictionary",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// object[]
if (t == typeof(object[]))
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeObjectArray",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// list
var ienumerable = t.GetInterfaces().FirstOrDefault(x =>
x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IEnumerable<>)
);
if (ienumerable != null)
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeArray",
ienumerable.GetGenericArguments(),
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// reflection
var schema = JsonSchema.FromType<T>();
return (IFormatter f, T value) => schema.Serialize(f, value);
}
//throw new NotImplementedException();
}
static Serializer s_serializer;
public static void Set(Action<IFormatter, T> serializer)
{
s_serializer = new Serializer(serializer);
}
public static void Serialize(IFormatter f, T t)
{
if (s_serializer == null)
{
s_serializer = new Serializer(GetSerializer(typeof(T)));
}
s_serializer(f, t);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace UniJSON
{
public static class FormatterExtensionsSerializer
{
public static void SerializeDictionary(this IFormatter f, IDictionary<string, object> dictionary)
{
f.BeginMap(dictionary.Count);
foreach (var kv in dictionary)
{
f.Key(kv.Key);
f.SerializeObject(kv.Value);
}
f.EndMap();
}
public static void SerializeArray<T>(this IFormatter f, IEnumerable<T> values)
{
f.BeginList(values.Count());
foreach (var value in values)
{
f.Serialize(value);
}
f.EndList();
}
public static void SerializeObjectArray(this IFormatter f, object[] array)
{
f.BeginList(array.Length);
foreach (var x in array)
{
f.SerializeObject(x);
}
f.EndList();
}
public static void SerializeObject(this IFormatter f, object value)
{
if (value == null)
{
f.Null();
}
else
{
typeof(FormatterExtensionsSerializer).GetMethod("Serialize").MakeGenericMethod(value.GetType()).Invoke(null, new object[] { f, value });
}
}
public static void Serialize<T>(this IFormatter f, T arg)
{
if (arg == null)
{
f.Null();
return;
}
GenericSerializer<T>.Serialize(f, arg);
}
public static void SetCustomSerializer<T>(Action<IFormatter, T> serializer)
{
GenericSerializer<T>.Set(serializer);
}
}
static class GenericSerializer<T>
{
delegate void Serializer(IFormatter f, T t);
static Action<IFormatter, T> GetSerializer(Type t)
{
// object
if (typeof(T) == typeof(object) && t.GetType() != typeof(object))
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeObject",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
try
{
// primitive
var mi = typeof(IFormatter).GetMethod("Value", new Type[] { t });
if (mi != null)
{
// premitives
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(self, mi, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
catch (AmbiguousMatchException)
{
// do nothing
}
{
// dictionary
var idictionary = t.GetInterfaces().FirstOrDefault(x =>
x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IDictionary<,>)
&& x.GetGenericArguments()[0] == typeof(string)
);
if (idictionary != null)
{
//var mi = typeof(IFormatter).GetMethod("SerializeDictionary", new Type[] { t });
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeDictionary",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// object[]
if (t == typeof(object[]))
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeObjectArray",
new Type[] { },
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// list
var ienumerable = t.GetInterfaces().FirstOrDefault(x =>
x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IEnumerable<>)
);
if (ienumerable != null)
{
var self = Expression.Parameter(typeof(IFormatter), "f");
var arg = Expression.Parameter(t, "value");
var call = Expression.Call(typeof(FormatterExtensionsSerializer), "SerializeArray",
ienumerable.GetGenericArguments(),
self, arg);
var lambda = Expression.Lambda(call, self, arg);
return (Action<IFormatter, T>)lambda.Compile();
}
}
{
// reflection
var schema = JsonSchema.FromType<T>();
return (IFormatter f, T value) => schema.Serialize(f, value);
}
//throw new NotImplementedException();
}
static Serializer s_serializer;
public static void Set(Action<IFormatter, T> serializer)
{
s_serializer = new Serializer(serializer);
}
public static void Serialize(IFormatter f, T t)
{
if (s_serializer == null)
{
s_serializer = new Serializer(GetSerializer(typeof(T)));
}
s_serializer(f, t);
}
}
}

View File

@@ -1,79 +1,79 @@
using System;
using System.Linq.Expressions;
namespace UniJSON
{
struct GenericCast<S, T>
{
public static T Null()
{
if (typeof(T).IsClass)
{
return default(T);
}
else
{
throw new MsgPackTypeException("can not null");
}
}
delegate T CastFunc(S value);
static CastFunc s_cast;
delegate Func<T> ConstFuncCreator(S value);
static ConstFuncCreator s_const;
public static Func<T> Const(S value)
{
if (s_const == null)
{
s_const = new ConstFuncCreator(GenericCast.CreateConst<S, T>());
}
return s_const(value);
}
public static T Cast(S value)
{
if (s_cast == null)
{
s_cast = new CastFunc(GenericCast.CreateCast<S, T>());
}
return s_cast(value);
}
}
static class GenericCast
{
public static Func<S, T> CreateCast<S, T>()
{
if (typeof(S) == typeof(T))
{
// through
var src = Expression.Parameter(typeof(S), "src");
var lambda = Expression.Lambda(src, src);
return (Func<S, T>)lambda.Compile();
}
else
{
// cast
var src = Expression.Parameter(typeof(S), "src");
var cast = Expression.Convert(src, typeof(T));
var lambda = Expression.Lambda(cast, src);
return (Func<S, T>)lambda.Compile();
}
}
public static Func<S, Func<T>> CreateConst<S, T>()
{
var src = Expression.Parameter(typeof(S), "src");
var convert = Expression.Convert(src, typeof(T));
var lambda = (Func<S, T>)Expression.Lambda(convert, src).Compile();
return s =>
{
var t = lambda(s);
return () => t;
};
}
}
}
using System;
using System.Linq.Expressions;
namespace UniJSON
{
struct GenericCast<S, T>
{
public static T Null()
{
if (typeof(T).IsClass)
{
return default(T);
}
else
{
throw new MsgPackTypeException("can not null");
}
}
delegate T CastFunc(S value);
static CastFunc s_cast;
delegate Func<T> ConstFuncCreator(S value);
static ConstFuncCreator s_const;
public static Func<T> Const(S value)
{
if (s_const == null)
{
s_const = new ConstFuncCreator(GenericCast.CreateConst<S, T>());
}
return s_const(value);
}
public static T Cast(S value)
{
if (s_cast == null)
{
s_cast = new CastFunc(GenericCast.CreateCast<S, T>());
}
return s_cast(value);
}
}
static class GenericCast
{
public static Func<S, T> CreateCast<S, T>()
{
if (typeof(S) == typeof(T))
{
// through
var src = Expression.Parameter(typeof(S), "src");
var lambda = Expression.Lambda(src, src);
return (Func<S, T>)lambda.Compile();
}
else
{
// cast
var src = Expression.Parameter(typeof(S), "src");
var cast = Expression.Convert(src, typeof(T));
var lambda = Expression.Lambda(cast, src);
return (Func<S, T>)lambda.Compile();
}
}
public static Func<S, Func<T>> CreateConst<S, T>()
{
var src = Expression.Parameter(typeof(S), "src");
var convert = Expression.Convert(src, typeof(T));
var lambda = (Func<S, T>)Expression.Lambda(convert, src).Compile();
return s =>
{
var t = lambda(s);
return () => t;
};
}
}
}

View File

@@ -1,53 +1,53 @@
using System.IO;
using System.Text;
namespace UniJSON
{
public interface IFileSystemAccessor
{
string ReadAllText();
string ReadAllText(string relativePath);
IFileSystemAccessor Get(string relativePath);
}
public class FileSystemAccessor : IFileSystemAccessor
{
string m_path;
string m_baseDir;
public FileSystemAccessor(string path)
{
m_path = path;
if (Directory.Exists(path))
{
m_baseDir = path;
}
else
{
m_baseDir = Path.GetDirectoryName(path);
}
}
public override string ToString()
{
return "<" + Path.GetFileName(m_path) + ">";
}
public string ReadAllText()
{
return File.ReadAllText(m_path, Encoding.UTF8);
}
public string ReadAllText(string relativePath)
{
var path = Path.Combine(m_baseDir, relativePath);
return File.ReadAllText(path, Encoding.UTF8);
}
public IFileSystemAccessor Get(string relativePath)
{
var path = Path.Combine(m_baseDir, relativePath);
return new FileSystemAccessor(path);
}
}
}
using System.IO;
using System.Text;
namespace UniJSON
{
public interface IFileSystemAccessor
{
string ReadAllText();
string ReadAllText(string relativePath);
IFileSystemAccessor Get(string relativePath);
}
public class FileSystemAccessor : IFileSystemAccessor
{
string m_path;
string m_baseDir;
public FileSystemAccessor(string path)
{
m_path = path;
if (Directory.Exists(path))
{
m_baseDir = path;
}
else
{
m_baseDir = Path.GetDirectoryName(path);
}
}
public override string ToString()
{
return "<" + Path.GetFileName(m_path) + ">";
}
public string ReadAllText()
{
return File.ReadAllText(m_path, Encoding.UTF8);
}
public string ReadAllText(string relativePath)
{
var path = Path.Combine(m_baseDir, relativePath);
return File.ReadAllText(path, Encoding.UTF8);
}
public IFileSystemAccessor Get(string relativePath)
{
var path = Path.Combine(m_baseDir, relativePath);
return new FileSystemAccessor(path);
}
}
}

View File

@@ -1,109 +1,109 @@
using System;
using System.Net;
using System.Runtime.InteropServices;
namespace UniJSON
{
public static class ByteUnion
{
[StructLayout(LayoutKind.Explicit)]
public struct WordValue
{
[FieldOffset(0)]
public Int16 Signed;
[FieldOffset(0)]
public UInt16 Unsigned;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
public WordValue HostToNetworkOrder() { return new WordValue { Signed = IPAddress.HostToNetworkOrder(Signed) }; }
public static WordValue Create(Int16 value) { return new WordValue { Signed = value }; }
public static WordValue Create(UInt16 value) { return new WordValue { Unsigned = value }; }
}
[StructLayout(LayoutKind.Explicit)]
public struct DWordValue
{
[FieldOffset(0)]
public Int32 Signed;
[FieldOffset(0)]
public UInt32 Unsigned;
[FieldOffset(0)]
public Single Float;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
public DWordValue HostToNetworkOrder() { return new DWordValue { Signed = IPAddress.HostToNetworkOrder(Signed) }; }
public static DWordValue Create(Int32 value) { return new DWordValue { Signed = value }; }
public static DWordValue Create(UInt32 value) { return new DWordValue { Unsigned = value }; }
public static DWordValue Create(Single value) { return new DWordValue { Float = value }; }
}
[StructLayout(LayoutKind.Explicit)]
public struct QWordValue
{
[FieldOffset(0)]
public Int64 Signed;
[FieldOffset(0)]
public UInt64 Unsigned;
[FieldOffset(0)]
public Double Float;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
[FieldOffset(4)]
public byte Byte4;
[FieldOffset(5)]
public byte Byte5;
[FieldOffset(6)]
public byte Byte6;
[FieldOffset(7)]
public byte Byte7;
public QWordValue HostToNetworkOrder()
{
if (BitConverter.IsLittleEndian)
{
return new QWordValue
{
Byte0 = Byte7,
Byte1 = Byte6,
Byte2 = Byte5,
Byte3 = Byte4,
Byte4 = Byte3,
Byte5 = Byte2,
Byte6 = Byte1,
Byte7 = Byte0,
};
}
else
{
return this;
}
}
public static QWordValue Create(Int64 value) { return new QWordValue { Signed = value }; }
public static QWordValue Create(UInt64 value) { return new QWordValue { Unsigned = value }; }
public static QWordValue Create(Double value) { return new QWordValue { Float = value }; }
}
}
}
using System;
using System.Net;
using System.Runtime.InteropServices;
namespace UniJSON
{
public static class ByteUnion
{
[StructLayout(LayoutKind.Explicit)]
public struct WordValue
{
[FieldOffset(0)]
public Int16 Signed;
[FieldOffset(0)]
public UInt16 Unsigned;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
public WordValue HostToNetworkOrder() { return new WordValue { Signed = IPAddress.HostToNetworkOrder(Signed) }; }
public static WordValue Create(Int16 value) { return new WordValue { Signed = value }; }
public static WordValue Create(UInt16 value) { return new WordValue { Unsigned = value }; }
}
[StructLayout(LayoutKind.Explicit)]
public struct DWordValue
{
[FieldOffset(0)]
public Int32 Signed;
[FieldOffset(0)]
public UInt32 Unsigned;
[FieldOffset(0)]
public Single Float;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
public DWordValue HostToNetworkOrder() { return new DWordValue { Signed = IPAddress.HostToNetworkOrder(Signed) }; }
public static DWordValue Create(Int32 value) { return new DWordValue { Signed = value }; }
public static DWordValue Create(UInt32 value) { return new DWordValue { Unsigned = value }; }
public static DWordValue Create(Single value) { return new DWordValue { Float = value }; }
}
[StructLayout(LayoutKind.Explicit)]
public struct QWordValue
{
[FieldOffset(0)]
public Int64 Signed;
[FieldOffset(0)]
public UInt64 Unsigned;
[FieldOffset(0)]
public Double Float;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
[FieldOffset(4)]
public byte Byte4;
[FieldOffset(5)]
public byte Byte5;
[FieldOffset(6)]
public byte Byte6;
[FieldOffset(7)]
public byte Byte7;
public QWordValue HostToNetworkOrder()
{
if (BitConverter.IsLittleEndian)
{
return new QWordValue
{
Byte0 = Byte7,
Byte1 = Byte6,
Byte2 = Byte5,
Byte3 = Byte4,
Byte4 = Byte3,
Byte5 = Byte2,
Byte6 = Byte1,
Byte7 = Byte0,
};
}
else
{
return this;
}
}
public static QWordValue Create(Int64 value) { return new QWordValue { Signed = value }; }
public static QWordValue Create(UInt64 value) { return new QWordValue { Unsigned = value }; }
public static QWordValue Create(Double value) { return new QWordValue { Float = value }; }
}
}
}

View File

@@ -1,288 +1,288 @@
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace UniJSON
{
public class BytesStore : IStore
{
public BytesStore() : this(64)
{ }
public BytesStore(int size) : this(new Byte[size])
{ }
public BytesStore(Byte[] buffer)
{
m_buffer = buffer;
}
Byte[] m_buffer;
void Require(int size)
{
if (m_buffer == null)
{
m_buffer = new Byte[Math.Max(size, 1024)];
return;
}
if (m_pos + size < m_buffer.Length)
{
return;
}
var newSize = Math.Max(m_pos + size, m_buffer.Length * 2);
//Console.WriteLine(newSize);
var old = m_buffer;
m_buffer = new Byte[newSize];
Buffer.BlockCopy(old, 0
, m_buffer, 0, m_pos);
}
int m_pos;
public ArraySegment<byte> Bytes
{
get
{
return new ArraySegment<byte>(m_buffer, 0, m_pos);
}
}
public void Clear()
{
m_pos = 0;
}
char[] m_c = new char[1];
public void Write(char c)
{
if (c <= 0x7F)
{
// ascii
Require(1);
m_buffer[m_pos++] = (Byte)c;
return;
}
Require(3);
m_c[0] = c;
var size = Encoding.UTF8.GetBytes(m_c, 0, 1, m_buffer, m_pos);
m_pos += size;
}
public void Write(string src)
{
var size = Encoding.UTF8.GetByteCount(src);
Require(size);
var byteSize = Encoding.UTF8.GetBytes(src, 0, src.Length
, m_buffer, m_pos);
if (size != byteSize)
{
throw new Exception();
}
m_pos += byteSize;
}
public void Write(ArraySegment<byte> bytes)
{
Require(bytes.Count);
Array.Copy(bytes.Array, bytes.Offset
, m_buffer, m_pos, bytes.Count);
m_pos += bytes.Count;
}
public void Write(sbyte value)
{
Require(Marshal.SizeOf(value));
m_buffer[m_pos++] = (Byte)value;
}
public void Write(byte value)
{
Require(Marshal.SizeOf(value));
m_buffer[m_pos++] = value;
}
#region LittleEndian
public void WriteLittleEndian(short value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
}
public void WriteLittleEndian(int value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(long value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
public void WriteLittleEndian(ushort value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
}
public void WriteLittleEndian(uint value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(ulong value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
public void WriteLittleEndian(float value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(double value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
#endregion
#region BigEndian
public void WriteBigEndian(short value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(int value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(long value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(ushort value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(uint value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(ulong value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(float value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(double value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
#endregion
}
}
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace UniJSON
{
public class BytesStore : IStore
{
public BytesStore() : this(64)
{ }
public BytesStore(int size) : this(new Byte[size])
{ }
public BytesStore(Byte[] buffer)
{
m_buffer = buffer;
}
Byte[] m_buffer;
void Require(int size)
{
if (m_buffer == null)
{
m_buffer = new Byte[Math.Max(size, 1024)];
return;
}
if (m_pos + size < m_buffer.Length)
{
return;
}
var newSize = Math.Max(m_pos + size, m_buffer.Length * 2);
//Console.WriteLine(newSize);
var old = m_buffer;
m_buffer = new Byte[newSize];
Buffer.BlockCopy(old, 0
, m_buffer, 0, m_pos);
}
int m_pos;
public ArraySegment<byte> Bytes
{
get
{
return new ArraySegment<byte>(m_buffer, 0, m_pos);
}
}
public void Clear()
{
m_pos = 0;
}
char[] m_c = new char[1];
public void Write(char c)
{
if (c <= 0x7F)
{
// ascii
Require(1);
m_buffer[m_pos++] = (Byte)c;
return;
}
Require(3);
m_c[0] = c;
var size = Encoding.UTF8.GetBytes(m_c, 0, 1, m_buffer, m_pos);
m_pos += size;
}
public void Write(string src)
{
var size = Encoding.UTF8.GetByteCount(src);
Require(size);
var byteSize = Encoding.UTF8.GetBytes(src, 0, src.Length
, m_buffer, m_pos);
if (size != byteSize)
{
throw new Exception();
}
m_pos += byteSize;
}
public void Write(ArraySegment<byte> bytes)
{
Require(bytes.Count);
Array.Copy(bytes.Array, bytes.Offset
, m_buffer, m_pos, bytes.Count);
m_pos += bytes.Count;
}
public void Write(sbyte value)
{
Require(Marshal.SizeOf(value));
m_buffer[m_pos++] = (Byte)value;
}
public void Write(byte value)
{
Require(Marshal.SizeOf(value));
m_buffer[m_pos++] = value;
}
#region LittleEndian
public void WriteLittleEndian(short value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
}
public void WriteLittleEndian(int value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(long value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
public void WriteLittleEndian(ushort value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
}
public void WriteLittleEndian(uint value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(ulong value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
public void WriteLittleEndian(float value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
}
public void WriteLittleEndian(double value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte0;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte7;
}
#endregion
#region BigEndian
public void WriteBigEndian(short value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(int value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(long value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(ushort value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.WordValue.Create(value);
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(uint value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(ulong value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(float value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.DWordValue.Create(value);
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
public void WriteBigEndian(double value)
{
Require(Marshal.SizeOf(value));
var u = ByteUnion.QWordValue.Create(value);
m_buffer[m_pos++] = u.Byte7;
m_buffer[m_pos++] = u.Byte6;
m_buffer[m_pos++] = u.Byte5;
m_buffer[m_pos++] = u.Byte4;
m_buffer[m_pos++] = u.Byte3;
m_buffer[m_pos++] = u.Byte2;
m_buffer[m_pos++] = u.Byte1;
m_buffer[m_pos++] = u.Byte0;
}
#endregion
}
}

View File

@@ -1,63 +1,63 @@
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public interface IStore
{
void Clear();
ArraySegment<Byte> Bytes { get; }
void Write(Byte value);
void Write(SByte value);
// network
void WriteBigEndian(UInt16 value);
void WriteBigEndian(UInt32 value);
void WriteBigEndian(UInt64 value);
void WriteBigEndian(Int16 value);
void WriteBigEndian(Int32 value);
void WriteBigEndian(Int64 value);
void WriteBigEndian(Single value);
void WriteBigEndian(Double value);
// intel cpu
void WriteLittleEndian(UInt16 value);
void WriteLittleEndian(UInt32 value);
void WriteLittleEndian(UInt64 value);
void WriteLittleEndian(Int16 value);
void WriteLittleEndian(Int32 value);
void WriteLittleEndian(Int64 value);
void WriteLittleEndian(Single value);
void WriteLittleEndian(Double value);
void Write(ArraySegment<Byte> bytes);
void Write(string src);
void Write(char c);
}
public static class IStoreExtensions
{
public static void WriteValues(this IStore s, params Byte[] bytes)
{
s.Write(new ArraySegment<Byte>(bytes));
}
public static void Write(this IStore s, Byte[] bytes)
{
s.Write(new ArraySegment<Byte>(bytes));
}
public static void Write(this IStore s, IEnumerable<Byte> bytes)
{
s.Write(new ArraySegment<Byte>(bytes.ToArray()));
}
public static Utf8String ToUtf8String(this IStore s)
{
return new Utf8String(s.Bytes);
}
}
}
using System;
using System.Linq;
using System.Collections.Generic;
namespace UniJSON
{
public interface IStore
{
void Clear();
ArraySegment<Byte> Bytes { get; }
void Write(Byte value);
void Write(SByte value);
// network
void WriteBigEndian(UInt16 value);
void WriteBigEndian(UInt32 value);
void WriteBigEndian(UInt64 value);
void WriteBigEndian(Int16 value);
void WriteBigEndian(Int32 value);
void WriteBigEndian(Int64 value);
void WriteBigEndian(Single value);
void WriteBigEndian(Double value);
// intel cpu
void WriteLittleEndian(UInt16 value);
void WriteLittleEndian(UInt32 value);
void WriteLittleEndian(UInt64 value);
void WriteLittleEndian(Int16 value);
void WriteLittleEndian(Int32 value);
void WriteLittleEndian(Int64 value);
void WriteLittleEndian(Single value);
void WriteLittleEndian(Double value);
void Write(ArraySegment<Byte> bytes);
void Write(string src);
void Write(char c);
}
public static class IStoreExtensions
{
public static void WriteValues(this IStore s, params Byte[] bytes)
{
s.Write(new ArraySegment<Byte>(bytes));
}
public static void Write(this IStore s, Byte[] bytes)
{
s.Write(new ArraySegment<Byte>(bytes));
}
public static void Write(this IStore s, IEnumerable<Byte> bytes)
{
s.Write(new ArraySegment<Byte>(bytes.ToArray()));
}
public static Utf8String ToUtf8String(this IStore s)
{
return new Utf8String(s.Bytes);
}
}
}

Some files were not shown because too many files have changed in this diff Show More