// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/physics.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('Friction simulation positive velocity', () {
    final FrictionSimulation friction = FrictionSimulation(0.135, 100.0, 100.0);

    expect(friction.x(0.0), moreOrLessEquals(100.0));
    expect(friction.dx(0.0), moreOrLessEquals(100.0));

    expect(friction.x(0.1), moreOrLessEquals(110.0, epsilon: 1.0));
    expect(friction.x(0.5), moreOrLessEquals(131.0, epsilon: 1.0));
    expect(friction.x(2.0), moreOrLessEquals(149.0, epsilon: 1.0));

    expect(friction.finalX, moreOrLessEquals(149.0, epsilon: 1.0));

    expect(friction.timeAtX(100.0), 0.0);
    expect(friction.timeAtX(friction.x(0.1)), moreOrLessEquals(0.1));
    expect(friction.timeAtX(friction.x(0.5)), moreOrLessEquals(0.5));
    expect(friction.timeAtX(friction.x(2.0)), moreOrLessEquals(2.0));

    expect(friction.timeAtX(-1.0), double.infinity);
    expect(friction.timeAtX(200.0), double.infinity);
  });

  test('Friction simulation negative velocity', () {
    final FrictionSimulation friction = FrictionSimulation(0.135, 100.0, -100.0);

    expect(friction.x(0.0), moreOrLessEquals(100.0));
    expect(friction.dx(0.0), moreOrLessEquals(-100.0));

    expect(friction.x(0.1), moreOrLessEquals(91.0, epsilon: 1.0));
    expect(friction.x(0.5), moreOrLessEquals(68.0, epsilon: 1.0));
    expect(friction.x(2.0), moreOrLessEquals(51.0, epsilon: 1.0));

    expect(friction.finalX, moreOrLessEquals(50, epsilon: 1.0));

    expect(friction.timeAtX(100.0), 0.0);
    expect(friction.timeAtX(friction.x(0.1)), moreOrLessEquals(0.1));
    expect(friction.timeAtX(friction.x(0.5)), moreOrLessEquals(0.5));
    expect(friction.timeAtX(friction.x(2.0)), moreOrLessEquals(2.0));

    expect(friction.timeAtX(101.0), double.infinity);
    expect(friction.timeAtX(40.0), double.infinity);
  });
}
