// Copyright (c) 2013, 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. import 'dart:math'; import 'package:source_maps/src/vlq.dart'; import 'package:test/test.dart'; void main() { test('encode and decode - simple values', () { expect(encodeVlq(1).join(''), 'C'); expect(encodeVlq(2).join(''), 'E'); expect(encodeVlq(3).join(''), 'G'); expect(encodeVlq(100).join(''), 'oG'); expect(decodeVlq('C'.split('').iterator), 1); expect(decodeVlq('E'.split('').iterator), 2); expect(decodeVlq('G'.split('').iterator), 3); expect(decodeVlq('oG'.split('').iterator), 100); }); test('encode and decode', () { for (var i = -10000; i < 10000; i++) { _checkEncodeDecode(i); } }); test('only 32-bit ints allowed', () { var maxInt = (pow(2, 31) as int) - 1; var minInt = -(pow(2, 31) as int); _checkEncodeDecode(maxInt - 1); _checkEncodeDecode(minInt + 1); _checkEncodeDecode(maxInt); _checkEncodeDecode(minInt); expect(encodeVlq(minInt).join(''), 'hgggggE'); expect(decodeVlq('hgggggE'.split('').iterator), minInt); expect(() => encodeVlq(maxInt + 1), throwsA(anything)); expect(() => encodeVlq(maxInt + 2), throwsA(anything)); expect(() => encodeVlq(minInt - 1), throwsA(anything)); expect(() => encodeVlq(minInt - 2), throwsA(anything)); // if we allowed more than 32 bits, these would be the expected encodings // for the large numbers above. expect(() => decodeVlq('ggggggE'.split('').iterator), throwsA(anything)); expect(() => decodeVlq('igggggE'.split('').iterator), throwsA(anything)); expect(() => decodeVlq('jgggggE'.split('').iterator), throwsA(anything)); expect(() => decodeVlq('lgggggE'.split('').iterator), throwsA(anything)); }, // This test uses integers so large they overflow in JS. testOn: 'dart-vm'); } void _checkEncodeDecode(int value) { var encoded = encodeVlq(value); expect(decodeVlq(encoded.iterator), value); expect(decodeVlq(encoded.join('').split('').iterator), value); }