// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // @dart=2.9 import 'dart:math'; import 'dart:convert'; class JsonRoundTripBenchmark { void run() { final res = json.decode(jsonData); final out = json.encode(res); if (out[0] != jsonData[0]) { throw 'json conversion error'; } } } // Builds around 4.5 MB of json data - big enough so the decoded object graph // does not fit into new space. final String jsonData = () { final rnd = Random(42); dynamic buildTree(int depth) { final int coin = rnd.nextInt(1000); if (depth == 0) { if (coin % 2 == 0) return coin; return 'foo-$coin'; } if (coin % 2 == 0) { final map = {}; final int length = rnd.nextInt(18); for (int i = 0; i < length; ++i) { map['bar-$i'] = buildTree(depth - 1); } return map; } else { final list = []; final int length = rnd.nextInt(18); for (int i = 0; i < length; ++i) { list.add(buildTree(depth - 1)); } return list; } } return json.encode({'data': buildTree(6)}); }();