public void Test_against_CSV_Dataset(int numDataBits, Mode mode, ErrorCorrectionLevel level, string encodingName, int expectVersionNum)
        {
            VersionControlStruct vcStruct = VersionControl.InitialSetup(numDataBits, mode, level, encodingName);

            if (vcStruct.VersionDetail.Version != expectVersionNum)
            {
                Assert.Fail("Method return version number: {0} Expect value: {1}", vcStruct.VersionDetail.Version, expectVersionNum);
            }
        }
        /// <summary>
        /// Combine Gma.QrCodeNet.Encoding input recognition method and version control method
        /// with legacy code. To create expected answer.
        /// This is base on assume Gma.QrCodeNet.Encoding input recognition and version control sometime
        /// give different result as legacy code.
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        internal static BitVector DataEncodeUsingReferenceImplementation(string content, ErrorCorrectionLevel ecLevel, out QRCodeInternal qrInternal)
        {
            if (string.IsNullOrEmpty(content))
            {
                throw new ArgumentException("input string content can not be null or empty");
            }

            //Choose mode
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            string            encodingName      = recognitionResult.EncodingName;
            Mode mode = ConvertMode(recognitionResult.Mode);

            //append byte to databits
            BitVector dataBits = new BitVector();

            EncoderInternal.appendBytes(content, mode, dataBits, encodingName);

            int dataBitsLength            = dataBits.size();
            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(dataBitsLength, recognitionResult.Mode, ecLevel, recognitionResult.EncodingName);
            //ECI
            BitVector headerAndDataBits = new BitVector();
            string    defaultByteMode   = "iso-8859-1";

            if (mode == Mode.BYTE && !defaultByteMode.Equals(encodingName))
            {
                CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encodingName);
                if (eci != null)
                {
                    EncoderInternal.appendECI(eci, headerAndDataBits);
                }
            }
            //Mode
            EncoderInternal.appendModeInfo(mode, headerAndDataBits);
            //Char info
            int numLetters = mode.Equals(Mode.BYTE)?dataBits.sizeInBytes():content.Length;

            EncoderInternal.appendLengthInfo(numLetters, vcStruct.VersionDetail.Version, mode, headerAndDataBits);
            //Combine with dataBits
            headerAndDataBits.appendBitVector(dataBits);

            // Terminate the bits properly.
            EncoderInternal.terminateBits(vcStruct.VersionDetail.NumDataBytes, headerAndDataBits);

            qrInternal                 = new QRCodeInternal();
            qrInternal.Version         = vcStruct.VersionDetail.Version;
            qrInternal.MatrixWidth     = vcStruct.VersionDetail.MatrixWidth;
            qrInternal.EcLevelInternal = ErrorCorrectionLevelConverter.ToInternal(ecLevel);
            qrInternal.NumTotalBytes   = vcStruct.VersionDetail.NumTotalBytes;
            qrInternal.NumDataBytes    = vcStruct.VersionDetail.NumDataBytes;
            qrInternal.NumRSBlocks     = vcStruct.VersionDetail.NumECBlocks;
            return(headerAndDataBits);
        }
示例#3
0
        internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel)
        {
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            EncoderBase       encoderBase       = CreateEncoder(recognitionResult.EncodingName);

            BitList encodeContent = encoderBase.GetDataBits(content);

            int encodeContentLength = encodeContent.Count;

            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName);

            BitList dataCodewords = new BitList();

            // Eci header
            if (vcStruct.IsContainECI && !(vcStruct.ECIHeader is null))
            {
                dataCodewords.Add(vcStruct.ECIHeader);
            }

            // Header
            dataCodewords.Add(encoderBase.GetModeIndicator());
            int numLetter = encodeContentLength >> 3;

            dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version));

            // Data
            dataCodewords.Add(encodeContent);

            // Terminator Padding
            dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes);

            int dataCodewordsCount = dataCodewords.Count;

            if ((dataCodewordsCount & 0x7) != 0)
            {
                throw new ArgumentException($"{nameof(dataCodewords)} is not byte sized.");
            }
            else if (dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes)
            {
                throw new ArgumentException($"{nameof(dataCodewords)} num of bytes not equal to {nameof(vcStruct.VersionDetail.NumDataBytes)} for current version");
            }

            var encStruct = new EncodationStruct(vcStruct)
            {
                DataCodewords = dataCodewords
            };

            return(encStruct);
        }
示例#4
0
        internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel)
        {
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            EncoderBase       encoderBase       = CreateEncoder(recognitionResult.EncodingName);

            BitList encodeContent = encoderBase.GetDataBits(content);

            int encodeContentLength = encodeContent.Count;

            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName);

            BitList dataCodewords = new();

            // Eci header
            if (vcStruct.IsContainECI && vcStruct.ECIHeader is { })
示例#5
0
        internal static EncodationStruct Encode(IEnumerable <byte> content, ErrorCorrectionLevel eclevel)
        {
            EncoderBase encoderBase = CreateEncoder(QRCodeConstantVariable.DefaultEncoding);

            BitList encodeContent = new BitList(content);

            int encodeContentLength = encodeContent.Count;

            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(encodeContentLength, eclevel, QRCodeConstantVariable.DefaultEncoding);

            BitList dataCodewords = new BitList();

            //Eci header
            if (vcStruct.IsContainECI && !(vcStruct.ECIHeader is null))
            {
                dataCodewords.Add(vcStruct.ECIHeader);
            }
            //Header
            dataCodewords.Add(encoderBase.GetModeIndicator());
            int numLetter = encodeContentLength >> 3;

            dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version));
            //Data
            dataCodewords.Add(encodeContent);
            //Terminator Padding
            dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes);

            int dataCodewordsCount = dataCodewords.Count;

            if ((dataCodewordsCount & 0x7) != 0)
            {
                throw new ArgumentException("data codewords is not byte sized.");
            }
            else if (dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes)
            {
                throw new ArgumentException("datacodewords num of bytes not equal to NumDataBytes for current version");
            }

            var encStruct = new EncodationStruct(vcStruct)
            {
                DataCodewords = dataCodewords
            };

            return(encStruct);
        }
        public void Test_against_reference_implementation(int numDataBits, Mode mode, ErrorCorrectionLevel level, string encodingName)
        {
            VersionControlStruct vcStruct    = VersionControl.InitialSetup(numDataBits, mode, level, encodingName);
            VersionCheckStatus   checkStatus = VersionTest.VersionCheck(vcStruct.VersionDetail.Version, numDataBits, mode, level, encodingName);

            switch (checkStatus)
            {
            case VersionCheckStatus.LargerThanExpect:
                Assert.Fail("Version {0} size not enough", vcStruct.VersionDetail.Version);
                break;

            case VersionCheckStatus.SmallerThanExpect:
                Assert.Fail("Version{0}'s size too big", vcStruct.VersionDetail.Version);
                break;

            default:
                break;
            }
        }
        private void PTest(int contentLength)
        {
            Stopwatch sw          = new Stopwatch();
            int       timesofTest = 1000;

            string[] timeElapsed = new string[2];
            sw.Start();

            for (int i = 0; i < timesofTest; i++)
            {
                VersionControl.InitialSetup(contentLength, Mode.Alphanumeric, ErrorCorrectionLevel.H, QRCodeConstantVariable.DefaultEncoding);
            }

            sw.Stop();

            timeElapsed[0] = sw.ElapsedMilliseconds.ToString();

            sw.Reset();

            QRCodeInternal qrInternal = new QRCodeInternal();

            int byteLength = contentLength / 8;

            sw.Start();

            for (int i = 0; i < timesofTest; i++)
            {
                EncoderInternal.initQRCode(byteLength, ErrorCorrectionLevelInternal.H, ZMode.ALPHANUMERIC, qrInternal);
            }

            sw.Stop();

            timeElapsed[1] = sw.ElapsedMilliseconds.ToString();


            Assert.Pass("VersionControl {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]);
        }