Skip to content

Commit

Permalink
added more tests and benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
dkin-om committed Dec 2, 2023
1 parent e00702f commit 1b7adcd
Show file tree
Hide file tree
Showing 6 changed files with 484 additions and 65 deletions.
224 changes: 224 additions & 0 deletions benchmark/base_conversion_bench.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
import 'package:b/b.dart';
import 'package:benchmark_harness/benchmark_harness.dart';

void main() {
ASCIIConverterBenchmark().report();

NonASCIIConverterBenchmark().report();

IntegerLengthFactorConverterBenchmark1().report();
IntegerLengthFactorConverterBenchmark2().report();
IntegerLengthFactorConverterBenchmark3().report();

NonIntegerLengthFactorConverterBenchmark1().report();
NonIntegerLengthFactorConverterBenchmark2().report();
NonIntegerLengthFactorConverterBenchmark3().report();
NonIntegerLengthFactorConverterBenchmark4().report();
}

class CustomBenchmarkBase extends BenchmarkBase {
const CustomBenchmarkBase(String name) : super(name);

@override
void report() {
for (int i = 0; i < 4; i++) {
super.report();
}
}
}

class ASCIIConverterBenchmark extends CustomBenchmarkBase {
ASCIIConverterBenchmark() : super('ASCIIConverter');

late BaseConversion b;

late String s;

@override
void run() {
// 1604 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: '0123456789', to: hexadecimal);

s = '33204';
}
}

class NonASCIIConverterBenchmark extends CustomBenchmarkBase {
NonASCIIConverterBenchmark() : super('NonASCIIConverter');

late BaseConversion b;

late String s;

@override
void run() {
// 2007 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: '౦123456789', to: hexadecimal);

s = '332౦4';
}
}

class IntegerLengthFactorConverterBenchmark1 extends CustomBenchmarkBase {
IntegerLengthFactorConverterBenchmark1()
: super('IntegerLengthFactorConverter: Base64 -> Base8');

late BaseConversion b;

late String s;

@override
void run() {
// 5858 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: base64, to: base8);

s = '33204';
}
}

class IntegerLengthFactorConverterBenchmark2 extends CustomBenchmarkBase {
IntegerLengthFactorConverterBenchmark2()
: super('IntegerLengthFactorConverter: Base10 -> Base10 (reverted)');

late BaseConversion b;

late String s;

@override
void run() {
// 1900 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: base10, to: '9876543210');

s = '33204';
}
}

class IntegerLengthFactorConverterBenchmark3 extends CustomBenchmarkBase {
IntegerLengthFactorConverterBenchmark3()
: super('IntegerLengthFactorConverter: Base6 -> Base36');

late BaseConversion b;

late String s;

@override
void run() {
// 1430 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: base6, to: base36);

s = '33204';
}
}

class NonIntegerLengthFactorConverterBenchmark1 extends CustomBenchmarkBase {
NonIntegerLengthFactorConverterBenchmark1()
: super('NonIntegerLengthFactorConverter: Base64 -> Base6');

late BaseConversion b;

late String s;

@override
void run() {
// 6370 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: base64, to: base6);

s = '33204';
}
}

class NonIntegerLengthFactorConverterBenchmark2 extends CustomBenchmarkBase {
NonIntegerLengthFactorConverterBenchmark2()
: super('NonIntegerLengthFactorConverter: Base64 -> Base10');

late BaseConversion b;

late String s;

@override
void run() {
// 5749 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: base64, to: base10);

s = '33204';
}
}

class NonIntegerLengthFactorConverterBenchmark3 extends CustomBenchmarkBase {
NonIntegerLengthFactorConverterBenchmark3()
: super('NonIntegerLengthFactorConverter: Base5 -> Base36');

late BaseConversion b;

late String s;

@override
void run() {
// 1436 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: '01234', to: base36);

s = '33204';
}
}

class NonIntegerLengthFactorConverterBenchmark4 extends CustomBenchmarkBase {
NonIntegerLengthFactorConverterBenchmark4()
: super('NonIntegerLengthFactorConverter: Base7 -> Base36');

late BaseConversion b;

late String s;

@override
void run() {
// 1435 ns/op
b(s);
}

@override
void setup() {
b = BaseConversion(from: '0123456', to: base36);

s = '33204';
}
}
2 changes: 1 addition & 1 deletion lib/src/base_conversion.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class BaseConversion extends InvertibleFunction<String, String> {

r = sb.toString();
}
} else if (r.isEmpty) {
} else if (rLen == 0) {
r = _toAlphabet._zeroCharacter;
}

Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ dependencies:
characters: ^1.1.0
invertible: ^2.0.0
dev_dependencies:
benchmark_harness: ^2.2.2
test: ^1.14.4
screenshots:
- description: b package logo
Expand Down
Loading

0 comments on commit 1b7adcd

Please sign in to comment.