Skip to content

Commit

Permalink
feature(#44): Added Circular Shift
Browse files Browse the repository at this point in the history
  • Loading branch information
0xflotus authored and FlorianWendelborn committed Feb 18, 2021
1 parent f62d20c commit f8abc96
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 0 deletions.
12 changes: 12 additions & 0 deletions source/bits/circular-shift-left.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Bits } from '../types'
import circularShiftLeft from './circular-shift-left'

test('CSHIFTL', () => {
const bits1: Bits = [1, 0, 0, 0, 1, 1, 0, 1]
const expected1: Bits = [0, 0, 0, 1, 1, 0, 1, 1]
expect(circularShiftLeft(bits1)).toEqual(expected1)

const bits2: Bits = [0, 0, 0, 1, 1, 1, 1, 1]
const expected2: Bits = [0, 0, 1, 1, 1, 1, 1, 0]
expect(circularShiftLeft(bits2)).toEqual(expected2)
})
19 changes: 19 additions & 0 deletions source/bits/circular-shift-left.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Bits } from '../types'

/**
* Circular Shift Left
*
* @example
* circularShiftLeft([1,0,1,1,0,1]) => [0,1,1,0,1,1]
*
* @param {Array} bits input data
* @return {Array} [CSHIFTL bits]
*/
export default (bits: Bits): Bits => {
const result: Bits = []

for (let i: number = 1; i < bits.length; i++) result[i - 1] = bits[i]
result[bits.length - 1] = bits[0]

return result
}
12 changes: 12 additions & 0 deletions source/bits/circular-shift-right.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Bits } from '../types'
import circularShiftRight from './circular-shift-right'

test('CSHIFTR', () => {
const bits1: Bits = [1, 0, 0, 0, 1, 1, 0, 1]
const expected1: Bits = [1, 1, 0, 0, 0, 1, 1, 0]
expect(circularShiftRight(bits1)).toEqual(expected1)

const bits2: Bits = [0, 0, 0, 1, 1, 1, 1, 1]
const expected2: Bits = [1, 0, 0, 0, 1, 1, 1, 1]
expect(circularShiftRight(bits2)).toEqual(expected2)
})
19 changes: 19 additions & 0 deletions source/bits/circular-shift-right.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Bits } from '../types'

/**
* Circular Shift Right
*
* @example
* circularShiftRight([1,0,1,1,0,1]) => [1,1,0,1,1,0]
*
* @param {Array} bits input data
* @return {Array} [CSHIFTR bits]
*/
export default (bits: Bits): Bits => {
const result: Bits = []

result[0] = bits.pop()
for (let i: number = 0; i < bits.length; i++) result[i + 1] = bits[i]

return result
}
6 changes: 6 additions & 0 deletions source/bits/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import and from './and'
import circularShiftLeft from './circular-shift-left'
import circularShiftRight from './circular-shift-right'
import nand from './nand'
import nor from './nor'
import not from './not'
Expand All @@ -16,6 +18,8 @@ import xor from './xor'

export {
and,
circularShiftLeft,
circularShiftRight,
nand,
nor,
not,
Expand All @@ -34,6 +38,8 @@ export {

export default {
and,
circularShiftLeft,
circularShiftRight,
nand,
nor,
not,
Expand Down

0 comments on commit f8abc96

Please sign in to comment.