Ejemplo n.º 1
0
    protected void Ex02()
    {
        Filter.Accept(Arg.Any <FixtureDescriptor>()).Returns(true);

        var result = Fixture.Run(Filter, Substitute.For <IFixtureStepRunnerFactory>());

        Expect("the fixture method should be called", () => TestFixtures.CalledFixtureMethods.Count == 1 && TestFixtures.CalledFixtureMethods.Contains(TargetFixtureType));
        Expect("the Dispose method should be called", () => TestFixtures.DisposeCalled);

        ExpectedFixtureDescriptor = FixtureDescriptorAssertion.Of(TargetFixtureDescription, TargetMethodDescription, TargetMethodFullName, typeof(ExampleAttribute));
        Expect($"the descriptor of the result should be as follows:{ExpectedFixtureDescriptor.ToDescription()}", () => result != null && FixtureDescriptorAssertion.Of(result.FixtureDescriptor) == ExpectedFixtureDescriptor);
        ExpectedFixtureResult = FixtureResultAssertion.ForNullException(true, true, true, 0, 0, FixtureStatus.Passed);
        Expect($"the result should be as follows:{ExpectedFixtureResult.ToDescription()}", () => result != null && FixtureResultAssertion.Of(result) == ExpectedFixtureResult);

        Expect("FixtureRunning event should be raised", () => FixtureRunningResult != null);

        ExpectedFixtureRunningDescriptor = FixtureDescriptorAssertion.Of(TargetFixtureDescription, TargetMethodDescription, TargetMethodFullName, typeof(ExampleAttribute));
        Expect($"the descriptor of the result on FixtureRunning event should be as follows:{ExpectedFixtureRunningDescriptor.ToDescription()}", () => FixtureRunningResult != null && FixtureDescriptorAssertion.Of(FixtureRunningResult.FixtureDescriptor) == ExpectedFixtureRunningDescriptor);
        ExpectedFixtureRunningResult = FixtureResultAssertion.ForNullException(true, false, false, 0, 0, FixtureStatus.Running);
        Expect($"the result on FixtureRunning event should be as follows:{ExpectedFixtureRunningResult.ToDescription()}", () => FixtureRunningResult != null && FixtureResultAssertion.Of(FixtureRunningResult) == ExpectedFixtureRunningResult);

        Expect("FixtureRun event should be raised", () => FixtureRunResult != null);

        Expect("the result on FixtureRun event should be the result that is returned by Run method", () => FixtureRunResult == result);

        Expect("FixtureStepRunning event should not be raised", () => FixtureStepRunningResult == null);
        Expect("FixtureStepRun event should not be raised", () => FixtureStepRunResult == null);
    }
Ejemplo n.º 2
0
        internal virtual SortedSet <ConnectorObject> Search(ObjectClass objectClass, Filter query, SortKey[] sortKeys)
        {
            ConcurrentDictionary <string, Pair <ConnectorObject, DateTime> > storage = GetStore(objectClass);

            SortKey[] s;
            if (null == sortKeys || !sortKeys.Any())
            {
                s = new[] { new SortKey(Name.NAME, true) };
            }
            else
            {
                s = sortKeys;
            }

            // Rebuild the full result set.
            var resultSet = new SortedSet <ConnectorObject>(new ResourceComparator(s));

            foreach (var co in storage.Values)
            {
                if (null == query || query.Accept(co.First))
                {
                    resultSet.Add(co.First);
                }
            }
            return(resultSet);
        }
    void Ex02()
    {
        Filter.Accept(Arg.Any <FixtureDescriptor>()).Returns(true);

        var result = Container.Run(Filter, new FixtureStepRunnerFactory());

        Expect(
            "all inner fixture methods should be called",
            () => TestFixtures.CalledFixtureMethods.Count == 3 &&
            TestFixtures.CalledFixtureMethods.Contains(typeof(TestFixtures.SimpleFixture)) &&
            TestFixtures.CalledFixtureMethods.Contains(typeof(TestFixtures.SimpleDisposableFixture)) &&
            TestFixtures.CalledFixtureMethods.Contains(typeof(TestFixtures.SimpleFixtureSteppable))
            );

        ExpectedFixtureDescriptor = FixtureDescriptorWithBackgroundAssertion.Of("Simple Fixture", "SimpleFixture", "Carna.TestFixtures+SimpleFixture", typeof(ContextAttribute), "Simple Fixture Background");
        Expect($"the descriptor of the result should be as follows:{ExpectedFixtureDescriptor.ToDescription()}", () => result != null && FixtureDescriptorWithBackgroundAssertion.Of(result.FixtureDescriptor) == ExpectedFixtureDescriptor);
        ExpectedFixtureResult = FixtureResultAssertion.ForNullException(true, true, true, 0, 3, FixtureStatus.Passed);
        Expect($"the result should be as follows:{ExpectedFixtureResult.ToDescription()}", () => result != null && FixtureResultAssertion.Of(result) == ExpectedFixtureResult);

        Expect("FixtureRunning event should be raised", () => FixtureRunningResult != null);

        ExpectedFixtureRunningDescriptor = FixtureDescriptorAssertion.Of("Simple Fixture", "SimpleFixture", "Carna.TestFixtures+SimpleFixture", typeof(ContextAttribute));
        Expect($"the descriptor of the result on FixtureRunning should be as follows:{ExpectedFixtureRunningDescriptor.ToDescription()}", () => FixtureRunningResult != null && FixtureDescriptorAssertion.Of(FixtureRunningResult.FixtureDescriptor) == ExpectedFixtureRunningDescriptor);
        ExpectedFixtureRunningResult = FixtureResultAssertion.ForNullException(true, false, false, 0, 0, FixtureStatus.Running);
        Expect($"the result on FixtureRunning should be as follows:{ExpectedFixtureRunningResult.ToDescription()}", () => FixtureRunningResult != null && FixtureResultAssertion.Of(FixtureRunningResult) == ExpectedFixtureRunningResult);

        Expect("FixtureRun event should be raised", () => FixtureRunResult != null);

        Expect("the result on FixtureRun event should be the result that is returned by Run method", () => FixtureRunResult == result);
    }
    void Ex03()
    {
        Filter.Accept(Arg.Any <FixtureDescriptor>()).Returns(false);

        var result = Container.Run(Filter, new FixtureStepRunnerFactory());

        Expect("all inner fixture methods should not be called", () => TestFixtures.CalledFixtureMethods.Count == 0);

        Expect("the result should be null", () => result == null);

        Expect("FixtureRunning event should not be raised", () => FixtureRunningResult == null);

        Expect("FixtureRun event should not be raised", () => FixtureRunResult == null);
    }
Ejemplo n.º 5
0
    protected void Ex03()
    {
        Filter.Accept(Arg.Any <FixtureDescriptor>()).Returns(false);

        var result = Fixture.Run(Filter, Substitute.For <IFixtureStepRunnerFactory>());

        Expect("the fixture method should not be called", () => TestFixtures.CalledFixtureMethods.Count == 0);

        Expect("the result should be null", () => result == null);

        Expect("FixtureRunning event should not be raised", () => FixtureRunningResult == null);
        Expect("FixtureRun event should not be raised", () => FixtureRunResult == null);

        Expect("FixtureStepRunning event should not be raised", () => FixtureStepRunningResult == null);
        Expect("FixtureStepRun event should not be raised", () => FixtureStepRunResult == null);
    }
    protected void Ex02()
    {
        Filter.Accept(Arg.Any <FixtureDescriptor>()).Returns(true);

        var result = Fixture.Run(Filter, new TestFixtures.SimpleFixtureStepRunnerFactory());

        Expect("the fixture method should be called", () => TestFixtures.CalledFixtureMethods.Count == 1 && TestFixtures.CalledFixtureMethods.Contains(TargetFixtureType));

        ExpectedFixtureDescriptor = FixtureDescriptorAssertion.Of(TargetFixtureDescription, TargetMethodDescription, TargetMethodFullName, typeof(ExampleAttribute));
        Expect($"the descriptor of the result should be as follows:{ExpectedFixtureDescriptor.ToDescription()}", () => result != null && FixtureDescriptorAssertion.Of(result.FixtureDescriptor) == ExpectedFixtureDescriptor);
        ExpectedFixtureResult = FixtureResultAssertion.ForNullException(true, true, true, 1, 0, FixtureStatus.Passed);
        Expect($"the result should be as follows:{ExpectedFixtureResult.ToDescription()}", () => result != null && FixtureResultAssertion.Of(result) == ExpectedFixtureResult);

        if (result is null)
        {
            return;
        }

        var stepResult = result.StepResults.ElementAt(0);

        ExpectedFixtureStepResult = FixtureStepResultAssertion.Of("Description", null, FixtureStepStatus.Passed, typeof(ExpectStep));
        Expect($"the result of the step should be as follows:{ExpectedFixtureStepResult.ToDescription()}", () => FixtureStepResultAssertion.Of(stepResult) == ExpectedFixtureStepResult);

        Expect("FixtureRunning event should be raised", () => FixtureRunningResult != null);

        ExpectedFixtureRunningDescriptor = FixtureDescriptorAssertion.Of(TargetFixtureDescription, TargetMethodDescription, TargetMethodFullName, typeof(ExampleAttribute));
        Expect($"the descriptor of the result on FixtureRunning event should be as follows:{ExpectedFixtureRunningDescriptor.ToDescription()}", () => FixtureRunningResult != null && FixtureDescriptorAssertion.Of(FixtureRunningResult.FixtureDescriptor) == ExpectedFixtureRunningDescriptor);
        ExpectedFixtureRunningResult = FixtureResultAssertion.ForNullException(true, false, false, 0, 0, FixtureStatus.Running);
        Expect($"the result on FixtureRunning event should be as follows:{ExpectedFixtureRunningResult.ToDescription()}", () => FixtureRunningResult != null && FixtureResultAssertion.Of(FixtureRunningResult) == ExpectedFixtureRunningResult);

        Expect("FixtureRun event should be raised", () => FixtureRunResult != null);

        Expect("the result on FixtureRun event should be the result that is returned by Run method", () => FixtureRunResult == result);

        Expect("FixtureStepRunning event should be raised", () => FixtureStepRunningResult != null);

        ExpectedFixtureStepRunningResult = FixtureStepRunningResultAssertion.Of(stepResult.Step, true, false, false, null, FixtureStepStatus.Running);
        Expect("the result of the step on FixtureStepRunning event should be as follows", () => FixtureStepRunningResult != null && FixtureStepRunningResultAssertion.Of(FixtureStepRunningResult) == ExpectedFixtureStepRunningResult);

        Expect("FixtureStepRun event should be raised", () => FixtureStepRunResult != null);

        Expect("the result on FixtureStepRun event should be the result that is returned by Run method", () => FixtureStepRunResult == stepResult);
    }
        protected override SAMAlignedItem GetAlignedSequence()
        {
            var array = new byte[4];

            ReadUnCompressedData(array, 0, 4);
            int blockLen       = Helper.GetInt32(array, 0);
            var alignmentBlock = new byte[blockLen];

            ReadUnCompressedData(alignmentBlock, 0, blockLen);

            if (!Filter.Accept(alignmentBlock))
            {
                return(null);
            }

            var result = new SAMAlignedItem();
            var loc    = new SAMAlignedLocation(result);

            int value;
            // 0-4 bytes
            var refSeqIndex = Helper.GetInt32(alignmentBlock, 0);

            loc.Seqname = refSeqIndex == -1 ? "*" : RefSeqNames[refSeqIndex];

            // 4-8 bytes
            loc.Start = Helper.GetInt32(alignmentBlock, 4) + 1;

            // 8 - 12 bytes "bin<<16|mapQual<<8|read_name_len"
            var unsignedValue = Helper.GetUInt32(alignmentBlock, 8);

            // 10 -12 bytes
            //alignedSeq.Bin = (int)(UnsignedValue & 0xFFFF0000) >> 16;
            // 9th bytes
            loc.MapQ = (int)(unsignedValue & 0x0000FF00) >> 8;

            // 8th bytes
            var queryNameLen = (int)(unsignedValue & 0x000000FF);

            // 12 - 16 bytes
            unsignedValue = Helper.GetUInt32(alignmentBlock, 12);
            // 14-16 bytes
            var flagValue = (int)(unsignedValue & 0xFFFF0000) >> 16;

            loc.Flag = (SAMFlags)flagValue;

            // 12-14 bytes
            var cigarLen = (int)(unsignedValue & 0x0000FFFF);

            // 16-20 bytes
            var readLen = Helper.GetInt32(alignmentBlock, 16);

            // 32-(32+readLen) bytes
            result.Qname = Encoding.ASCII.GetString(alignmentBlock, 32, queryNameLen - 1);
            var strbuilder = new StringBuilder();
            var startIndex = 32 + queryNameLen;

            for (var i = startIndex; i < (startIndex + cigarLen * 4); i += 4)
            {
                // Get the CIGAR operation length stored in first 28 bits.
                var cigarValue = Helper.GetUInt32(alignmentBlock, i);
                strbuilder.Append(((cigarValue & 0xFFFFFFF0) >> 4).ToString(CultureInfo.InvariantCulture));

                // Get the CIGAR operation stored in last 4 bits.
                value = (int)cigarValue & 0x0000000F;
                // MIDNSHP=>0123456
                strbuilder.Append(GetCigarChar(value, result.Qname));
            }

            var cigar = strbuilder.ToString();

            loc.Cigar = string.IsNullOrWhiteSpace(cigar) ? "*" : cigar;

            startIndex += cigarLen * 4;
            var sequence = new StringBuilder();
            var index    = startIndex;

            for (; index < (startIndex + (readLen + 1) / 2) - 1; index++)
            {
                // Get first 4 bit value
                value = (alignmentBlock[index] & 0xF0) >> 4;
                sequence.Append(GetSeqChar(value, result.Qname));
                // Get last 4 bit value
                value = alignmentBlock[index] & 0x0F;
                sequence.Append(GetSeqChar(value, result.Qname));
            }

            value = (alignmentBlock[index] & 0xF0) >> 4;
            sequence.Append(GetSeqChar(value, result.Qname));

            if (readLen % 2 == 0)
            {
                value = alignmentBlock[index] & 0x0F;
                sequence.Append(GetSeqChar(value, result.Qname));
            }

            startIndex = index + 1;
            var qualValues = new StringBuilder();

            if (alignmentBlock[startIndex] != 0xFF)
            {
                for (var i = startIndex; i < (startIndex + readLen); i++)
                {
                    qualValues.Append((char)(alignmentBlock[i] + 33));
                }
            }
            else
            {
                qualValues.Append(SAMParser.AsteriskAsByte);
            }

            loc.Sequence = sequence.ToString();
            loc.Qual     = qualValues.ToString();
            loc.Strand   = loc.Flag.HasFlag(SAMFlags.QueryOnReverseStrand) ? '-' : '+';

            if (!loc.Flag.HasFlag(SAMFlags.UnmappedQuery))
            {
                startIndex += readLen;
                if (alignmentBlock.Length > startIndex + 4 && alignmentBlock[startIndex] != 0x0 &&
                    alignmentBlock[startIndex + 1] != 0x0)
                {
                    var options = new List <string>();
                    for (int i = 0; i < SAMFormat.OptionStartIndex; i++)
                    {
                        options.Add(string.Empty);
                    }

                    for (index = startIndex; index < alignmentBlock.Length;)
                    {
                        var tag = Encoding.ASCII.GetString(alignmentBlock, index, 2);
                        index += 2;
                        var vType = (char)alignmentBlock[index++];

                        // SAM format supports [AifZH] for value type.
                        // In BAM, an integer may be stored as a signed 8-bit integer (c), unsigned 8-bit integer (C), signed short (s), unsigned
                        // short (S), signed 32-bit (i) or unsigned 32-bit integer (I), depending on the signed magnitude of the integer. However,
                        // in SAM, all types of integers are presented as type ʻiʼ.

                        //NOTE: Code previously here checked for valid value and threw an exception here, but this exception/validation is checked for in this method below, as while as when the value is set.

                        var tValue = GetOptionalValue(vType, alignmentBlock, ref index);

                        // Convert to SAM format, where all integers are represented the same way
                        if ("cCsSI".IndexOf(vType) >= 0)
                        {
                            vType = 'i';
                        }
                        options.Add(string.Format("{0}:{1}:{2}", tag, vType, tValue));
                    }

                    var optionarrays = options.ToArray();

                    loc.AlignmentScore    = Format.GetAlignmentScore(optionarrays);
                    loc.NumberOfMismatch  = Format.GetNumberOfMismatch(optionarrays);
                    loc.MismatchPositions = Format.GetMismatchPositions(optionarrays);
                }
            }

            return(result);
        }
Ejemplo n.º 8
0
        //protected override void SetSelectedObject(AppObject obj)
        //{
        //    m_selectedObject = obj;
        //    if (m_frame != null) m_frame.SetSelectedObject(obj);
        //}

        public override bool SuitableFor(AppObject appobj)
        {
            var props = appobj.GetAppObjectProperties();

            return(Filter.Accept(props));
        }
        protected override SAMAlignedSequence GetAlignedSequence()
        {
            byte[] array = new byte[4];

            ReadUnCompressedData(array, 0, 4);
            int blockLen = Helper.GetInt32(array, 0);

            byte[] alignmentBlock = new byte[blockLen];
            ReadUnCompressedData(alignmentBlock, 0, blockLen);

            if (!Filter.Accept(alignmentBlock))
            {
                return(null);
            }

            SAMAlignedSequence alignedSeq = new SAMAlignedSequence();
            int    value;
            UInt32 UnsignedValue;
            // 0-4 bytes
            int refSeqIndex = Helper.GetInt32(alignmentBlock, 0);

            if (refSeqIndex == -1)
            {
                alignedSeq.SetPreValidatedRName("*");
            }
            else
            {
                alignedSeq.SetPreValidatedRName(RefSeqNames[refSeqIndex]);
            }

            // 4-8 bytes
            alignedSeq.Pos = Helper.GetInt32(alignmentBlock, 4) + 1;

            // 8 - 12 bytes "bin<<16|mapQual<<8|read_name_len"
            UnsignedValue = Helper.GetUInt32(alignmentBlock, 8);

            // 10 -12 bytes
            //alignedSeq.Bin = (int)(UnsignedValue & 0xFFFF0000) >> 16;
            // 9th bytes
            alignedSeq.MapQ = (int)(UnsignedValue & 0x0000FF00) >> 8;

            // 8th bytes
            int queryNameLen = (int)(UnsignedValue & 0x000000FF);

            // 12 - 16 bytes
            UnsignedValue = Helper.GetUInt32(alignmentBlock, 12);
            // 14-16 bytes
            int flagValue = (int)(UnsignedValue & 0xFFFF0000) >> 16;

            alignedSeq.Flag = (SAMFlags)flagValue;

            // 12-14 bytes
            int cigarLen = (int)(UnsignedValue & 0x0000FFFF);

            // 16-20 bytes
            int readLen = Helper.GetInt32(alignmentBlock, 16);

            // 20-24 bytes
            int mateRefSeqIndex = Helper.GetInt32(alignmentBlock, 20);

            if (mateRefSeqIndex != -1)
            {
                alignedSeq.SetPreValidatedMRNM(RefSeqNames[mateRefSeqIndex]);
            }
            else
            {
                alignedSeq.SetPreValidatedMRNM("*");
            }

            // 24-28 bytes
            alignedSeq.MPos = Helper.GetInt32(alignmentBlock, 24) + 1;

            // 28-32 bytes
            alignedSeq.ISize = Helper.GetInt32(alignmentBlock, 28);

            // 32-(32+readLen) bytes
            alignedSeq.QName = System.Text.ASCIIEncoding.ASCII.GetString(alignmentBlock, 32, queryNameLen - 1);
            StringBuilder strbuilder = new StringBuilder();
            int           startIndex = 32 + queryNameLen;

            for (int i = startIndex; i < (startIndex + cigarLen * 4); i += 4)
            {
                // Get the CIGAR operation length stored in first 28 bits.
                UInt32 cigarValue = Helper.GetUInt32(alignmentBlock, i);
                strbuilder.Append(((cigarValue & 0xFFFFFFF0) >> 4).ToString(CultureInfo.InvariantCulture));

                // Get the CIGAR operation stored in last 4 bits.
                value = (int)cigarValue & 0x0000000F;

                // MIDNSHP=>0123456
                switch (value)
                {
                case 0:
                    strbuilder.Append("M");
                    break;

                case 1:
                    strbuilder.Append("I");
                    break;

                case 2:
                    strbuilder.Append("D");
                    break;

                case 3:
                    strbuilder.Append("N");
                    break;

                case 4:
                    strbuilder.Append("S");
                    break;

                case 5:
                    strbuilder.Append("H");
                    break;

                case 6:
                    strbuilder.Append("P");
                    break;

                case 7:
                    strbuilder.Append("=");
                    break;

                case 8:
                    strbuilder.Append("X");
                    break;

                default:
                    throw new Exception("Invalid CIGAR of query " + alignedSeq.QName);
                }
            }

            string cigar = strbuilder.ToString();

            if (string.IsNullOrWhiteSpace(cigar))
            {
                alignedSeq.SetPreValidatedCIGAR("*");
            }
            else
            {
                alignedSeq.SetPreValidatedCIGAR(cigar);
            }

            startIndex += cigarLen * 4;
            var sequence      = new byte[readLen];
            int sequenceIndex = 0;
            int index         = startIndex;

            for (; index < (startIndex + (readLen + 1) / 2) - 1; index++)
            {
                // Get first 4 bit value
                value = (alignmentBlock[index] & 0xF0) >> 4;
                sequence[sequenceIndex++] = GetSeqCharAsByte(value);
                // Get last 4 bit value
                value = alignmentBlock[index] & 0x0F;
                sequence[sequenceIndex++] = GetSeqCharAsByte(value);
            }

            value = (alignmentBlock[index] & 0xF0) >> 4;
            sequence[sequenceIndex++] = GetSeqCharAsByte(value);

            if (readLen % 2 == 0)
            {
                value = alignmentBlock[index] & 0x0F;
                sequence[sequenceIndex++] = GetSeqCharAsByte(value);
            }

            startIndex = index + 1;
            byte[] qualValues = new byte[readLen];

            if (alignmentBlock[startIndex] != 0xFF)
            {
                for (int i = startIndex; i < (startIndex + readLen); i++)
                {
                    qualValues[i - startIndex] = (byte)(alignmentBlock[i] + 33);
                }
                //validate quality scores here
                byte badVal;
                bool ok = QualitativeSequence.ValidateQualScores(qualValues, SAMParser.QualityFormatType, out badVal);
                if (!ok)
                {
                    string message = string.Format("Invalid encoded quality score found: {0}", (char)badVal);
                    throw new ArgumentOutOfRangeException("encodedQualityScores", message);
                }
            }
            else
            {
                qualValues = new byte[] { SAMParser.AsteriskAsByte };
            }
            //Values have already been validated when first parsed at this point so no need to again
            SAMParser.ParseQualityNSequence(alignedSeq, Alphabet, sequence, qualValues, false);

            startIndex += readLen;
            if (alignmentBlock.Length > startIndex + 4 && alignmentBlock[startIndex] != 0x0 && alignmentBlock[startIndex + 1] != 0x0)
            {
                for (index = startIndex; index < alignmentBlock.Length;)
                {
                    SAMOptionalField optionalField = new SAMOptionalField();
                    optionalField.Tag = System.Text.ASCIIEncoding.ASCII.GetString(alignmentBlock, index, 2);
                    index            += 2;
                    char vType = (char)alignmentBlock[index++];

                    // SAM format supports [AifZH] for value type.
                    // In BAM, an integer may be stored as a signed 8-bit integer (c), unsigned 8-bit integer (C), signed short (s), unsigned
                    // short (S), signed 32-bit (i) or unsigned 32-bit integer (I), depending on the signed magnitude of the integer. However,
                    // in SAM, all types of integers are presented as type ʻiʼ.

                    //NOTE: Code previously here checked for valid value and threw an exception here, but this exception/validation is checked for in this method below, as while as when the value is set.

                    optionalField.Value = GetOptionalValue(vType, alignmentBlock, ref index).ToString();

                    // Convert to SAM format, where all integers are represented the same way
                    if ("cCsSI".IndexOf(vType) >= 0)
                    {
                        vType = 'i';
                    }
                    optionalField.VType = vType.ToString();

                    alignedSeq.OptionalFields.Add(optionalField);
                }
            }

            return(alignedSeq);
        }
        protected override SAMItemSlim GetAlignedSequence()
        {
            var array = new byte[4];

            ReadUnCompressedData(array, 0, 4);
            var blockLen       = Helper.GetInt32(array, 0);
            var alignmentBlock = new byte[blockLen];

            ReadUnCompressedData(alignmentBlock, 0, blockLen);

            if (!Filter.Accept(alignmentBlock))
            {
                return(null);
            }

            int value;
            // 8 - 12 bytes "bin<<16|mapQual<<8|read_name_len"
            var unsignedValue = Helper.GetUInt32(alignmentBlock, 8);

            // 8th bytes
            var queryNameLen = (int)(unsignedValue & 0x000000FF);

            // 32-(32+readLen) bytes
            var qname = Encoding.ASCII.GetString(alignmentBlock, 32, queryNameLen - 1);

            if (IgnoreQuery.Contains(qname))
            {
                return(null);
            }

            var result = new SAMItemSlim()
            {
                Qname = qname
            };

            // 12 - 16 bytes
            unsignedValue = Helper.GetUInt32(alignmentBlock, 12);
            // 14-16 bytes
            var flagValue = (int)(unsignedValue & 0xFFFF0000) >> 16;
            var flag      = (SAMFlags)flagValue;

            // 12-14 bytes
            var cigarLen = (int)(unsignedValue & 0x0000FFFF);

            // 16-20 bytes
            var readLen = Helper.GetInt32(alignmentBlock, 16);

            // 32-(32+readLen) bytes
            var startIndex = 32 + queryNameLen + cigarLen * 4;

            var sequence = new StringBuilder();
            var index    = startIndex;

            for (; index < (startIndex + (readLen + 1) / 2) - 1; index++)
            {
                // Get first 4 bit value
                value = (alignmentBlock[index] & 0xF0) >> 4;
                sequence.Append(GetSeqChar(value, result.Qname));
                // Get last 4 bit value
                value = alignmentBlock[index] & 0x0F;
                sequence.Append(GetSeqChar(value, result.Qname));
            }

            value = (alignmentBlock[index] & 0xF0) >> 4;
            sequence.Append(GetSeqChar(value, result.Qname));

            if (readLen % 2 == 0)
            {
                value = alignmentBlock[index] & 0x0F;
                sequence.Append(GetSeqChar(value, result.Qname));
            }

            startIndex = index + 1;
            var qualValues = new StringBuilder();

            if (alignmentBlock[startIndex] != 0xFF)
            {
                for (var i = startIndex; i < (startIndex + readLen); i++)
                {
                    qualValues.Append((char)(alignmentBlock[i] + 33));
                }
            }
            else
            {
                qualValues.Append(SAMParser.AsteriskAsByte);
            }

            if (flag.HasFlag(SAMFlags.QueryOnReverseStrand))
            {
                result.Sequence = SequenceUtils.GetReverseComplementedSequence(sequence.ToString());
                result.Qual     = qualValues.ToString().Reverse();
            }
            else
            {
                result.Sequence = sequence.ToString();
                result.Qual     = qualValues.ToString();
            }

            return(result);
        }