/// <summary> /// Tests the offsets. /// </summary> private static void TestOffsets(Func <Marshaller> getMarsh) { // Corner cases are byte/sbyte/short/ushort max values. foreach (var i in new[] { 1, sbyte.MaxValue, byte.MaxValue, short.MaxValue, ushort.MaxValue }) { foreach (var j in new[] { -1, 0, 1 }) { var arrSize = i + j; var dt = new OffsetTest { Arr = Enumerable.Range(0, arrSize).Select(x => (byte)x).ToArray(), Int = arrSize }; var bytes = getMarsh().Marshal(dt); var res = getMarsh().Unmarshal <OffsetTest>(bytes); var binRes = getMarsh().Unmarshal <IBinaryObject>(bytes, BinaryMode.ForceBinary); var binFieldRes = new OffsetTest { Arr = binRes.GetField <byte[]>("arr"), Int = binRes.GetField <int>("int") }; foreach (var r in new[] { res, binRes.Deserialize <OffsetTest>(), binFieldRes }) { Assert.AreEqual(dt.Arr, r.Arr); Assert.AreEqual(dt.Int, r.Int); } TestSql(dt, getMarsh()); } } }
/// <summary> /// Tests SQL query, which verifies Java side of things. /// </summary> private static void TestSql(OffsetTest dt, Marshaller marsh) { var ignite = marsh.Ignite; if (ignite == null) { return; } var cache = ignite.GetOrCreateCache <int, OffsetTest>( new CacheConfiguration("offs", new QueryEntity(typeof(int), typeof(OffsetTest)))); // Cache operation. cache[1] = dt; Assert.AreEqual(dt.Int, cache[1].Int); Assert.AreEqual(dt.Arr, cache[1].Arr); // SQL: read field on Java side to ensure correct offset handling. var res = cache.QueryFields(new SqlFieldsQuery("select int from OffsetTest")).GetAll()[0][0]; Assert.AreEqual(dt.Int, (int)res); }