You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					251 lines
				
				4.2 KiB
			
		
		
			
		
	
	
					251 lines
				
				4.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var test = require('tap').test;
							 | 
						||
| 
								 | 
							
								var compactField = require('../lib/field_compactor');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - empty array', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([]);
							 | 
						||
| 
								 | 
							
								    t.same(result, []);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - single element array', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [{
							 | 
						||
| 
								 | 
							
								      start: 1,
							 | 
						||
| 
								 | 
							
								      count: 1
							 | 
						||
| 
								 | 
							
								    }]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 2 elements array', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 2,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 2 elements array big step', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 5]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 5,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 3 elements array 1 step', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2, 3]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        end: 3,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 3 elements array 1 step, dangling extra at end', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2, 3, 5]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        end: 3,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 5,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 3 elements array 1 step, dangling extra at end and beginning', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 4, 5, 6, 9]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 4,
							 | 
						||
| 
								 | 
							
								        end: 6,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 9,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - 2 ranges with dangling in the middle', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2, 3, 6, 9, 11, 13]);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        end: 3,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 6,
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 9,
							 | 
						||
| 
								 | 
							
								        end: 13,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 2
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - with chars', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField(['L', 'W']);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'L',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'W',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - with chars and range', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 'L', 'W']);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        count: 1,
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'L',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'W',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - with chars and range (v2)', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2, 'L', 'W']);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        count: 1,
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 2,
							 | 
						||
| 
								 | 
							
								        count: 1,
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'L',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'W',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('compact field - with chars and range (v3)', function(t) {
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    var result = compactField([1, 2, 3, 'L', 'W']);
							 | 
						||
| 
								 | 
							
								    t.same(result, [
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 1,
							 | 
						||
| 
								 | 
							
								        end: 3,
							 | 
						||
| 
								 | 
							
								        count: 3,
							 | 
						||
| 
								 | 
							
								        step: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'L',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        start: 'W',
							 | 
						||
| 
								 | 
							
								        count: 1
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.error(err, 'compact field error');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.end();
							 | 
						||
| 
								 | 
							
								});
							 |