enable and fix a number of lints
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..6b149b2
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,83 @@
+include: package:pedantic/analysis_options.yaml
+#analyzer:
+# strong-mode:
+# implicit-casts: false
+linter:
+ rules:
+ #- always_declare_return_types
+ #- annotate_overrides
+ - avoid_empty_else
+ - avoid_function_literals_in_foreach_calls
+ - avoid_init_to_null
+ - avoid_null_checks_in_equality_operators
+ - avoid_relative_lib_imports
+ - avoid_renaming_method_parameters
+ - avoid_return_types_on_setters
+ - avoid_returning_null
+ - avoid_returning_null_for_future
+ - avoid_shadowing_type_parameters
+ - avoid_types_as_parameter_names
+ - avoid_unused_constructor_parameters
+ - await_only_futures
+ - camel_case_types
+ - cancel_subscriptions
+ - comment_references
+ #- constant_identifier_names
+ - control_flow_in_finally
+ - directives_ordering
+ - empty_catches
+ - empty_constructor_bodies
+ - empty_statements
+ - hash_and_equals
+ - implementation_imports
+ - invariant_booleans
+ - iterable_contains_unrelated_type
+ - library_names
+ - library_prefixes
+ - list_remove_unrelated_type
+ - literal_only_boolean_expressions
+ - no_adjacent_strings_in_list
+ - no_duplicate_case_values
+ #- non_constant_identifier_names
+ - null_closures
+ #- omit_local_variable_types
+ #- only_throw_errors
+ - overridden_fields
+ - package_api_docs
+ - package_names
+ - package_prefixed_library_names
+ - prefer_adjacent_string_concatenation
+ - prefer_collection_literals
+ - prefer_conditional_assignment
+ - prefer_const_constructors
+ - prefer_contains
+ - prefer_equal_for_default_values
+ #- prefer_final_fields
+ #- prefer_final_locals
+ - prefer_initializing_formals
+ - prefer_interpolation_to_compose_strings
+ - prefer_is_empty
+ - prefer_is_not_empty
+ #- prefer_single_quotes
+ #- prefer_typing_uninitialized_variables
+ - recursive_getters
+ - slash_for_doc_comments
+ - super_goes_last
+ - test_types_in_equals
+ - throw_in_finally
+ - type_init_formals
+ - unawaited_futures
+ - unnecessary_await_in_return
+ - unnecessary_brace_in_string_interps
+ - unnecessary_const
+ - unnecessary_getters_setters
+ - unnecessary_lambdas
+ - unnecessary_new
+ - unnecessary_null_aware_assignments
+ - unnecessary_parenthesis
+ - unnecessary_statements
+ #- unnecessary_this
+ - unrelated_type_equality_checks
+ - use_function_type_syntax_for_parameters
+ - use_rethrow_when_possible
+ - valid_regexps
diff --git a/example/DeltaBlue.dart b/example/DeltaBlue.dart
index f234f74..3732925 100644
--- a/example/DeltaBlue.dart
+++ b/example/DeltaBlue.dart
@@ -19,25 +19,35 @@
// Translated first from Smalltalk to JavaScript, and finally to
// Dart by Google 2008-2010.
-/**
- * A Dart implementation of the DeltaBlue constraint-solving
- * algorithm, as described in:
- *
- * "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
- * Bjorn N. Freeman-Benson and John Maloney
- * January 1990 Communications of the ACM,
- * also available as University of Washington TR 89-08-06.
- *
- * Beware: this benchmark is written in a grotesque style where
- * the constraint model is built by side-effects from constructors.
- * I've kept it this way to avoid deviating too much from the original
- * implementation.
- */
+/// A Dart implementation of the DeltaBlue constraint-solving
+/// algorithm, as described in:
+///
+/// "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
+/// Bjorn N. Freeman-Benson and John Maloney
+/// January 1990 Communications of the ACM,
+/// also available as University of Washington TR 89-08-06.
+///
+/// Beware: this benchmark is written in a grotesque style where
+/// the constraint model is built by side-effects from constructors.
+/// I've kept it this way to avoid deviating too much from the original
+/// implementation.
import 'package:benchmark_harness/benchmark_harness.dart';
+/// algorithm, as described in:
+///
+/// "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
+/// Bjorn N. Freeman-Benson and John Maloney
+/// January 1990 Communications of the ACM,
+/// also available as University of Washington TR 89-08-06.
+///
+/// Beware: this benchmark is written in a grotesque style where
+/// the constraint model is built by side-effects from constructors.
+/// I've kept it this way to avoid deviating too much from the original
+/// implementation.
+
main() {
- new DeltaBlue().report();
+ const DeltaBlue().report();
}
/// Benchmark class required to report results.
@@ -50,12 +60,10 @@
}
}
-/**
- * Strengths are used to measure the relative importance of constraints.
- * New strengths may be inserted in the strength hierarchy without
- * disrupting current constraints. Strengths cannot be created outside
- * this class, so == can be used for value comparison.
- */
+/// Strengths are used to measure the relative importance of constraints.
+/// New strengths may be inserted in the strength hierarchy without
+/// disrupting current constraints. Strengths cannot be created outside
+/// this class, so == can be used for value comparison.
class Strength {
final int value;
final String name;
@@ -89,13 +97,13 @@
}
// Compile time computed constants.
-const REQUIRED = const Strength(0, "required");
-const STRONG_REFERRED = const Strength(1, "strongPreferred");
-const PREFERRED = const Strength(2, "preferred");
-const STRONG_DEFAULT = const Strength(3, "strongDefault");
-const NORMAL = const Strength(4, "normal");
-const WEAK_DEFAULT = const Strength(5, "weakDefault");
-const WEAKEST = const Strength(6, "weakest");
+const REQUIRED = Strength(0, "required");
+const STRONG_REFERRED = Strength(1, "strongPreferred");
+const PREFERRED = Strength(2, "preferred");
+const STRONG_DEFAULT = Strength(3, "strongDefault");
+const NORMAL = Strength(4, "normal");
+const WEAK_DEFAULT = Strength(5, "weakDefault");
+const WEAKEST = Strength(6, "weakest");
abstract class Constraint {
final Strength strength;
@@ -103,14 +111,23 @@
const Constraint(this.strength);
bool isSatisfied();
+
void markUnsatisfied();
+
void addToGraph();
+
void removeFromGraph();
+
void chooseMethod(int mark);
+
void markInputs(int mark);
+
bool inputsKnown(int mark);
+
Variable output();
+
void execute();
+
void recalculate();
/// Activate this constraint and attempt to satisfy it.
@@ -119,14 +136,12 @@
planner.incrementalAdd(this);
}
- /**
- * Attempt to find a way to enforce this constraint. If successful,
- * record the solution, perhaps modifying the current dataflow
- * graph. Answer the constraint that this constraint overrides, if
- * there is one, or nil, if there isn't.
- * Assume: I am not already satisfied.
- */
- Constraint satisfy(mark) {
+ /// Attempt to find a way to enforce this constraint. If successful,
+ /// record the solution, perhaps modifying the current dataflow
+ /// graph. Answer the constraint that this constraint overrides, if
+ /// there is one, or nil, if there isn't.
+ /// Assume: I am not already satisfied.
+ Constraint satisfy(int mark) {
chooseMethod(mark);
if (!isSatisfied()) {
if (strength == REQUIRED) {
@@ -149,17 +164,13 @@
removeFromGraph();
}
- /**
- * Normal constraints are not input constraints. An input constraint
- * is one that depends on external state, such as the mouse, the
- * keybord, a clock, or some arbitraty piece of imperative code.
- */
+ /// Normal constraints are not input constraints. An input constraint
+ /// is one that depends on external state, such as the mouse, the
+ /// keybord, a clock, or some arbitraty piece of imperative code.
bool isInput() => false;
}
-/**
- * Abstract superclass for constraints having a single possible output variable.
- */
+/// Abstract superclass for constraints having a single possible output variable.
abstract class UnaryConstraint extends Constraint {
final Variable myOutput;
bool satisfied = false;
@@ -190,11 +201,9 @@
/// Returns the current output variable.
Variable output() => myOutput;
- /**
- * Calculate the walkabout strength, the stay flag, and, if it is
- * 'stay', the value for the current output of this constraint. Assume
- * this constraint is satisfied.
- */
+ /// Calculate the walkabout strength, the stay flag, and, if it is
+ /// 'stay', the value for the current output of this constraint. Assume
+ /// this constraint is satisfied.
void recalculate() {
myOutput.walkStrength = strength;
myOutput.stay = !isInput();
@@ -214,12 +223,10 @@
}
}
-/**
- * Variables that should, with some level of preference, stay the same.
- * Planners may exploit the fact that instances, if satisfied, will not
- * change their output during plan execution. This is called "stay
- * optimization".
- */
+/// Variables that should, with some level of preference, stay the same.
+/// Planners may exploit the fact that instances, if satisfied, will not
+/// change their output during plan execution. This is called "stay
+/// optimization".
class StayConstraint extends UnaryConstraint {
StayConstraint(Variable v, Strength str) : super(v, str);
@@ -228,10 +235,8 @@
}
}
-/**
- * A unary input constraint used to mark a variable that the client
- * wishes to change.
- */
+/// A unary input constraint used to mark a variable that the client
+/// wishes to change.
class EditConstraint extends UnaryConstraint {
EditConstraint(Variable v, Strength str) : super(v, str);
@@ -248,10 +253,8 @@
const int FORWARD = 2;
const int BACKWARD = 0;
-/**
- * Abstract superclass for constraints having two possible output
- * variables.
- */
+/// Abstract superclass for constraints having two possible output
+/// variables.
abstract class BinaryConstraint extends Constraint {
Variable v1;
Variable v2;
@@ -261,11 +264,9 @@
addConstraint();
}
- /**
- * Decides if this constraint can be satisfied and which way it
- * should flow based on the relative strength of the variables related,
- * and record that decision.
- */
+ /// Decides if this constraint can be satisfied and which way it
+ /// should flow based on the relative strength of the variables related,
+ /// and record that decision.
void chooseMethod(int mark) {
if (v1.mark == mark) {
direction =
@@ -309,11 +310,9 @@
/// Returns the current output variable.
Variable output() => direction == FORWARD ? v2 : v1;
- /**
- * Calculate the walkabout strength, the stay flag, and, if it is
- * 'stay', the value for the current output of this
- * constraint. Assume this constraint is satisfied.
- */
+ /// Calculate the walkabout strength, the stay flag, and, if it is
+ /// 'stay', the value for the current output of this
+ /// constraint. Assume this constraint is satisfied.
void recalculate() {
Variable ihn = input(), out = output();
out.walkStrength = Strength.weakest(strength, ihn.walkStrength);
@@ -338,12 +337,10 @@
}
}
-/**
- * Relates two variables by the linear scaling relationship: "v2 =
- * (v1 * scale) + offset". Either v1 or v2 may be changed to maintain
- * this relationship but the scale factor and offset are considered
- * read-only.
- */
+/// Relates two variables by the linear scaling relationship: "v2 =
+/// (v1 * scale) + offset". Either v1 or v2 may be changed to maintain
+/// this relationship but the scale factor and offset are considered
+/// read-only.
class ScaleConstraint extends BinaryConstraint {
final Variable scale;
@@ -380,11 +377,9 @@
}
}
- /**
- * Calculate the walkabout strength, the stay flag, and, if it is
- * 'stay', the value for the current output of this constraint. Assume
- * this constraint is satisfied.
- */
+ /// Calculate the walkabout strength, the stay flag, and, if it is
+ /// 'stay', the value for the current output of this constraint. Assume
+ /// this constraint is satisfied.
void recalculate() {
Variable ihn = input(), out = output();
out.walkStrength = Strength.weakest(strength, ihn.walkStrength);
@@ -393,9 +388,7 @@
}
}
-/**
- * Constrains two variables to have the same value.
- */
+/// Constrains two variables to have the same value.
class EqualityConstraint extends BinaryConstraint {
EqualityConstraint(Variable v1, Variable v2, Strength strength)
: super(v1, v2, strength);
@@ -406,12 +399,10 @@
}
}
-/**
- * A constrained variable. In addition to its value, it maintain the
- * structure of the constraint graph, the current dataflow graph, and
- * various parameters of interest to the DeltaBlue incremental
- * constraint solver.
- **/
+/// A constrained variable. In addition to its value, it maintain the
+/// structure of the constraint graph, the current dataflow graph, and
+/// various parameters of interest to the DeltaBlue incremental
+/// constraint solver.
class Variable {
List<Constraint> constraints = <Constraint>[];
Constraint determinedBy;
@@ -423,10 +414,8 @@
Variable(this.name, this.value);
- /**
- * Add the given constraint to the set of all constraints that refer
- * this variable.
- */
+ /// Add the given constraint to the set of all constraints that refer
+ /// this variable.
void addConstraint(Constraint c) {
constraints.add(c);
}
@@ -441,38 +430,36 @@
class Planner {
int currentMark = 0;
- /**
- * Attempt to satisfy the given constraint and, if successful,
- * incrementally update the dataflow graph. Details: If satifying
- * the constraint is successful, it may override a weaker constraint
- * on its output. The algorithm attempts to resatisfy that
- * constraint using some other method. This process is repeated
- * until either a) it reaches a variable that was not previously
- * determined by any constraint or b) it reaches a constraint that
- * is too weak to be satisfied using any of its methods. The
- * variables of constraints that have been processed are marked with
- * a unique mark value so that we know where we've been. This allows
- * the algorithm to avoid getting into an infinite loop even if the
- * constraint graph has an inadvertent cycle.
- */
+ /// Attempt to satisfy the given constraint and, if successful,
+ /// incrementally update the dataflow graph. Details: If satifying
+ /// the constraint is successful, it may override a weaker constraint
+ /// on its output. The algorithm attempts to resatisfy that
+ /// constraint using some other method. This process is repeated
+ /// until either a) it reaches a variable that was not previously
+ /// determined by any constraint or b) it reaches a constraint that
+ /// is too weak to be satisfied using any of its methods. The
+ /// variables of constraints that have been processed are marked with
+ /// a unique mark value so that we know where we've been. This allows
+ /// the algorithm to avoid getting into an infinite loop even if the
+ /// constraint graph has an inadvertent cycle.
void incrementalAdd(Constraint c) {
int mark = newMark();
for (Constraint overridden = c.satisfy(mark);
overridden != null;
- overridden = overridden.satisfy(mark));
+ overridden = overridden.satisfy(mark)) {
+ // NOOP
+ }
}
- /**
- * Entry point for retracting a constraint. Remove the given
- * constraint and incrementally update the dataflow graph.
- * Details: Retracting the given constraint may allow some currently
- * unsatisfiable downstream constraint to be satisfied. We therefore collect
- * a list of unsatisfied downstream constraints and attempt to
- * satisfy each one in turn. This list is traversed by constraint
- * strength, strongest first, as a heuristic for avoiding
- * unnecessarily adding and then overriding weak constraints.
- * Assume: [c] is satisfied.
- */
+ /// Entry point for retracting a constraint. Remove the given
+ /// constraint and incrementally update the dataflow graph.
+ /// Details: Retracting the given constraint may allow some currently
+ /// unsatisfiable downstream constraint to be satisfied. We therefore collect
+ /// a list of unsatisfied downstream constraints and attempt to
+ /// satisfy each one in turn. This list is traversed by constraint
+ /// strength, strongest first, as a heuristic for avoiding
+ /// unnecessarily adding and then overriding weak constraints.
+ /// Assume: [c] is satisfied.
void incrementalRemove(Constraint c) {
Variable out = c.output();
c.markUnsatisfied();
@@ -491,30 +478,28 @@
/// Select a previously unused mark value.
int newMark() => ++currentMark;
- /**
- * Extract a plan for resatisfaction starting from the given source
- * constraints, usually a set of input constraints. This method
- * assumes that stay optimization is desired; the plan will contain
- * only constraints whose output variables are not stay. Constraints
- * that do no computation, such as stay and edit constraints, are
- * not included in the plan.
- * Details: The outputs of a constraint are marked when it is added
- * to the plan under construction. A constraint may be appended to
- * the plan when all its input variables are known. A variable is
- * known if either a) the variable is marked (indicating that has
- * been computed by a constraint appearing earlier in the plan), b)
- * the variable is 'stay' (i.e. it is a constant at plan execution
- * time), or c) the variable is not determined by any
- * constraint. The last provision is for past states of history
- * variables, which are not stay but which are also not computed by
- * any constraint.
- * Assume: [sources] are all satisfied.
- */
+ /// Extract a plan for resatisfaction starting from the given source
+ /// constraints, usually a set of input constraints. This method
+ /// assumes that stay optimization is desired; the plan will contain
+ /// only constraints whose output variables are not stay. Constraints
+ /// that do no computation, such as stay and edit constraints, are
+ /// not included in the plan.
+ /// Details: The outputs of a constraint are marked when it is added
+ /// to the plan under construction. A constraint may be appended to
+ /// the plan when all its input variables are known. A variable is
+ /// known if either a) the variable is marked (indicating that has
+ /// been computed by a constraint appearing earlier in the plan), b)
+ /// the variable is 'stay' (i.e. it is a constant at plan execution
+ /// time), or c) the variable is not determined by any
+ /// constraint. The last provision is for past states of history
+ /// variables, which are not stay but which are also not computed by
+ /// any constraint.
+ /// Assume: [sources] are all satisfied.
Plan makePlan(List<Constraint> sources) {
int mark = newMark();
- Plan plan = new Plan();
+ Plan plan = Plan();
List<Constraint> todo = sources;
- while (todo.length > 0) {
+ while (todo.isNotEmpty) {
Constraint c = todo.removeLast();
if (c.output().mark != mark && c.inputsKnown(mark)) {
plan.addConstraint(c);
@@ -525,10 +510,8 @@
return plan;
}
- /**
- * Extract a plan for resatisfying starting from the output of the
- * given [constraints], usually a set of input constraints.
- */
+ /// Extract a plan for resatisfying starting from the output of the
+ /// given [constraints], usually a set of input constraints.
Plan extractPlanFromConstraints(List<Constraint> constraints) {
List<Constraint> sources = <Constraint>[];
for (int i = 0; i < constraints.length; i++) {
@@ -539,22 +522,20 @@
return makePlan(sources);
}
- /**
- * Recompute the walkabout strengths and stay flags of all variables
- * downstream of the given constraint and recompute the actual
- * values of all variables whose stay flag is true. If a cycle is
- * detected, remove the given constraint and answer
- * false. Otherwise, answer true.
- * Details: Cycles are detected when a marked variable is
- * encountered downstream of the given constraint. The sender is
- * assumed to have marked the inputs of the given constraint with
- * the given mark. Thus, encountering a marked node downstream of
- * the output constraint means that there is a path from the
- * constraint's output to one of its inputs.
- */
+ /// Recompute the walkabout strengths and stay flags of all variables
+ /// downstream of the given constraint and recompute the actual
+ /// values of all variables whose stay flag is true. If a cycle is
+ /// detected, remove the given constraint and answer
+ /// false. Otherwise, answer true.
+ /// Details: Cycles are detected when a marked variable is
+ /// encountered downstream of the given constraint. The sender is
+ /// assumed to have marked the inputs of the given constraint with
+ /// the given mark. Thus, encountering a marked node downstream of
+ /// the output constraint means that there is a path from the
+ /// constraint's output to one of its inputs.
bool addPropagate(Constraint c, int mark) {
List<Constraint> todo = <Constraint>[c];
- while (todo.length > 0) {
+ while (todo.isNotEmpty) {
Constraint d = todo.removeLast();
if (d.output().mark == mark) {
incrementalRemove(c);
@@ -566,18 +547,16 @@
return true;
}
- /**
- * Update the walkabout strengths and stay flags of all variables
- * downstream of the given constraint. Answer a collection of
- * unsatisfied constraints sorted in order of decreasing strength.
- */
+ /// Update the walkabout strengths and stay flags of all variables
+ /// downstream of the given constraint. Answer a collection of
+ /// unsatisfied constraints sorted in order of decreasing strength.
List<Constraint> removePropagateFrom(Variable out) {
out.determinedBy = null;
out.walkStrength = WEAKEST;
out.stay = true;
List<Constraint> unsatisfied = <Constraint>[];
List<Variable> todo = <Variable>[out];
- while (todo.length > 0) {
+ while (todo.isNotEmpty) {
Variable v = todo.removeLast();
for (int i = 0; i < v.constraints.length; i++) {
Constraint c = v.constraints[i];
@@ -604,11 +583,9 @@
}
}
-/**
- * A Plan is an ordered list of constraints to be executed in sequence
- * to resatisfy all currently satisfiable constraints in the face of
- * one or more changing inputs.
- */
+/// A Plan is an ordered list of constraints to be executed in sequence
+/// to resatisfy all currently satisfiable constraints in the face of
+/// one or more changing inputs.
class Plan {
List<Constraint> list = <Constraint>[];
@@ -625,32 +602,30 @@
}
}
-/**
- * This is the standard DeltaBlue benchmark. A long chain of equality
- * constraints is constructed with a stay constraint on one end. An
- * edit constraint is then added to the opposite end and the time is
- * measured for adding and removing this constraint, and extracting
- * and executing a constraint satisfaction plan. There are two cases.
- * In case 1, the added constraint is stronger than the stay
- * constraint and values must propagate down the entire length of the
- * chain. In case 2, the added constraint is weaker than the stay
- * constraint so it cannot be accomodated. The cost in this case is,
- * of course, very low. Typical situations lie somewhere between these
- * two extremes.
- */
+/// This is the standard DeltaBlue benchmark. A long chain of equality
+/// constraints is constructed with a stay constraint on one end. An
+/// edit constraint is then added to the opposite end and the time is
+/// measured for adding and removing this constraint, and extracting
+/// and executing a constraint satisfaction plan. There are two cases.
+/// In case 1, the added constraint is stronger than the stay
+/// constraint and values must propagate down the entire length of the
+/// chain. In case 2, the added constraint is weaker than the stay
+/// constraint so it cannot be accomodated. The cost in this case is,
+/// of course, very low. Typical situations lie somewhere between these
+/// two extremes.
void chainTest(int n) {
- planner = new Planner();
- Variable prev = null, first = null, last = null;
+ planner = Planner();
+ Variable prev, first, last;
// Build chain of n equality constraints.
for (int i = 0; i <= n; i++) {
- Variable v = new Variable("v", 0);
- if (prev != null) new EqualityConstraint(prev, v, REQUIRED);
+ Variable v = Variable("v", 0);
+ if (prev != null) EqualityConstraint(prev, v, REQUIRED);
if (i == 0) first = v;
if (i == n) last = v;
prev = v;
}
- new StayConstraint(last, STRONG_DEFAULT);
- EditConstraint edit = new EditConstraint(first, PREFERRED);
+ StayConstraint(last, STRONG_DEFAULT);
+ EditConstraint edit = EditConstraint(first, PREFERRED);
Plan plan = planner.extractPlanFromConstraints(<Constraint>[edit]);
for (int i = 0; i < 100; i++) {
first.value = i;
@@ -661,25 +636,23 @@
}
}
-/**
- * This test constructs a two sets of variables related to each
- * other by a simple linear transformation (scale and offset). The
- * time is measured to change a variable on either side of the
- * mapping and to change the scale and offset factors.
- */
+/// This test constructs a two sets of variables related to each
+/// other by a simple linear transformation (scale and offset). The
+/// time is measured to change a variable on either side of the
+/// mapping and to change the scale and offset factors.
void projectionTest(int n) {
- planner = new Planner();
- Variable scale = new Variable("scale", 10);
- Variable offset = new Variable("offset", 1000);
- Variable src = null, dst = null;
+ planner = Planner();
+ Variable scale = Variable("scale", 10);
+ Variable offset = Variable("offset", 1000);
+ Variable src, dst;
List<Variable> dests = <Variable>[];
for (int i = 0; i < n; i++) {
- src = new Variable("src", i);
- dst = new Variable("dst", i);
+ src = Variable("src", i);
+ dst = Variable("dst", i);
dests.add(dst);
- new StayConstraint(src, NORMAL);
- new ScaleConstraint(src, scale, offset, dst, REQUIRED);
+ StayConstraint(src, NORMAL);
+ ScaleConstraint(src, scale, offset, dst, REQUIRED);
}
change(src, 17);
if (dst.value != 1170) print("Projection 1 failed");
@@ -696,7 +669,7 @@
}
void change(Variable v, int newValue) {
- EditConstraint edit = new EditConstraint(v, PREFERRED);
+ EditConstraint edit = EditConstraint(v, PREFERRED);
Plan plan = planner.extractPlanFromConstraints(<EditConstraint>[edit]);
for (int i = 0; i < 10; i++) {
v.value = newValue;
diff --git a/example/FluidMotion/dart/FluidMotion.dart b/example/FluidMotion/dart/FluidMotion.dart
index 69e3ccb..e8a581f 100644
--- a/example/FluidMotion/dart/FluidMotion.dart
+++ b/example/FluidMotion/dart/FluidMotion.dart
@@ -1,28 +1,26 @@
-/**
- * Copyright 2013 the V8 project authors. All rights reserved.
- * Copyright 2009 Oliver Hunt <http://nerget.com>
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
+/// Copyright 2013 the V8 project authors. All rights reserved.
+/// Copyright 2009 Oliver Hunt <http://nerget.com>
+///
+/// Permission is hereby granted, free of charge, to any person
+/// obtaining a copy of this software and associated documentation
+/// files (the "Software"), to deal in the Software without
+/// restriction, including without limitation the rights to use,
+/// copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the
+/// Software is furnished to do so, subject to the following
+/// conditions:
+///
+/// The above copyright notice and this permission notice shall be
+/// included in all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+/// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+/// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+/// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+/// OTHER DEALINGS IN THE SOFTWARE.
// Ported from the v8 benchmark suite by Google 2013.
// Uses Float64List for data.
@@ -32,8 +30,58 @@
import 'package:benchmark_harness/benchmark_harness.dart';
+/// Copyright 2009 Oliver Hunt <http://nerget.com>
+///
+/// Permission is hereby granted, free of charge, to any person
+/// obtaining a copy of this software and associated documentation
+/// files (the "Software"), to deal in the Software without
+/// restriction, including without limitation the rights to use,
+/// copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the
+/// Software is furnished to do so, subject to the following
+/// conditions:
+///
+/// The above copyright notice and this permission notice shall be
+/// included in all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+/// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+/// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+/// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+/// OTHER DEALINGS IN THE SOFTWARE.
+// Ported from the v8 benchmark suite by Google 2013.
+// Uses Float64List for data.
+
+/// Copyright 2009 Oliver Hunt <http://nerget.com>
+///
+/// Permission is hereby granted, free of charge, to any person
+/// obtaining a copy of this software and associated documentation
+/// files (the "Software"), to deal in the Software without
+/// restriction, including without limitation the rights to use,
+/// copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the
+/// Software is furnished to do so, subject to the following
+/// conditions:
+///
+/// The above copyright notice and this permission notice shall be
+/// included in all copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+/// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+/// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+/// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+/// OTHER DEALINGS IN THE SOFTWARE.
+// Ported from the v8 benchmark suite by Google 2013.
+// Uses Float64List for data.
+
main() {
- new FluidMotion().report();
+ const FluidMotion().report();
}
class FluidMotion extends BenchmarkBase {
@@ -46,7 +94,7 @@
static void setupFluidMotion() {
framesTillAddingPoints = 0;
framesBetweenAddingPoints = 5;
- solver = new FluidField.create(null, 128, 128, 20);
+ solver = FluidField.create(null, 128, 128, 20);
solver.setDisplayFunction((a) {});
solver.setUICallback(prepareFrame);
}
@@ -136,31 +184,28 @@
factory FluidField.create(canvas, int hRes, int wRes, int iterations) {
final res = wRes * hRes;
if ((res > 0) && (res < 1000000)) {
- _lastCreated = new FluidField(canvas, hRes, wRes, iterations);
- } else if (_lastCreated == null) {
- _lastCreated = new FluidField(canvas, 64, 64, iterations);
+ _lastCreated = FluidField(canvas, hRes, wRes, iterations);
}
+ _lastCreated ??= FluidField(canvas, 64, 64, iterations);
assert((canvas == _lastCreated.canvas) &&
(iterations == _lastCreated.iterations));
return _lastCreated;
}
- FluidField(this.canvas, int hRes, int wRes, this.iterations)
- : width = wRes,
- height = hRes,
- rowSize = (wRes + 2),
- size = (wRes + 2) * (hRes + 2) {
+ FluidField(this.canvas, this.height, this.width, this.iterations)
+ : rowSize = width + 2,
+ size = (width + 2) * (height + 2) {
reset();
}
void reset() {
// All Float64List elements are initialized to 0.0.
- dens = new Float64List(size);
- dens_prev = new Float64List(size);
- u = new Float64List(size);
- u_prev = new Float64List(size);
- v = new Float64List(size);
- v_prev = new Float64List(size);
+ dens = Float64List(size);
+ dens_prev = Float64List(size);
+ u = Float64List(size);
+ u_prev = Float64List(size);
+ v = Float64List(size);
+ v_prev = Float64List(size);
}
void addFields(Float64List x, Float64List s, double dt) {
@@ -410,14 +455,14 @@
for (var i = 0; i < size; i++) {
u[i] = v[i] = d[i] = 0.0;
}
- uiCallback(new Field(d, u, v, rowSize));
+ uiCallback(Field(d, u, v, rowSize));
}
void update() {
queryUI(dens_prev, u_prev, v_prev);
vel_step(u, v, u_prev, v_prev, dt);
dens_step(dens, dens_prev, u, v, dt);
- displayFunc(new Field(dens, u, v, rowSize));
+ displayFunc(Field(dens, u, v, rowSize));
}
}
diff --git a/example/Richards.dart b/example/Richards.dart
index 0659bac..2cba39e 100644
--- a/example/Richards.dart
+++ b/example/Richards.dart
@@ -37,31 +37,29 @@
import 'package:benchmark_harness/benchmark_harness.dart';
main() {
- new Richards().report();
+ const Richards().report();
}
-/**
- * Richards imulates the task dispatcher of an operating system.
- **/
+/// Richards imulates the task dispatcher of an operating system.
class Richards extends BenchmarkBase {
const Richards() : super("Richards");
void run() {
- Scheduler scheduler = new Scheduler();
+ Scheduler scheduler = Scheduler();
scheduler.addIdleTask(ID_IDLE, 0, null, COUNT);
- Packet queue = new Packet(null, ID_WORKER, KIND_WORK);
- queue = new Packet(queue, ID_WORKER, KIND_WORK);
+ Packet queue = Packet(null, ID_WORKER, KIND_WORK);
+ queue = Packet(queue, ID_WORKER, KIND_WORK);
scheduler.addWorkerTask(ID_WORKER, 1000, queue);
- queue = new Packet(null, ID_DEVICE_A, KIND_DEVICE);
- queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
- queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ queue = Packet(null, ID_DEVICE_A, KIND_DEVICE);
+ queue = Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ queue = Packet(queue, ID_DEVICE_A, KIND_DEVICE);
scheduler.addHandlerTask(ID_HANDLER_A, 2000, queue);
- queue = new Packet(null, ID_DEVICE_B, KIND_DEVICE);
- queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
- queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ queue = Packet(null, ID_DEVICE_B, KIND_DEVICE);
+ queue = Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ queue = Packet(queue, ID_DEVICE_B, KIND_DEVICE);
scheduler.addHandlerTask(ID_HANDLER_B, 3000, queue);
scheduler.addDeviceTask(ID_DEVICE_A, 4000, null);
@@ -86,13 +84,11 @@
static const int DATA_SIZE = 4;
static const int COUNT = 1000;
- /**
- * These two constants specify how many times a packet is queued and
- * how many times a task is put on hold in a correct run of richards.
- * They don't have any meaning a such but are characteristic of a
- * correct run so if the actual queue or hold count is different from
- * the expected there must be a bug in the implementation.
- **/
+ /// These two constants specify how many times a packet is queued and
+ /// how many times a task is put on hold in a correct run of richards.
+ /// They don't have any meaning a such but are characteristic of a
+ /// correct run so if the actual queue or hold count is different from
+ /// the expected there must be a bug in the implementation.
static const int EXPECTED_QUEUE_COUNT = 2322;
static const int EXPECTED_HOLD_COUNT = 928;
@@ -108,11 +104,9 @@
static const int KIND_WORK = 1;
}
-/**
- * A scheduler can be used to schedule a set of tasks based on their relative
- * priorities. Scheduling is done by maintaining a list of task control blocks
- * which holds tasks and the data queue they are processing.
- */
+/// A scheduler can be used to schedule a set of tasks based on their relative
+/// priorities. Scheduling is done by maintaining a list of task control blocks
+/// which holds tasks and the data queue they are processing.
class Scheduler {
int queueCount = 0;
int holdCount = 0;
@@ -120,27 +114,26 @@
int currentId;
TaskControlBlock list;
List<TaskControlBlock> blocks =
- new List<TaskControlBlock>(Richards.NUMBER_OF_IDS);
+ List<TaskControlBlock>(Richards.NUMBER_OF_IDS);
/// Add an idle task to this scheduler.
void addIdleTask(int id, int priority, Packet queue, int count) {
- addRunningTask(id, priority, queue, new IdleTask(this, 1, count));
+ addRunningTask(id, priority, queue, IdleTask(this, 1, count));
}
/// Add a work task to this scheduler.
void addWorkerTask(int id, int priority, Packet queue) {
- addTask(
- id, priority, queue, new WorkerTask(this, Richards.ID_HANDLER_A, 0));
+ addTask(id, priority, queue, WorkerTask(this, Richards.ID_HANDLER_A, 0));
}
/// Add a handler task to this scheduler.
void addHandlerTask(int id, int priority, Packet queue) {
- addTask(id, priority, queue, new HandlerTask(this));
+ addTask(id, priority, queue, HandlerTask(this));
}
/// Add a handler task to this scheduler.
void addDeviceTask(int id, int priority, Packet queue) {
- addTask(id, priority, queue, new DeviceTask(this));
+ addTask(id, priority, queue, DeviceTask(this));
}
/// Add the specified task and mark it as running.
@@ -151,7 +144,7 @@
/// Add the specified task to this scheduler.
void addTask(int id, int priority, Packet queue, Task task) {
- currentTcb = new TaskControlBlock(list, id, priority, queue, task);
+ currentTcb = TaskControlBlock(list, id, priority, queue, task);
list = currentTcb;
blocks[id] = currentTcb;
}
@@ -178,32 +171,26 @@
return currentTcb;
}
- /**
- * Block the currently executing task and return the next task control block
- * to run. The blocked task will not be made runnable until it is explicitly
- * released, even if new work is added to it.
- */
+ /// Block the currently executing task and return the next task control block
+ /// to run. The blocked task will not be made runnable until it is explicitly
+ /// released, even if new work is added to it.
TaskControlBlock holdCurrent() {
holdCount++;
currentTcb.markAsHeld();
return currentTcb.link;
}
- /**
- * Suspend the currently executing task and return the next task
- * control block to run.
- * If new work is added to the suspended task it will be made runnable.
- */
+ /// Suspend the currently executing task and return the next task
+ /// control block to run.
+ /// If new work is added to the suspended task it will be made runnable.
TaskControlBlock suspendCurrent() {
currentTcb.markAsSuspended();
return currentTcb;
}
- /**
- * Add the specified packet to the end of the worklist used by the task
- * associated with the packet and make the task runnable if it is currently
- * suspended.
- */
+ /// Add the specified packet to the end of the worklist used by the task
+ /// associated with the packet and make the task runnable if it is currently
+ /// suspended.
TaskControlBlock queue(Packet packet) {
TaskControlBlock t = blocks[packet.id];
if (t == null) return t;
@@ -214,10 +201,8 @@
}
}
-/**
- * A task control block manages a task and the queue of work packages associated
- * with it.
- */
+/// A task control block manages a task and the queue of work packages associated
+/// with it.
class TaskControlBlock {
TaskControlBlock link;
int id; // The id of this block.
@@ -236,10 +221,8 @@
/// The task has packets left to process.
static const int STATE_RUNNABLE = 1;
- /**
- * The task is not currently running. The task is not blocked as such and may
- * be started by the scheduler.
- */
+ /// The task is not currently running. The task is not blocked as such and may
+ /// be started by the scheduler.
static const int STATE_SUSPENDED = 2;
/// The task is blocked and cannot be run until it is explicitly released.
@@ -285,11 +268,9 @@
return task.run(packet);
}
- /**
- * Adds a packet to the worklist of this block's task, marks this as
- * runnable if necessary, and returns the next runnable object to run
- * (the one with the highest priority).
- */
+ /// Adds a packet to the worklist of this block's task, marks this as
+ /// runnable if necessary, and returns the next runnable object to run
+ /// (the one with the highest priority).
TaskControlBlock checkPriorityAdd(TaskControlBlock task, Packet packet) {
if (queue == null) {
queue = packet;
@@ -301,12 +282,10 @@
return task;
}
- String toString() => "tcb { ${task}@${state} }";
+ String toString() => "tcb { $task@$state }";
}
-/**
- * Abstract task that manipulates work packets.
- */
+/// Abstract task that manipulates work packets.
abstract class Task {
Scheduler scheduler; // The scheduler that manages this task.
@@ -315,10 +294,8 @@
TaskControlBlock run(Packet packet);
}
-/**
- * An idle task doesn't do any work itself but cycles control between the two
- * device tasks.
- */
+/// An idle task doesn't do any work itself but cycles control between the two
+/// device tasks.
class IdleTask extends Task {
int v1; // A seed value that controls how the device tasks are scheduled.
int count; // The number of times this task should be scheduled.
@@ -339,10 +316,8 @@
String toString() => "IdleTask";
}
-/**
- * A task that suspends itself after each time it has been run to simulate
- * waiting for data from an external device.
- */
+/// A task that suspends itself after each time it has been run to simulate
+/// waiting for data from an external device.
class DeviceTask extends Task {
Packet v1;
@@ -362,9 +337,7 @@
String toString() => "DeviceTask";
}
-/**
- * A task that manipulates work packets.
- */
+/// A task that manipulates work packets.
class WorkerTask extends Task {
int v1; // A seed used to specify how work packets are manipulated.
int v2; // Another seed used to specify how work packets are manipulated.
@@ -393,9 +366,7 @@
String toString() => "WorkerTask";
}
-/**
- * A task that manipulates work packets and then suspends itself.
- */
+/// A task that manipulates work packets and then suspends itself.
class HandlerTask extends Task {
Packet v1;
Packet v2;
@@ -433,20 +404,18 @@
String toString() => "HandlerTask";
}
-/**
- * A simple package of data that is manipulated by the tasks. The exact layout
- * of the payload data carried by a packet is not importaint, and neither is the
- * nature of the work performed on packets by the tasks.
- * Besides carrying data, packets form linked lists and are hence used both as
- * data and worklists.
- */
+/// A simple package of data that is manipulated by the tasks. The exact layout
+/// of the payload data carried by a packet is not importaint, and neither is the
+/// nature of the work performed on packets by the tasks.
+/// Besides carrying data, packets form linked lists and are hence used both as
+/// data and worklists.
class Packet {
Packet link; // The tail of the linked list of packets.
int id; // An ID for this packet.
int kind; // The type of this packet.
int a1 = 0;
- List<int> a2 = new List(Richards.DATA_SIZE);
+ List<int> a2 = List(Richards.DATA_SIZE);
Packet(this.link, this.id, this.kind);
diff --git a/example/Template.dart b/example/Template.dart
index b930809..2d9d0de 100644
--- a/example/Template.dart
+++ b/example/Template.dart
@@ -8,7 +8,7 @@
const TemplateBenchmark() : super("Template");
static void main() {
- new TemplateBenchmark().report();
+ const TemplateBenchmark().report();
}
// The benchmark code.
diff --git a/example/Tracer/dart/Tracer.dart b/example/Tracer/dart/Tracer.dart
index 4c7bd14..d4dc31c 100644
--- a/example/Tracer/dart/Tracer.dart
+++ b/example/Tracer/dart/Tracer.dart
@@ -41,5 +41,5 @@
}
void main() {
- new TracerBenchmark().report();
+ const TracerBenchmark().report();
}
diff --git a/example/Tracer/dart/app.dart b/example/Tracer/dart/app.dart
index 28c9cb5..add8b30 100644
--- a/example/Tracer/dart/app.dart
+++ b/example/Tracer/dart/app.dart
@@ -23,7 +23,7 @@
int.parse((querySelector('#imageWidth') as InputElement).value);
canvas.height =
int.parse((querySelector('#imageHeight') as InputElement).value);
- var sw = new Stopwatch()..start();
+ var sw = Stopwatch()..start();
renderScene(e);
sw.stop();
time.text = sw.elapsedMilliseconds.toString();
diff --git a/example/Tracer/dart/color.dart b/example/Tracer/dart/color.dart
index ca2a63e..72253e8 100644
--- a/example/Tracer/dart/color.dart
+++ b/example/Tracer/dart/color.dart
@@ -21,22 +21,22 @@
}
Color operator +(Color c2) {
- return new Color(red + c2.red, green + c2.green, blue + c2.blue);
+ return Color(red + c2.red, green + c2.green, blue + c2.blue);
}
Color addScalar(double s) {
- var result = new Color(red + s, green + s, blue + s);
+ var result = Color(red + s, green + s, blue + s);
result.limit();
return result;
}
Color operator *(Color c2) {
- var result = new Color(red * c2.red, green * c2.green, blue * c2.blue);
+ var result = Color(red * c2.red, green * c2.green, blue * c2.blue);
return result;
}
Color multiplyScalar(double f) {
- var result = new Color(red * f, green * f, blue * f);
+ var result = Color(red * f, green * f, blue * f);
return result;
}
diff --git a/example/Tracer/dart/engine.dart b/example/Tracer/dart/engine.dart
index 2696059..ab2998f 100644
--- a/example/Tracer/dart/engine.dart
+++ b/example/Tracer/dart/engine.dart
@@ -12,7 +12,7 @@
var shape, position, normal, color, distance;
IntersectionInfo() {
- this.color = new Color(0.0, 0.0, 0.0);
+ this.color = Color(0.0, 0.0, 0.0);
}
String toString() => 'Intersection [$position]';
@@ -27,15 +27,15 @@
var canvas;
Engine(
- {this.canvasWidth: 100,
- this.canvasHeight: 100,
- this.pixelWidth: 2,
- this.pixelHeight: 2,
- this.renderDiffuse: false,
- this.renderShadows: false,
- this.renderHighlights: false,
- this.renderReflections: false,
- this.rayDepth: 2}) {
+ {this.canvasWidth = 100,
+ this.canvasHeight = 100,
+ this.pixelWidth = 2,
+ this.pixelHeight = 2,
+ this.renderDiffuse = false,
+ this.renderShadows = false,
+ this.renderHighlights = false,
+ this.renderReflections = false,
+ this.rayDepth = 2}) {
canvasHeight = canvasHeight ~/ pixelHeight;
canvasWidth = canvasWidth ~/ pixelWidth;
}
@@ -90,7 +90,7 @@
IntersectionInfo testIntersection(Ray ray, Scene scene, BaseShape exclude) {
int hits = 0;
- IntersectionInfo best = new IntersectionInfo();
+ IntersectionInfo best = IntersectionInfo();
best.distance = 2000;
for (var i = 0; i < scene.shapes.length; i++) {
@@ -113,7 +113,7 @@
Ray getReflectionRay(Vector P, Vector N, Vector V) {
var c1 = -N.dot(V);
var R1 = N.multiplyScalar(2 * c1) + V;
- return new Ray(P, R1);
+ return Ray(P, R1);
}
Color rayTrace(IntersectionInfo info, Ray ray, Scene scene, int depth) {
@@ -156,16 +156,16 @@
}
/* Render shadows and highlights */
- IntersectionInfo shadowInfo = new IntersectionInfo();
+ IntersectionInfo shadowInfo = IntersectionInfo();
if (this.renderShadows) {
- var shadowRay = new Ray(info.position, v);
+ var shadowRay = Ray(info.position, v);
shadowInfo = this.testIntersection(shadowRay, scene, info.shape);
if (shadowInfo.isHit && shadowInfo.shape != info.shape
/*&& shadowInfo.shape.type != 'PLANE'*/) {
var vA = color.multiplyScalar(0.5);
- var dB = (0.5 * pow(shadowInfo.shape.material.transparency, 0.5));
+ var dB = 0.5 * pow(shadowInfo.shape.material.transparency, 0.5);
color = vA.addScalar(dB);
}
}
diff --git a/example/Tracer/dart/renderscene.dart b/example/Tracer/dart/renderscene.dart
index e995741..c2860f1 100644
--- a/example/Tracer/dart/renderscene.dart
+++ b/example/Tracer/dart/renderscene.dart
@@ -16,31 +16,30 @@
// 'event' null means that we are benchmarking
void renderScene(event) {
- var scene = new Scene();
- scene.camera = new Camera(new Vector(0.0, 0.0, -15.0),
- new Vector(-0.2, 0.0, 5.0), new Vector(0.0, 1.0, 0.0));
- scene.background = new Background(new Color(0.5, 0.5, 0.5), 0.4);
+ var scene = Scene();
+ scene.camera = Camera(
+ Vector(0.0, 0.0, -15.0), Vector(-0.2, 0.0, 5.0), Vector(0.0, 1.0, 0.0));
+ scene.background = Background(Color(0.5, 0.5, 0.5), 0.4);
- var sphere = new Sphere(new Vector(-1.5, 1.5, 2.0), 1.5,
- new Solid(new Color(0.0, 0.5, 0.5), 0.3, 0.0, 0.0, 2.0));
+ var sphere = Sphere(Vector(-1.5, 1.5, 2.0), 1.5,
+ Solid(Color(0.0, 0.5, 0.5), 0.3, 0.0, 0.0, 2.0));
- var sphere1 = new Sphere(new Vector(1.0, 0.25, 1.0), 0.5,
- new Solid(new Color(0.9, 0.9, 0.9), 0.1, 0.0, 0.0, 1.5));
+ var sphere1 = Sphere(Vector(1.0, 0.25, 1.0), 0.5,
+ Solid(Color(0.9, 0.9, 0.9), 0.1, 0.0, 0.0, 1.5));
- var plane = new Plane(
- new Vector(0.1, 0.9, -0.5).normalize(),
+ var plane = Plane(
+ Vector(0.1, 0.9, -0.5).normalize(),
1.2,
- new Chessboard(new Color(1.0, 1.0, 1.0), new Color(0.0, 0.0, 0.0), 0.2,
- 0.0, 1.0, 0.7));
+ Chessboard(
+ Color(1.0, 1.0, 1.0), Color(0.0, 0.0, 0.0), 0.2, 0.0, 1.0, 0.7));
scene.shapes.add(plane);
scene.shapes.add(sphere);
scene.shapes.add(sphere1);
- var light = new Light(new Vector(5.0, 10.0, -1.0), new Color(0.8, 0.8, 0.8));
+ var light = Light(Vector(5.0, 10.0, -1.0), Color(0.8, 0.8, 0.8));
- var light1 =
- new Light(new Vector(-3.0, 5.0, -15.0), new Color(0.8, 0.8, 0.8), 100.0);
+ var light1 = Light(Vector(-3.0, 5.0, -15.0), Color(0.8, 0.8, 0.8), 100.0);
scene.lights.add(light);
scene.lights.add(light1);
@@ -76,7 +75,7 @@
}
int rayDepth = 2;
- var raytracer = new Engine(
+ var raytracer = Engine(
canvasWidth: imageWidth,
canvasHeight: imageHeight,
pixelWidth: pixelSize,
diff --git a/example/Tracer/dart/scene.dart b/example/Tracer/dart/scene.dart
index 499ec84..92bbe88 100644
--- a/example/Tracer/dart/scene.dart
+++ b/example/Tracer/dart/scene.dart
@@ -32,7 +32,7 @@
screen - (this.equator.multiplyScalar(vx) - this.up.multiplyScalar(vy));
pos.y = pos.y * -1.0;
var dir = pos - this.position;
- var ray = new Ray(pos, dir.normalize());
+ var ray = Ray(pos, dir.normalize());
return ray;
}
@@ -54,10 +54,10 @@
var lights;
var background;
Scene() {
- camera = new Camera(new Vector(0.0, 0.0, -0.5), new Vector(0.0, 0.0, 1.0),
- new Vector(0.0, 1.0, 0.0));
- shapes = new List();
- lights = new List();
- background = new Background(new Color(0.0, 0.0, 0.5), 0.2);
+ camera = Camera(
+ Vector(0.0, 0.0, -0.5), Vector(0.0, 0.0, 1.0), Vector(0.0, 1.0, 0.0));
+ shapes = [];
+ lights = [];
+ background = Background(Color(0.0, 0.0, 0.5), 0.2);
}
}
diff --git a/example/Tracer/dart/shapes.dart b/example/Tracer/dart/shapes.dart
index 254ece8..6685b65 100644
--- a/example/Tracer/dart/shapes.dart
+++ b/example/Tracer/dart/shapes.dart
@@ -23,7 +23,7 @@
Plane(pos, this.d, material) : super(pos, material);
IntersectionInfo intersect(Ray ray) {
- var info = new IntersectionInfo();
+ var info = IntersectionInfo();
var Vd = this.position.dot(ray.direction);
if (Vd == 0) return info; // no intersection
@@ -38,7 +38,7 @@
info.distance = t;
if (this.material.hasTexture) {
- var vU = new Vector(this.position.y, this.position.z, -this.position.x);
+ var vU = Vector(this.position.y, this.position.z, -this.position.x);
var vV = vU.cross(this.position);
var u = info.position.dot(vU);
var v = info.position.dot(vV);
@@ -60,7 +60,7 @@
Sphere(pos, this.radius, material) : super(pos, material);
IntersectionInfo intersect(Ray ray) {
- var info = new IntersectionInfo();
+ var info = IntersectionInfo();
info.shape = this;
var dst = ray.position - this.position;
diff --git a/example/Tracer/dart/vector.dart b/example/Tracer/dart/vector.dart
index 4763fad..27c1639 100644
--- a/example/Tracer/dart/vector.dart
+++ b/example/Tracer/dart/vector.dart
@@ -18,7 +18,7 @@
Vector normalize() {
var m = this.magnitude();
- return new Vector(this.x / m, this.y / m, this.z / m);
+ return Vector(this.x / m, this.y / m, this.z / m);
}
double magnitude() {
@@ -26,7 +26,7 @@
}
Vector cross(Vector w) {
- return new Vector(-this.z * w.y + this.y * w.z, this.z * w.x - this.x * w.z,
+ return Vector(-this.z * w.y + this.y * w.z, this.z * w.x - this.x * w.z,
-this.y * w.x + this.x * w.y);
}
@@ -35,19 +35,19 @@
}
Vector operator +(Vector w) {
- return new Vector(w.x + x, w.y + y, w.z + z);
+ return Vector(w.x + x, w.y + y, w.z + z);
}
Vector operator -(Vector w) {
- return new Vector(x - w.x, y - w.y, z - w.z);
+ return Vector(x - w.x, y - w.y, z - w.z);
}
Vector operator *(Vector w) {
- return new Vector(x * w.x, y * w.y, z * w.z);
+ return Vector(x * w.x, y * w.y, z * w.z);
}
Vector multiplyScalar(double w) {
- return new Vector(x * w, y * w, z * w);
+ return Vector(x * w, y * w, z * w);
}
String toString() {
diff --git a/lib/src/benchmark_base.dart b/lib/src/benchmark_base.dart
index 9273ebf..7410a2c 100644
--- a/lib/src/benchmark_base.dart
+++ b/lib/src/benchmark_base.dart
@@ -7,9 +7,7 @@
final ScoreEmitter emitter;
// Empty constructor.
- const BenchmarkBase(String name, {ScoreEmitter emitter: const PrintEmitter()})
- : this.name = name,
- this.emitter = emitter;
+ const BenchmarkBase(this.name, {this.emitter = const PrintEmitter()});
// The benchmark code.
// This function is not used, if both [warmup] and [exercise] are overwritten.
@@ -38,7 +36,7 @@
static double measureFor(Function f, int minimumMillis) {
int minimumMicros = minimumMillis * 1000;
int iter = 0;
- Stopwatch watch = new Stopwatch();
+ Stopwatch watch = Stopwatch();
watch.start();
int elapsed = 0;
while (elapsed < minimumMicros) {
@@ -53,13 +51,9 @@
double measure() {
setup();
// Warmup for at least 100ms. Discard result.
- measureFor(() {
- this.warmup();
- }, 100);
+ measureFor(warmup, 100);
// Run the benchmark for at least 2000ms.
- double result = measureFor(() {
- this.exercise();
- }, 2000);
+ double result = measureFor(exercise, 2000);
teardown();
return result;
}
diff --git a/pubspec.yaml b/pubspec.yaml
index fab6326..e74c75b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: benchmark_harness
-version: 1.0.5
+version: 1.0.6-dev
author: Dart Team <misc@dartlang.org>
description: The official Dart project benchmark harness.
homepage: https://github.com/dart-lang/benchmark_harness
@@ -12,4 +12,5 @@
build_web_compilers: ^0.4.0
mockito: ^3.0.0
path: ^1.1.0
+ pedantic: ^1.4.0
test: ^1.0.0
diff --git a/test/benchmark_harness_test.dart b/test/benchmark_harness_test.dart
index c1b287f..bcb225d 100644
--- a/test/benchmark_harness_test.dart
+++ b/test/benchmark_harness_test.dart
@@ -10,7 +10,7 @@
void main() {
group('benchmark_harness', () {
test('run is called', () {
- MockBenchmark benchmark = new MockBenchmark();
+ MockBenchmark benchmark = MockBenchmark();
double micros = benchmark.measure();
expect(micros, isPositive);
expect(benchmark.runCount, isPositive);
diff --git a/test/result_emitter_test.dart b/test/result_emitter_test.dart
index 82c45a7..f145c1a 100644
--- a/test/result_emitter_test.dart
+++ b/test/result_emitter_test.dart
@@ -25,14 +25,14 @@
benchmarkHarnessTest() {
MockResultEmitter createMockEmitter() {
- MockResultEmitter emitter = new MockResultEmitter();
+ MockResultEmitter emitter = MockResultEmitter();
return emitter;
}
group('ResultEmitter', () {
test('should be called when emitter is provided', () {
MockResultEmitter emitter = createMockEmitter();
- var testBenchmark = new BenchmarkWithResultEmitter(emitter);
+ var testBenchmark = BenchmarkWithResultEmitter(emitter);
testBenchmark.report();
verify(emitter.emit(any, any)).called(1);