diff --git a/test/perf/perf-trait-define.js b/test/perf/perf-trait-define.js
new file mode 100644
index 0000000..f4d6af7
--- /dev/null
+++ b/test/perf/perf-trait-define.js
@@ -0,0 +1,40 @@
+/**
+ * Tests amount of time taken to declare N anonymous traits
+ *
+ * Copyright (C) 2010, 2011, 2013 Mike Gerwitz
+ *
+ * This file is part of GNU ease.js.
+ *
+ * ease.js is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Contrast with respective class test.
+ */
+
+var common = require( __dirname + '/common.js' ),
+ Trait = common.require( 'Trait' ),
+
+ count = 1000
+;
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait( {} );
+ }
+
+}, count, 'Declare ' + count + ' empty anonymous traits' );
diff --git a/test/perf/perf-trait-methods.js b/test/perf/perf-trait-methods.js
new file mode 100644
index 0000000..4a03efd
--- /dev/null
+++ b/test/perf/perf-trait-methods.js
@@ -0,0 +1,126 @@
+/**
+ * Tests amount of time taken defining and invoking methods passing through
+ * traits
+ *
+ * Copyright (C) 2010, 2011, 2013 Mike Gerwitz
+ *
+ * This file is part of GNU ease.js.
+ *
+ * ease.js is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Contrast with respective class test.
+ */
+
+var common = require( __dirname + '/common.js' ),
+ Trait = common.require( 'Trait' ),
+ Class = common.require( 'class' ),
+ Interface = common.require( 'interface' ),
+
+ count = 1000
+;
+
+
+var I = Interface(
+{
+ a: [],
+ b: [],
+ c: [],
+} );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait(
+ {
+ a: function() {},
+ b: function() {},
+ c: function() {},
+ } );
+ }
+
+}, count,
+'Declare ' + count + ' empty anonymous traits with few concrete methods' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait(
+ {
+ 'virtual a': function() {},
+ 'virtual b': function() {},
+ 'virtual c': function() {},
+ } );
+ }
+
+}, count,
+'Declare ' + count + ' empty anonymous traits with few virtual methods' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait(
+ {
+ 'abstract a': [],
+ 'abstract b': [],
+ 'abstract c': [],
+ } );
+ }
+
+}, count,
+'Declare ' + count + ' empty anonymous traits with few abstract methods' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait.implement( I ).extend( {} );
+ }
+
+}, count,
+'Declare ' + count + ' empty anonymous traits implementing interface ' +
+ 'with few methods' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Trait.implement( I ).extend(
+ {
+ 'abstract override a': function() {},
+ 'abstract override b': function() {},
+ 'abstract override c': function() {},
+ } );
+ }
+
+}, count,
+'Declare ' + count + ' empty anonymous traits with few ' +
+ 'abstract overrides, implementing interface' );
diff --git a/test/perf/perf-trait-mixin.js b/test/perf/perf-trait-mixin.js
new file mode 100644
index 0000000..23d0200
--- /dev/null
+++ b/test/perf/perf-trait-mixin.js
@@ -0,0 +1,119 @@
+/**
+ * Tests amount of time taken to declare N classes mixing in traits of
+ * various sorts
+ *
+ * Copyright (C) 2010, 2011, 2013 Mike Gerwitz
+ *
+ * This file is part of GNU ease.js.
+ *
+ * ease.js is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Contrast with respective class test.
+ */
+
+var common = require( __dirname + '/common.js' ),
+ Trait = common.require( 'Trait' ),
+ Class = common.require( 'class' ),
+ Interface = common.require( 'interface' ),
+
+ count = 1000
+;
+
+// we don't care about declare time; we're testing mixin time
+var Te = Trait( {} );
+
+var Tv = Trait(
+{
+ 'virtual a': function() {},
+ 'virtual b': function() {},
+ 'virtual c': function() {},
+} );
+
+var I = Interface(
+{
+ a: [],
+ b: [],
+ c: [],
+} );
+var Cv = Class.implement( I ).extend(
+{
+ 'virtual a': function() {},
+ 'virtual b': function() {},
+ 'virtual c': function() {},
+} );
+
+var To = Trait.implement( I ).extend(
+{
+ 'virtual abstract override a': function() {},
+ 'virtual abstract override b': function() {},
+ 'virtual abstract override c': function() {},
+} );
+
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ // extend to force lazy mixin
+ Class.use( Te ).extend( {} );
+ }
+
+}, count, 'Mix in ' + count + ' empty traits' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ // extend to force lazy mixin
+ Class.use( Tv ).extend( {} );
+ }
+
+}, count, 'Mix in ' + count + ' traits with few virtual methods' );
+
+
+// now override 'em
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Class.use( Tv ).extend(
+ {
+ 'override virtual a': function() {},
+ 'override virtual b': function() {},
+ 'override virtual c': function() {},
+ } );
+ }
+
+}, count, 'Mix in and override ' + count +
+ ' traits with few virtual methods' );
+
+
+common.test( function()
+{
+ var i = count;
+
+ while ( i-- )
+ {
+ Cv.use( To ).extend( {} );
+ }
+
+}, count, 'Mix in trait that overrides class methods' );