Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
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.
121 lines
3.1 KiB
121 lines
3.1 KiB
import SlicedArray, { Slice } from "../helpers/slicedArray"; |
|
|
|
test('Slicing returns new Slice', () => { |
|
const sliced = new SlicedArray(); |
|
const newSlice = sliced.slice.slice(); |
|
expect(newSlice.isEnd).toBeDefined(); |
|
}); |
|
|
|
describe('Inserting', () => { |
|
const sliced = new SlicedArray(); |
|
|
|
// @ts-ignore |
|
const slices = sliced.slices; |
|
|
|
const arr = [100, 99, 98, 97, 96, 95]; |
|
const distantArr = arr.slice(-2).map(v => v - 2); |
|
const missingArr = [arr[arr.length - 1], arr[arr.length - 1] - 1, distantArr[0]]; |
|
|
|
const startValue = 90; |
|
const values: number[] = []; |
|
const valuesPerArray = 3; |
|
const totalArrays = 10; |
|
for(let i = 0, length = valuesPerArray * totalArrays; i < length; ++i) { |
|
values.push(startValue - i); |
|
} |
|
const arrays: number[][] = []; |
|
for(let i = 0; i < totalArrays; ++i) { |
|
arrays.push(values.slice(valuesPerArray * i, valuesPerArray * (i + 1))); |
|
} |
|
|
|
test('Insert & flatten', () => { |
|
const idx = 2; |
|
|
|
sliced.insertSlice(arr.slice(0, idx + 1)); |
|
sliced.insertSlice(arr.slice(idx)); |
|
|
|
expect([...sliced.first]).toEqual(arr); |
|
}); |
|
|
|
test('Insert inner values', () => { |
|
sliced.insertSlice(arr.slice(1, -1)); |
|
|
|
expect([...sliced.first]).toEqual(arr); |
|
}); |
|
|
|
test('Insert distant slice', () => { |
|
const length = slices.length; |
|
sliced.insertSlice(distantArr); |
|
|
|
expect(slices.length).toEqual(length + 1); |
|
}); |
|
|
|
test('Insert intersection & join them', () => { |
|
const length = slices.length; |
|
sliced.insertSlice(missingArr); |
|
|
|
expect(slices.length).toEqual(length - 1); |
|
}); |
|
|
|
let returnedSlice: Slice; |
|
test('Insert arrays with gap & join them', () => { |
|
slices[0].length = 0; |
|
|
|
for(const arr of arrays) { |
|
sliced.insertSlice(arr); |
|
} |
|
|
|
expect(slices.length).toEqual(totalArrays); |
|
|
|
returnedSlice = sliced.insertSlice(values.slice(0, -valuesPerArray + 1)); |
|
|
|
expect(slices.length).toEqual(1); |
|
}); |
|
|
|
test('Return inserted & flattened slice', () => { |
|
expect(slices[0]).toEqual(returnedSlice); |
|
}); |
|
}); |
|
|
|
describe('Slicing', () => { |
|
const sliced = new SlicedArray(); |
|
|
|
// @ts-ignore |
|
const slices = sliced.slices; |
|
|
|
const VALUES_LENGTH = 100; |
|
const INCREMENTOR = 0xFFFF; |
|
const values: number[] = []; |
|
for(let i = 0; i < VALUES_LENGTH; ++i) { |
|
values[i] = i + INCREMENTOR * i; |
|
} |
|
values.sort((a, b) => b - a); |
|
sliced.insertSlice(values); |
|
|
|
const addOffset = 40; |
|
const limit = 40; |
|
|
|
const r = (func: (idx: number) => void) => { |
|
const max = VALUES_LENGTH * 3; |
|
for(let i = 0; i < max; ++i) { |
|
const idx = Math.random() * max | 0; |
|
func(idx); |
|
} |
|
}; |
|
|
|
describe('Positive addOffset', () => { |
|
test('From the start', () => { |
|
const {slice} = sliced.sliceMe(0, addOffset, limit); |
|
expect([...slice]).toEqual(values.slice(addOffset, addOffset + limit)); |
|
}); |
|
|
|
test('From existing offsetId', () => { |
|
r((idx) => { |
|
const value = values[idx] || 1; |
|
idx += 1; // because is it inclusive |
|
const {slice} = sliced.sliceMe(value, addOffset, limit); |
|
expect([...slice]).toEqual(values.slice(idx + addOffset, idx + addOffset + limit)); |
|
}); |
|
}); |
|
}); |
|
});
|
|
|