// Copyright (c) 2015, Google Inc. 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.

library vector_math.test.scalar_list_view_test;

import 'dart:typed_data';

import 'package:test/test.dart';

import 'package:vector_math/vector_math_lists.dart';

void testScalarListViewWithOffset() {
  final list = new ScalarListView(10, 1);
  list[0] = 1.0;
  expect(list[0], equals(1.0));
  expect(list.buffer[0], equals(0.0)); // unset
  expect(list.buffer[1], equals(1.0));
  expect(list.buffer[2], equals(0.0)); // unset
  expect(list.buffer[3], equals(0.0));
  expect(list.buffer[4], equals(0.0));
}

testScalarListView() {
  final buffer = new Float32List(10);
  final list = new ScalarListView.view(buffer, 1, 4);
  expect(list.length, 2);
  list[0] = 1.0;
  list[1] = 4.0;
  expect(buffer[0], equals(0.0));
  expect(buffer[1], equals(1.0));
  expect(buffer[2], equals(0.0));
  expect(buffer[3], equals(0.0));
  expect(buffer[4], equals(0.0));
  expect(buffer[5], equals(4.0));
  expect(buffer[6], equals(0.0));
  expect(buffer[7], equals(0.0));
  expect(buffer[8], equals(0.0));
  expect(buffer[9], equals(0.0));
}

testScalarListViewFromList() {
  List<double> input = new List<double>(3);
  input[0] = 1.0;
  input[1] = 4.0;
  input[2] = 7.0;
  final list = new ScalarListView.fromList(input, 2, 3);
  expect(list.buffer.length, 11);
  expect(list.buffer[0], 0.0);
  expect(list.buffer[1], 0.0);
  expect(list.buffer[2], 1.0);
  expect(list.buffer[3], 0.0);
  expect(list.buffer[4], 0.0);
  expect(list.buffer[5], 4.0);
  expect(list.buffer[6], 0.0);
  expect(list.buffer[7], 0.0);
  expect(list.buffer[8], 7.0);
  expect(list.buffer[9], 0.0);
  expect(list.buffer[10], 0.0);
}

void main() {
  group('ScalarListView', () {
    test('with offset', testScalarListViewWithOffset);
    test('view', testScalarListView);
    test('fromList', testScalarListViewFromList);
  });
}
