summaryrefslogtreecommitdiff
path: root/jstests/core/padding.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/padding.js')
-rw-r--r--jstests/core/padding.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/jstests/core/padding.js b/jstests/core/padding.js
new file mode 100644
index 00000000000..1872574d80f
--- /dev/null
+++ b/jstests/core/padding.js
@@ -0,0 +1,66 @@
+p = db.getCollection("padding");
+p.drop();
+
+// this test requires usePowerOf2Sizes to be off
+db.createCollection( p.getName(), { "usePowerOf2Sizes" : false } );
+assert.eq(0, p.stats().userFlags);
+
+for (var i = 0; i < 1000; i++) {
+ p.insert({ x: 1, y: "aaaaaaaaaaaaaaa" });
+}
+
+assert.eq(p.stats().paddingFactor, 1, "Padding Not 1");
+
+for (var i = 0; i < 1000; i++) {
+ var x = p.findOne();
+ x.y = x.y + "aaaaaaaaaaaaaaaa";
+ p.update({}, x);
+ if (i % 100 == 0)
+
+ print(p.stats().paddingFactor);
+}
+
+assert.gt(p.stats().paddingFactor, 1.9, "Padding not > 1.9");
+
+// this should make it go down
+for (var i = 0; i < 1000; i++) {
+ p.update({}, { $inc: { x: 1} });
+ if (i % 100 == 0)
+ print(p.stats().paddingFactor);
+}
+assert.lt(p.stats().paddingFactor, 1.7, "Padding not < 1.7");
+
+for (var i = 0; i < 1000; i++) {
+ if (i % 2 == 0) {
+ p.update({}, { $inc: { x: 1} });
+ }
+ else {
+ var x = p.findOne();
+ x.y = x.y + "aaaaaaaaaaaaaaaa";
+ p.update({}, x);
+ }
+ if( i % 100 == 0 )
+ print(p.stats().paddingFactor);
+}
+var ps = p.stats().paddingFactor;
+assert.gt(ps, 1.7, "Padding not greater than 1.7");
+assert.lt(ps, 1.9, "Padding not less than 1.9");
+
+// 50/50 inserts and nonfitting updates
+for (var i = 0; i < 1000; i++) {
+ if (i % 2 == 0) {
+ p.insert({});
+ }
+ else {
+ var x = p.findOne();
+ x.y = x.y + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ p.update({}, x);
+ }
+ if (i % 100 == 0)
+ print(p.stats().paddingFactor);
+}
+
+// should have trended somewhat higher over the above.
+// speed of increase would be higher with more indexes.
+assert.gt(p.stats().paddingFactor, ps + 0.02 , "padding factor not greater than value (+.02)");
+p.drop();