A library to supply sequential or random objects within the given range and repeats

Features

  • The base class DataWalker supplies sequential or random indices between 0 and length, and reiterates the process for a given number of repeats
  • Derived classes supply sequential or random objects (date/times, ints, nums, random Unicode strings, iterables) mapped to the indices generated by the base class
  • Sequential or random pre-defined strings can be generated using a list of strings.
  • Random strings are implemented via StringWalker with the help of the random_unicode package.

Usage

The working example which can also be found in the repository in example/data_walker_example.dart

import 'dart:math';

import 'package:data_walker/data_walker.dart';

/// Custom Color class for the example
///
enum Color {
  black,
  blue,
  yellow,
  white;

  @override
  String toString() => name;
}

/// Custom IconColor class for the example
///
class IconColors {
  final Color fg;
  final Color bg;
  IconColors(this.fg, this.bg);
  @override
  String toString() => '$fg on $bg';
}

/// Custom IconSizePrice class for the example
///
class IconSizePrice {
  final int size;
  final num price;
  IconSizePrice(this.size, this.price);
  @override
  String toString() => '$size x $size, Price: \$${price.toStringAsFixed(2)}';
}

/// Main entry point for the example
///
void main() {
  print('\n*** Sequential Aggregated ListWalkers ***\n');

  final walkers = <String, DataWalker>{
    'Icon': ListWalker<String>([
      'new',
      'open',
      'save',
      'edit',
      'find',
      'replace',
    ]),
    'Colors': ListWalker<IconColors>([
      IconColors(Color.black, Color.white),
      IconColors(Color.white, Color.black),
      IconColors(Color.yellow, Color.blue),
      IconColors(Color.blue, Color.yellow),
    ]),
    'Size': ListWalker<IconSizePrice>([
      IconSizePrice(16, 0.10),
      IconSizePrice(24, 0.15),
      IconSizePrice(32, 0.20),
      IconSizePrice(48, 0.25),
      IconSizePrice(64, 0.30),
      IconSizePrice(80, 0.35),
      IconSizePrice(96, 0.40),
    ])
  };

  walkers.exec(
      repeats: 1,
      valueProc: (values) {
        print(walkers.valuesToString(values, useKeys: false));
      });

  print('\n*** Sequential Plain NumWalker ***\n');

  var walker = NumWalker(0.1, 1.0, step: 0.05, repeats: 2);

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }

  print('\n*** Random Plain NumWalker ***\n');

  walker = walker.copyWith(repeats: 10, random: Random.secure());

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }
}

Libraries

data_walker
data_walker exports