pax_global_header 0000666 0000000 0000000 00000000064 13771636311 0014522 g ustar 00root root 0000000 0000000 52 comment=a14d7d5fc00cf1bb6a662fcfc698c50ae2dd3fee
rqrcode_core-0.2.0/ 0000775 0000000 0000000 00000000000 13771636311 0014170 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/.github/ 0000775 0000000 0000000 00000000000 13771636311 0015530 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/.github/workflows/ 0000775 0000000 0000000 00000000000 13771636311 0017565 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/.github/workflows/ruby.yml 0000664 0000000 0000000 00000001221 13771636311 0021265 0 ustar 00root root 0000000 0000000 name: rqrcode_core
on:
push:
branches:
- master
- release/*
pull_request:
branches:
- master
jobs:
build:
name: Test Ruby ${{ matrix.ruby_version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
ruby_version: [2.5.x, 2.6.x]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v1
- name: Use Ruby ${{ matrix.ruby_version }}
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
- name: Gem install and test
run: |
gem install bundler
bundle install --jobs 4 --retry 3
bundle exec rake test
rqrcode_core-0.2.0/.gitignore 0000664 0000000 0000000 00000000131 13771636311 0016153 0 ustar 00root root 0000000 0000000 /.bundle/
/.yardoc
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
/.devcontainer/
rqrcode_core-0.2.0/Gemfile 0000664 0000000 0000000 00000000141 13771636311 0015457 0 ustar 00root root 0000000 0000000 source "https://rubygems.org"
# Specify your gem's dependencies in rqrcode-base.gemspec
gemspec
rqrcode_core-0.2.0/Gemfile.lock 0000664 0000000 0000000 00000000410 13771636311 0016405 0 ustar 00root root 0000000 0000000 PATH
remote: .
specs:
rqrcode_core (0.2.0)
GEM
remote: https://rubygems.org/
specs:
minitest (5.11.3)
rake (13.0.1)
PLATFORMS
ruby
DEPENDENCIES
bundler (>= 2.0)
minitest (~> 5.0)
rake (~> 13.0)
rqrcode_core!
BUNDLED WITH
2.2.3
rqrcode_core-0.2.0/LICENSE.txt 0000664 0000000 0000000 00000002073 13771636311 0016015 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2008 Duncan Robertson
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
rqrcode_core-0.2.0/README.md 0000664 0000000 0000000 00000005133 13771636311 0015451 0 ustar 00root root 0000000 0000000 
# RQRCodeCore
`rqrcode_core` is a library for encoding QR codes in pure Ruby. It has a simple interface with all the standard qrcode options. It was originally adapted in 2008 from a Javascript library by [Kazuhiko Arase](https://github.com/kazuhikoarase).
Features:
* `rqrcode_core` is a ruby only library. It requires no native libraries. Just Ruby!
* It is an encoding library. You can't decode QR codes with it.
* The interface is simple and assumes you just want to encode a string into a QR code.
* QR code is trademarked by Denso Wave inc.
`rqrcode_core` is the basis of the popular `rqrcode` gem [https://github.com/whomwah/rqrcode]. This gem allows you to generate different renderings of your QR code, including `png`, `svg` and `ansi`.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'rqrcode_core'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install rqrcode_core
## Basic Usage
```ruby
$ require 'rqrcode_core'
$ qr = RQRCodeCore::QRCode.new('my string to generate', size: 4, level: :h)
$ puts qr.to_s
```
Output:
```
xxxxxxx x x x x x xx xxxxxxx
x x xxx xxxxxx xxx x x
x xxx x xxxxx x xx x xxx x
... etc
```
## Doing your own rendering
```ruby
require 'rqrcode_core'
qr = RQRCodeCore::QRCode.new('my string to generate', size: 4, level: :h)
qr.modules.each do |row|
row.each do |col|
print col ? '#' : ' '
end
print "\n"
end
```
### Options
The library expects a string to be parsed in, other args are optional.
```
string - the string you wish to encode
size - the size of the qrcode (default 4)
level - the error correction level, can be:
* Level :l 7% of code can be restored
* Level :m 15% of code can be restored
* Level :q 25% of code can be restored
* Level :h 30% of code can be restored (default :h)
mode - the mode of the qrcode (defaults to alphanumeric or byte_8bit, depending on the input data):
* :number
* :alphanumeric
* :byte_8bit
* :kanji
```
#### Example
```
qr = RQRCodeCore::QRCode.new('hello world', size: 1, level: :m, mode: :alphanumeric)
```
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/whomwah/rqrcode_core.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
rqrcode_core-0.2.0/Rakefile 0000664 0000000 0000000 00000000306 13771636311 0015634 0 ustar 00root root 0000000 0000000 require "bundler/gem_tasks"
require "rake/testtask"
Rake::TestTask.new(:test) do |t|
t.libs << "test"
t.libs << "lib"
t.test_files = FileList["test/**/*_test.rb"]
end
task :default => :test
rqrcode_core-0.2.0/bin/ 0000775 0000000 0000000 00000000000 13771636311 0014740 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/bin/console 0000775 0000000 0000000 00000000533 13771636311 0016331 0 ustar 00root root 0000000 0000000 #!/usr/bin/env ruby
require "bundler/setup"
require "rqrcode_core"
# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.
# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start
require "irb"
IRB.start(__FILE__)
rqrcode_core-0.2.0/bin/setup 0000775 0000000 0000000 00000000203 13771636311 0016021 0 ustar 00root root 0000000 0000000 #!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx
bundle install
# Do any other automated setup that you need to do here
rqrcode_core-0.2.0/lib/ 0000775 0000000 0000000 00000000000 13771636311 0014736 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/lib/rqrcode_core.rb 0000664 0000000 0000000 00000000167 13771636311 0017736 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
require "rqrcode_core/qrcode"
require "rqrcode_core/version"
end
rqrcode_core-0.2.0/lib/rqrcode_core/ 0000775 0000000 0000000 00000000000 13771636311 0017405 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/lib/rqrcode_core/qrcode.rb 0000664 0000000 0000000 00000000625 13771636311 0021212 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
require 'rqrcode_core/qrcode/qr_8bit_byte'
require 'rqrcode_core/qrcode/qr_alphanumeric'
require 'rqrcode_core/qrcode/qr_bit_buffer'
require 'rqrcode_core/qrcode/qr_code'
require 'rqrcode_core/qrcode/qr_math'
require 'rqrcode_core/qrcode/qr_numeric'
require 'rqrcode_core/qrcode/qr_polynomial'
require 'rqrcode_core/qrcode/qr_rs_block'
require 'rqrcode_core/qrcode/qr_util'
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/ 0000775 0000000 0000000 00000000000 13771636311 0020662 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_8bit_byte.rb 0000664 0000000 0000000 00000000603 13771636311 0023601 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QR8bitByte
attr_reader :mode
def initialize( data )
@mode = QRMODE[:mode_8bit_byte]
@data = data;
end
def get_length
@data.bytesize
end
def write( buffer)
buffer.byte_encoding_start(get_length)
@data.each_byte do |b|
buffer.put(b, 8)
end
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_alphanumeric.rb 0000664 0000000 0000000 00000002171 13771636311 0024362 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
ALPHANUMERIC = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ','$','%','*','+','-','.','/',':']
class QRAlphanumeric
attr_reader :mode
def initialize( data )
@mode = QRMODE[:mode_alpha_numk]
raise QRCodeArgumentError, "Not a alpha numeric uppercase string `#{data}`" unless QRAlphanumeric.valid_data?(data)
@data = data;
end
def get_length
@data.size
end
def self.valid_data? data
data.each_char do |s|
return false if ALPHANUMERIC.index(s).nil?
end
true
end
def write( buffer)
buffer.alphanumeric_encoding_start(get_length)
(@data.size).times do |i|
if i % 2 == 0
if i == (@data.size - 1)
value = ALPHANUMERIC.index(@data[i])
buffer.put( value, 6 )
else
value = (ALPHANUMERIC.index(@data[i]) * 45) + ALPHANUMERIC.index(@data[i+1])
buffer.put( value, 11 )
end
end
end
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_bit_buffer.rb 0000664 0000000 0000000 00000003352 13771636311 0024023 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QRBitBuffer
attr_reader :buffer
PAD0 = 0xEC
PAD1 = 0x11
def initialize(version)
@version = version
@buffer = []
@length = 0
end
def get( index )
buf_index = (index / 8).floor
(( QRUtil.rszf(@buffer[buf_index], 7 - index % 8)) & 1) == 1
end
def put( num, length )
( 0...length ).each do |i|
put_bit(((QRUtil.rszf(num, length - i - 1)) & 1) == 1)
end
end
def get_length_in_bits
@length
end
def put_bit( bit )
buf_index = ( @length / 8 ).floor
if @buffer.size <= buf_index
@buffer << 0
end
if bit
@buffer[buf_index] |= (QRUtil.rszf(0x80, @length % 8))
end
@length += 1
end
def byte_encoding_start(length)
put( QRMODE[:mode_8bit_byte], 4 )
put(length, QRUtil.get_length_in_bits(QRMODE[:mode_8bit_byte], @version))
end
def alphanumeric_encoding_start(length)
put( QRMODE[:mode_alpha_numk], 4 )
put(length, QRUtil.get_length_in_bits(QRMODE[:mode_alpha_numk], @version))
end
def numeric_encoding_start(length)
put( QRMODE[:mode_number], 4 )
put(length, QRUtil.get_length_in_bits(QRMODE[:mode_number], @version))
end
def pad_until(prefered_size)
# Align on byte
while get_length_in_bits % 8 != 0
put_bit( false )
end
# Pad with padding code words
while get_length_in_bits < prefered_size
put( QRBitBuffer::PAD0, 8 )
put( QRBitBuffer::PAD1, 8 ) if get_length_in_bits < prefered_size
end
end
def end_of_message(max_data_bits)
put( 0, 4 ) unless get_length_in_bits+4 > max_data_bits
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_code.rb 0000664 0000000 0000000 00000044257 13771636311 0022637 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
QRMODE = {
:mode_number => 1 << 0,
:mode_alpha_numk => 1 << 1,
:mode_8bit_byte => 1 << 2,
}
QRMODE_NAME = {
:number => :mode_number,
:alphanumeric => :mode_alpha_numk,
:byte_8bit => :mode_8bit_byte
}
QRERRORCORRECTLEVEL = {
:l => 1,
:m => 0,
:q => 3,
:h => 2
}
QRMASKPATTERN = {
:pattern000 => 0,
:pattern001 => 1,
:pattern010 => 2,
:pattern011 => 3,
:pattern100 => 4,
:pattern101 => 5,
:pattern110 => 6,
:pattern111 => 7
}
QRMASKCOMPUTATIONS = [
Proc.new { |i,j| (i + j) % 2 == 0 },
Proc.new { |i,j| i % 2 == 0 },
Proc.new { |i,j| j % 3 == 0 },
Proc.new { |i,j| (i + j) % 3 == 0 },
Proc.new { |i,j| ((i / 2).floor + (j / 3).floor) % 2 == 0 },
Proc.new { |i,j| (i * j) % 2 + (i * j) % 3 == 0 },
Proc.new { |i,j| ((i * j) % 2 + (i * j) % 3) % 2 == 0 },
Proc.new { |i,j| ((i * j) % 3 + (i + j) % 2) % 2 == 0 },
]
QRPOSITIONPATTERNLENGTH = (7 + 1) * 2 + 1
QRFORMATINFOLENGTH = 15
#http://web.archive.org/web/20110710094955/http://www.denso-wave.com/qrcode/vertable1-e.html
#http://web.archive.org/web/20110710094955/http://www.denso-wave.com/qrcode/vertable2-e.html
#http://web.archive.org/web/20110710094955/http://www.denso-wave.com/qrcode/vertable3-e.html
#http://web.archive.org/web/20110710094955/http://www.denso-wave.com/qrcode/vertable4-e.html
# Each array contains levels max chars from level 1 to level 40
QRMAXDIGITS = {
l: {
mode_number: [
41, 77, 127, 187, 255, 322, 370, 461, 552, 652, 772,
883, 1022, 1101, 1250, 1408, 1548, 1725, 1903, 2061,
2232, 2409, 2620, 2812, 3057, 3283, 3514, 3669, 3909, 4158,
4417, 4686, 4965, 5253, 5529, 5836, 6153, 6479, 6743, 7089
],
mode_alpha_numk: [
25, 47, 77, 114, 154, 195, 224, 279, 335, 395,
468, 535, 619, 667, 758, 854, 938, 1046, 1153, 1249,
1352, 1460, 1588, 1704, 1853, 1990, 2132, 2223, 2369, 2520,
2677, 2840, 3009, 3183, 3351, 3537, 3729, 3927, 4087, 4296
],
mode_8bit_byte: [
17, 32, 53, 78, 106, 134, 154, 192, 230, 271,
321, 367, 425, 458, 520, 586, 644, 718, 792, 858,
929, 1003, 1091, 1171, 1273, 1367, 1465, 1528, 1628, 1732,
1840, 1952, 2068, 2188, 2303, 2431, 2563, 2699, 2809, 2953
],
},
m: {
mode_number: [
34, 63, 101, 149, 202, 255, 293, 365, 432, 513,
604, 691, 796, 871, 991, 1082, 1212, 1346, 1500, 1600,
1708, 1872, 2059, 2188, 2395, 2544, 2701, 2857, 3035, 3289,
3486, 3693, 3909, 4134, 4343, 4588, 4775, 5039, 5313, 5596,
],
mode_alpha_numk: [
20, 38, 61, 90, 122, 154, 178, 221, 262, 311,
366, 419, 483, 528, 600, 656, 734, 816, 909, 970,
1035, 1134, 1248, 1326, 1451, 1542, 1637, 1732, 1839, 1994,
2113, 2238, 2369, 2506, 2632, 2780, 2894, 3054, 3220, 3391
],
mode_8bit_byte: [
14, 26, 42, 62, 84, 106, 122, 152, 180, 213,
251, 287, 331, 362, 412, 450, 504, 560, 624, 666,
711, 779, 857, 911, 997, 1059, 1125, 1190, 1264, 1370,
1452, 1538, 1628, 1722, 1809, 1911, 1989, 2099, 2213, 2331
],
},
q: {
mode_number: [
27, 48, 77, 111, 144, 178, 207, 259, 312, 364,
427, 489, 580, 621, 703, 775, 876, 948, 1063, 1159,
1224, 1358, 1468, 1588, 1718, 1804, 1933, 2085, 2181, 2358,
2473, 2670, 2805, 2949, 3081, 3244, 3417, 3599, 3791, 3993
],
mode_alpha_numk: [
16, 29, 47, 67, 87, 108, 125, 157, 189, 221,
259, 296, 352, 376, 426, 470, 531, 574, 644, 702,
742, 823, 890, 963, 1041, 1094, 1172, 1263, 1322, 1429,
1499, 1618, 1700, 1787, 1867, 1966, 2071, 2181, 2298, 2420
],
mode_8bit_byte: [
11, 20, 32, 46, 60, 74, 86, 108, 130, 151,
177, 203, 241, 258, 292, 22, 364, 394, 442, 482,
509, 565, 611, 661, 715, 751, 805, 868, 908, 982,
1030, 1112, 1168, 1228, 1283, 1351, 1423, 1499, 1579, 1663
],
},
h: {
mode_number: [
17, 34, 58, 82, 106, 139, 154, 202, 235, 288, 331, 374, 427, 468, 530, 602, 674,
331, 374, 427, 468, 530, 602, 674, 746, 813, 919,
969, 1056, 1108, 1228, 1286, 1425, 1501, 1581, 1677, 1782,
1897, 2022, 2157, 2301, 2361, 2524, 2625, 2735, 2927, 3057
],
mode_alpha_numk: [
10, 20, 35, 50, 64, 84, 93, 122, 143, 174, 200,
200, 227, 259, 283, 321, 365, 408, 452, 493, 557,
587, 640, 672, 744, 779, 864, 910, 958, 1016, 1080,
1150, 1226, 1307, 1394, 1431, 1530, 1591, 1658, 1774, 1852
],
mode_8bit_byte: [
7, 14, 24, 34, 44, 58, 64, 84, 98, 119,
137, 155, 177, 194, 220, 250, 280, 310, 338, 382,
403, 439, 461, 511, 535, 593, 625, 658, 698, 742,
790, 842, 898, 958, 983, 1051, 1093, 1139, 1219, 1273
],
},
}
# StandardErrors
class QRCodeArgumentError < ArgumentError; end
class QRCodeRunTimeError < RuntimeError; end
# == Creation
#
# QRCode objects expect only one required constructor parameter
# and an optional hash of any other. Here's a few examples:
#
# qr = RQRCodeCore::QRCode.new('hello world')
# qr = RQRCodeCore::QRCode.new('hello world', size: 1, level: :m, mode: :alphanumeric)
#
class QRCode
attr_reader :modules, :module_count, :version
# Expects a string to be parsed in, other args are optional
#
# # string - the string you wish to encode
# # size - the size of the qrcode (default 4)
# # level - the error correction level, can be:
# * Level :l 7% of code can be restored
# * Level :m 15% of code can be restored
# * Level :q 25% of code can be restored
# * Level :h 30% of code can be restored (default :h)
# # mode - the mode of the qrcode (defaults to alphanumeric or byte_8bit, depending on the input data):
# * :number
# * :alphanumeric
# * :byte_8bit
# * :kanji
#
# qr = RQRCodeCore::QRCode.new('hello world', size: 1, level: :m, mode: :alphanumeric)
#
def initialize( string, *args )
if !string.is_a? String
raise QRCodeArgumentError, "The passed data is #{string.class}, not String"
end
options = extract_options!(args)
level = (options[:level] || :h).to_sym
if !QRERRORCORRECTLEVEL.has_key?(level)
raise QRCodeArgumentError, "Unknown error correction level `#{level.inspect}`"
end
@data = string
mode = QRMODE_NAME[(options[:mode] || '').to_sym]
# If mode is not explicitely given choose mode according to data type
mode ||= case
when RQRCodeCore::QRNumeric.valid_data?(@data)
QRMODE_NAME[:number]
when QRAlphanumeric.valid_data?(@data)
QRMODE_NAME[:alphanumeric]
else
QRMODE_NAME[:byte_8bit]
end
max_size_array = QRMAXDIGITS[level][mode]
size = options[:size] || smallest_size_for(string, max_size_array)
if size > QRUtil.max_size
raise QRCodeArgumentError, "Given size greater than maximum possible size of #{QRUtil.max_size}"
end
@error_correct_level = QRERRORCORRECTLEVEL[level]
@version = size
@module_count = @version * 4 + QRPOSITIONPATTERNLENGTH
@modules = Array.new( @module_count )
@data_list =
case mode
when :mode_number
QRNumeric.new( @data )
when :mode_alpha_numk
QRAlphanumeric.new( @data )
else
QR8bitByte.new( @data )
end
@data_cache = nil
self.make
end
# checked? is called with a +col+ and +row+ parameter. This will
# return true or false based on whether that coordinate exists in the
# matrix returned. It would normally be called while iterating through
# modules. A simple example would be:
#
# instance.checked?( 10, 10 ) => true
#
def checked?( row, col )
if !row.between?(0, @module_count - 1) || !col.between?(0, @module_count - 1)
raise QRCodeRunTimeError, "Invalid row/column pair: #{row}, #{col}"
end
@modules[row][col]
end
alias_method :dark?, :checked?
extend Gem::Deprecate
deprecate :dark?, :checked?, 2020, 1
# This is a public method that returns the QR Code you have
# generated as a string. It will not be able to be read
# in this format by a QR Code reader, but will give you an
# idea if the final outout. It takes two optional args
# +:true+ and +:false+ which are there for you to choose
# how the output looks. Here's an example of it's use:
#
# instance.to_s =>
# xxxxxxx x x x x x xx xxxxxxx
# x x xxx xxxxxx xxx x x
# x xxx x xxxxx x xx x xxx x
#
# instance.to_s( dark: 'E', light: 'Q' ) =>
# EEEEEEEQEQQEQEQQQEQEQQEEQQEEEEEEE
# EQQQQQEQQEEEQQEEEEEEQEEEQQEQQQQQE
# EQEEEQEQQEEEEEQEQQQQQQQEEQEQEEEQE
#
def to_s( *args )
options = extract_options!(args)
dark = options[:dark] || options[:true] || 'x'
light = options[:light] || options[:false] || ' '
quiet_zone_size = options[:quiet_zone_size] || 0
rows = []
@modules.each do |row|
cols = light * quiet_zone_size
row.each do |col|
cols += (col ? dark : light)
end
rows << cols
end
quiet_zone_size.times do
rows.unshift(light * (rows.first.length / light.size))
rows << light * (rows.first.length / light.size)
end
rows.join("\n")
end
# Public overide as default inspect is very verbose
#
# RQRCodeCore::QRCode.new('my string to generate', size: 4, level: :h)
# => QRCodeCore: @data='my string to generate', @error_correct_level=2, @version=4, @module_count=33
#
def inspect
"QRCodeCore: @data='#{@data}', @error_correct_level=#{@error_correct_level}, @version=#{@version}, @module_count=#{@module_count}"
end
# Return a symbol for current error connection level
def error_correction_level
QRERRORCORRECTLEVEL.invert[@error_correct_level]
end
# Return a symbol in QRMODE.keys for current mode used
def mode
case @data_list
when QRNumeric
:mode_number
when QRAlphanumeric
:mode_alpha_numk
else
:mode_8bit_byte
end
end
protected
def make #:nodoc:
prepare_common_patterns
make_impl( false, get_best_mask_pattern )
end
private
def prepare_common_patterns
@modules.map! { |row| Array.new(@module_count) }
place_position_probe_pattern(0, 0)
place_position_probe_pattern(@module_count - 7, 0)
place_position_probe_pattern(0, @module_count - 7)
place_position_adjust_pattern
place_timing_pattern
@common_patterns = @modules.map(&:clone)
end
def make_impl( test, mask_pattern ) #:nodoc:
@modules = @common_patterns.map(&:clone)
place_format_info(test, mask_pattern)
place_version_info(test) if @version >= 7
if @data_cache.nil?
@data_cache = QRCode.create_data(
@version, @error_correct_level, @data_list
)
end
map_data( @data_cache, mask_pattern )
end
def place_position_probe_pattern( row, col ) #:nodoc:
(-1..7).each do |r|
next if !(row + r).between?(0, @module_count - 1)
(-1..7).each do |c|
next if !(col + c).between?(0, @module_count - 1)
is_vert_line = (r.between?(0, 6) && (c == 0 || c == 6))
is_horiz_line = (c.between?(0, 6) && (r == 0 || r == 6))
is_square = r.between?(2,4) && c.between?(2, 4)
is_part_of_probe = is_vert_line || is_horiz_line || is_square
@modules[row + r][col + c] = is_part_of_probe
end
end
end
def get_best_mask_pattern #:nodoc:
min_lost_point = 0
pattern = 0
( 0...8 ).each do |i|
make_impl( true, i )
lost_point = QRUtil.get_lost_points(self.modules)
if i == 0 || min_lost_point > lost_point
min_lost_point = lost_point
pattern = i
end
end
pattern
end
def place_timing_pattern #:nodoc:
( 8...@module_count - 8 ).each do |i|
@modules[i][6] = @modules[6][i] = i % 2 == 0
end
end
def place_position_adjust_pattern #:nodoc:
positions = QRUtil.get_pattern_positions(@version)
positions.each do |row|
positions.each do |col|
next unless @modules[row][col].nil?
( -2..2 ).each do |r|
( -2..2 ).each do |c|
is_part_of_pattern = (r.abs == 2 || c.abs == 2 || ( r == 0 && c == 0 ))
@modules[row + r][col + c] = is_part_of_pattern
end
end
end
end
end
def place_version_info(test) #:nodoc:
bits = QRUtil.get_bch_version(@version)
( 0...18 ).each do |i|
mod = ( !test && ( (bits >> i) & 1) == 1 )
@modules[ (i / 3).floor ][ i % 3 + @module_count - 8 - 3 ] = mod
@modules[ i % 3 + @module_count - 8 - 3 ][ (i / 3).floor ] = mod
end
end
def place_format_info(test, mask_pattern) #:nodoc:
data = (@error_correct_level << 3 | mask_pattern)
bits = QRUtil.get_bch_format_info(data)
QRFORMATINFOLENGTH.times do |i|
mod = (!test && ( (bits >> i) & 1) == 1)
# vertical
if i < 6
row = i
elsif i < 8
row = i + 1
else
row = @module_count - 15 + i
end
@modules[row][8] = mod
# horizontal
if i < 8
col = @module_count - i - 1
elsif i < 9
col = 15 - i - 1 + 1
else
col = 15 - i - 1
end
@modules[8][col] = mod
end
# fixed module
@modules[ @module_count - 8 ][8] = !test
end
def map_data( data, mask_pattern ) #:nodoc:
inc = -1
row = @module_count - 1
bit_index = 7
byte_index = 0
( @module_count - 1 ).step( 1, -2 ) do |col|
col = col - 1 if col <= 6
while true do
( 0...2 ).each do |c|
if @modules[row][ col - c ].nil?
dark = false
if byte_index < data.size && !data[byte_index].nil?
dark = (( QRUtil.rszf(data[byte_index], bit_index) & 1) == 1 )
end
mask = QRUtil.get_mask( mask_pattern, row, col - c )
dark = !dark if mask
@modules[row][ col - c ] = dark
bit_index -= 1
if bit_index == -1
byte_index += 1
bit_index = 7
end
end
end
row += inc
if row < 0 || @module_count <= row
row -= inc
inc = -inc
break
end
end
end
end
def smallest_size_for(string, max_size_array) #:nodoc:
l = string.bytesize
ver = max_size_array.index{|i| i >= l}
raise QRCodeRunTimeError,"code length overflow. (#{l} digits > any version capacity)" unless ver
ver + 1
end
def extract_options!(arr) #:nodoc:
arr.last.is_a?(::Hash) ? arr.pop : {}
end
def QRCode.count_max_data_bits(rs_blocks)
max_data_bytes = rs_blocks.reduce(0) do |sum, rs_block|
sum + rs_block.data_count
end
return max_data_bytes * 8
end
def QRCode.create_data(version, error_correct_level, data_list) #:nodoc:
rs_blocks = QRRSBlock.get_rs_blocks(version, error_correct_level)
max_data_bits = QRCode.count_max_data_bits(rs_blocks)
buffer = QRBitBuffer.new(version)
data_list.write(buffer)
buffer.end_of_message(max_data_bits)
if buffer.get_length_in_bits > max_data_bits
raise QRCodeRunTimeError, "code length overflow. (#{buffer.get_length_in_bits}>#{max_data_bits}). (Try a larger size!)"
end
buffer.pad_until(max_data_bits)
QRCode.create_bytes( buffer, rs_blocks )
end
def QRCode.create_bytes( buffer, rs_blocks ) #:nodoc:
offset = 0
max_dc_count = 0
max_ec_count = 0
dcdata = Array.new( rs_blocks.size )
ecdata = Array.new( rs_blocks.size )
rs_blocks.each_with_index do |rs_block, r|
dc_count = rs_block.data_count
ec_count = rs_block.total_count - dc_count
max_dc_count = [ max_dc_count, dc_count ].max
max_ec_count = [ max_ec_count, ec_count ].max
dcdata_block = Array.new(dc_count)
dcdata_block.size.times do |i|
dcdata_block[i] = 0xff & buffer.buffer[ i + offset ]
end
dcdata[r] = dcdata_block
offset = offset + dc_count
rs_poly = QRUtil.get_error_correct_polynomial( ec_count )
raw_poly = QRPolynomial.new( dcdata[r], rs_poly.get_length - 1 )
mod_poly = raw_poly.mod( rs_poly )
ecdata_block = Array.new(rs_poly.get_length - 1)
ecdata_block.size.times do |i|
mod_index = i + mod_poly.get_length - ecdata_block.size
ecdata_block[i] = mod_index >= 0 ? mod_poly.get( mod_index ) : 0
end
ecdata[r] = ecdata_block
end
total_code_count = rs_blocks.reduce(0) do |sum, rs_block|
sum + rs_block.total_count
end
data = Array.new( total_code_count )
index = 0
max_dc_count.times do |i|
rs_blocks.size.times do |r|
if i < dcdata[r].size
data[index] = dcdata[r][i]
index += 1
end
end
end
max_ec_count.times do |i|
rs_blocks.size.times do |r|
if i < ecdata[r].size
data[index] = ecdata[r][i]
index += 1
end
end
end
data
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_math.rb 0000664 0000000 0000000 00000001513 13771636311 0022642 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QRMath
module_eval {
exp_table = Array.new(256)
log_table = Array.new(256)
( 0...8 ).each do |i|
exp_table[i] = 1 << i
end
( 8...256 ).each do |i|
exp_table[i] = exp_table[i - 4] \
^ exp_table[i - 5] \
^ exp_table[i - 6] \
^ exp_table[i - 8]
end
( 0...255 ).each do |i|
log_table[exp_table[i] ] = i
end
EXP_TABLE = exp_table
LOG_TABLE = log_table
}
class << self
def glog(n)
raise QRCodeRunTimeError, "glog(#{n})" if ( n < 1 )
LOG_TABLE[n]
end
def gexp(n)
while n < 0
n = n + 255
end
while n >= 256
n = n - 255
end
EXP_TABLE[n]
end
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_numeric.rb 0000664 0000000 0000000 00000002013 13771636311 0023347 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
NUMERIC = ['0','1','2','3','4','5','6','7','8','9'].freeze
class QRNumeric
attr_reader :mode
def initialize( data )
@mode = QRMODE[:mode_number]
raise QRCodeArgumentError, "Not a numeric string `#{data}`" unless QRNumeric.valid_data?(data)
@data = data;
end
def get_length
@data.size
end
def self.valid_data? data
data.each_char do |s|
return false if NUMERIC.index(s).nil?
end
true
end
def write( buffer)
buffer.numeric_encoding_start(get_length)
(@data.size).times do |i|
if i % 3 == 0
chars = @data[i, 3]
bit_length = get_bit_length(chars.length)
buffer.put( get_code(chars), bit_length )
end
end
end
private
NUMBER_LENGTH = {
3 => 10,
2 => 7,
1 => 4
}.freeze
def get_bit_length(length)
NUMBER_LENGTH[length]
end
def get_code(chars)
chars.to_i
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_polynomial.rb 0000664 0000000 0000000 00000002517 13771636311 0024101 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QRPolynomial
def initialize( num, shift )
raise QRCodeRunTimeError, "#{num.size}/#{shift}" if num.empty?
offset = 0
while offset < num.size && num[offset] == 0
offset = offset + 1
end
@num = Array.new( num.size - offset + shift )
( 0...num.size - offset ).each do |i|
@num[i] = num[i + offset]
end
end
def get( index )
@num[index]
end
def get_length
@num.size
end
def multiply( e )
num = Array.new( get_length + e.get_length - 1 )
( 0...get_length ).each do |i|
( 0...e.get_length ).each do |j|
tmp = num[i + j].nil? ? 0 : num[i + j]
num[i + j] = tmp ^ QRMath.gexp(QRMath.glog( get(i) ) + QRMath.glog(e.get(j)))
end
end
return QRPolynomial.new( num, 0 )
end
def mod( e )
if get_length - e.get_length < 0
return self
end
ratio = QRMath.glog(get(0)) - QRMath.glog(e.get(0))
num = Array.new(get_length)
( 0...get_length ).each do |i|
num[i] = get(i)
end
( 0...e.get_length ).each do |i|
tmp = num[i].nil? ? 0 : num[i]
num[i] = tmp ^ QRMath.gexp(QRMath.glog(e.get(i)) + ratio)
end
return QRPolynomial.new( num, 0 ).mod(e)
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_rs_block.rb 0000664 0000000 0000000 00000015053 13771636311 0023513 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QRRSBlock
attr_reader :data_count, :total_count
def initialize( total_count, data_count )
@total_count = total_count
@data_count = data_count
end
# http://www.thonky.com/qr-code-tutorial/error-correction-table/
RQRCodeCore::QRRSBlock::RS_BLOCK_TABLE = [
# L
# M
# Q
# H
# 1
[1, 26, 19],
[1, 26, 16],
[1, 26, 13],
[1, 26, 9],
# 2
[1, 44, 34],
[1, 44, 28],
[1, 44, 22],
[1, 44, 16],
# 3
[1, 70, 55],
[1, 70, 44],
[2, 35, 17],
[2, 35, 13],
# 4
[1, 100, 80],
[2, 50, 32],
[2, 50, 24],
[4, 25, 9],
# 5
[1, 134, 108],
[2, 67, 43],
[2, 33, 15, 2, 34, 16],
[2, 33, 11, 2, 34, 12],
# 6
[2, 86, 68],
[4, 43, 27],
[4, 43, 19],
[4, 43, 15],
# 7
[2, 98, 78],
[4, 49, 31],
[2, 32, 14, 4, 33, 15],
[4, 39, 13, 1, 40, 14],
# 8
[2, 121, 97],
[2, 60, 38, 2, 61, 39],
[4, 40, 18, 2, 41, 19],
[4, 40, 14, 2, 41, 15],
# 9
[2, 146, 116],
[3, 58, 36, 2, 59, 37],
[4, 36, 16, 4, 37, 17],
[4, 36, 12, 4, 37, 13],
# 10
[2, 86, 68, 2, 87, 69],
[4, 69, 43, 1, 70, 44],
[6, 43, 19, 2, 44, 20],
[6, 43, 15, 2, 44, 16],
# 11
[4, 101, 81],
[1, 80, 50, 4, 81, 51],
[4, 50, 22, 4, 51, 23],
[3, 36, 12, 8, 37, 13],
# 12
[2, 116, 92, 2, 117, 93],
[6, 58, 36, 2, 59, 37],
[4, 46, 20, 6, 47, 21],
[7, 42, 14, 4, 43, 15],
# 13
[4, 133, 107],
[8, 59, 37, 1, 60, 38],
[8, 44, 20, 4, 45, 21],
[12, 33, 11, 4, 34, 12],
# 14
[3, 145, 115, 1, 146, 116],
[4, 64, 40, 5, 65, 41],
[11, 36, 16, 5, 37, 17],
[11, 36, 12, 5, 37, 13],
# 15
[5, 109, 87, 1, 110, 88],
[5, 65, 41, 5, 66, 42],
[5, 54, 24, 7, 55, 25],
[11, 36, 12, 7, 37, 13],
# 16
[5, 122, 98, 1, 123, 99],
[7, 73, 45, 3, 74, 46],
[15, 43, 19, 2, 44, 20],
[3, 45, 15, 13, 46, 16],
# 17
[1, 135, 107, 5, 136, 108],
[10, 74, 46, 1, 75, 47],
[1, 50, 22, 15, 51, 23],
[2, 42, 14, 17, 43, 15],
# 18
[5, 150, 120, 1, 151, 121],
[9, 69, 43, 4, 70, 44],
[17, 50, 22, 1, 51, 23],
[2, 42, 14, 19, 43, 15],
# 19
[3, 141, 113, 4, 142, 114],
[3, 70, 44, 11, 71, 45],
[17, 47, 21, 4, 48, 22],
[9, 39, 13, 16, 40, 14],
# 20
[3, 135, 107, 5, 136, 108],
[3, 67, 41, 13, 68, 42],
[15, 54, 24, 5, 55, 25],
[15, 43, 15, 10, 44, 16],
# 21
[4, 144, 116, 4, 145, 117],
[17, 68, 42],
[17, 50, 22, 6, 51, 23],
[19, 46, 16, 6, 47, 17],
# 22
[2, 139, 111, 7, 140, 112],
[17, 74, 46],
[7, 54, 24, 16, 55, 25],
[34, 37, 13],
# 23
[4, 151, 121, 5, 152, 122],
[4, 75, 47, 14, 76, 48],
[11, 54, 24, 14, 55, 25],
[16, 45, 15, 14, 46, 16],
# 24
[6, 147, 117, 4, 148, 118],
[6, 73, 45, 14, 74, 46],
[11, 54, 24, 16, 55, 25],
[30, 46, 16, 2, 47, 17],
# 25
[8, 132, 106, 4, 133, 107],
[8, 75, 47, 13, 76, 48],
[7, 54, 24, 22, 55, 25],
[22, 45, 15, 13, 46, 16],
# 26
[10, 142, 114, 2, 143, 115],
[19, 74, 46, 4, 75, 47],
[28, 50, 22, 6, 51, 23],
[33, 46, 16, 4, 47, 17],
# 27
[8, 152, 122, 4, 153, 123],
[22, 73, 45, 3, 74, 46],
[8, 53, 23, 26, 54, 24],
[12, 45, 15, 28, 46, 16],
# 28
[3, 147, 117, 10, 148, 118],
[3, 73, 45, 23, 74, 46],
[4, 54, 24, 31, 55, 25],
[11, 45, 15, 31, 46, 16],
# 29
[7, 146, 116, 7, 147, 117],
[21, 73, 45, 7, 74, 46],
[1, 53, 23, 37, 54, 24],
[19, 45, 15, 26, 46, 16],
# 30
[5, 145, 115, 10, 146, 116],
[19, 75, 47, 10, 76, 48],
[15, 54, 24, 25, 55, 25],
[23, 45, 15, 25, 46, 16],
# 31
[13, 145, 115, 3, 146, 116],
[2, 74, 46, 29, 75, 47],
[42, 54, 24, 1, 55, 25],
[23, 45, 15, 28, 46, 16],
# 32
[17, 145, 115],
[10, 74, 46, 23, 75, 47],
[10, 54, 24, 35, 55, 25],
[19, 45, 15, 35, 46, 16],
# 33
[17, 145, 115, 1, 146, 116],
[14, 74, 46, 21, 75, 47],
[29, 54, 24, 19, 55, 25],
[11, 45, 15, 46, 46, 16],
# 34
[13, 145, 115, 6, 146, 116],
[14, 74, 46, 23, 75, 47],
[44, 54, 24, 7, 55, 25],
[59, 46, 16, 1, 47, 17],
# 35
[12, 151, 121, 7, 152, 122],
[12, 75, 47, 26, 76, 48],
[39, 54, 24, 14, 55, 25],
[22, 45, 15, 41, 46, 16],
# 36
[6, 151, 121, 14, 152, 122],
[6, 75, 47, 34, 76, 48],
[46, 54, 24, 10, 55, 25],
[2, 45, 15, 64, 46, 16],
# 37
[17, 152, 122, 4, 153, 123],
[29, 74, 46, 14, 75, 47],
[49, 54, 24, 10, 55, 25],
[24, 45, 15, 46, 46, 16],
# 38
[4, 152, 122, 18, 153, 123],
[13, 74, 46, 32, 75, 47],
[48, 54, 24, 14, 55, 25],
[42, 45, 15, 32, 46, 16],
# 39
[20, 147, 117, 4, 148, 118],
[40, 75, 47, 7, 76, 48],
[43, 54, 24, 22, 55, 25],
[10, 45, 15, 67, 46, 16],
# 40
[19, 148, 118, 6, 149, 119],
[18, 75, 47, 31, 76, 48],
[34, 54, 24, 34, 55, 25],
[20, 45, 15, 61, 46, 16]
]
def QRRSBlock.get_rs_blocks(version, error_correct_level)
rs_block = QRRSBlock.get_rs_block_table(version, error_correct_level)
if rs_block.nil?
raise QRCodeRunTimeError,
"bad rsblock @ version: #{version}/error_correct_level:#{error_correct_level}"
end
length = rs_block.size / 3
list = []
( 0...length ).each do |i|
count = rs_block[i * 3 + 0]
total_count = rs_block[i * 3 + 1]
data_count = rs_block[i * 3 + 2]
( 0...count ).each do |j|
list << QRRSBlock.new( total_count, data_count )
end
end
list
end
def QRRSBlock.get_rs_block_table(version, error_correct_level)
case error_correct_level
when QRERRORCORRECTLEVEL[:l]
QRRSBlock::RS_BLOCK_TABLE[(version - 1) * 4 + 0]
when QRERRORCORRECTLEVEL[:m]
QRRSBlock::RS_BLOCK_TABLE[(version - 1) * 4 + 1]
when QRERRORCORRECTLEVEL[:q]
QRRSBlock::RS_BLOCK_TABLE[(version - 1) * 4 + 2]
when QRERRORCORRECTLEVEL[:h]
QRRSBlock::RS_BLOCK_TABLE[(version - 1) * 4 + 3]
else
nil
end
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/qrcode/qr_util.rb 0000664 0000000 0000000 00000015161 13771636311 0022672 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
class QRUtil
PATTERN_POSITION_TABLE = [
[],
[6, 18],
[6, 22],
[6, 26],
[6, 30],
[6, 34],
[6, 22, 38],
[6, 24, 42],
[6, 26, 46],
[6, 28, 50],
[6, 30, 54],
[6, 32, 58],
[6, 34, 62],
[6, 26, 46, 66],
[6, 26, 48, 70],
[6, 26, 50, 74],
[6, 30, 54, 78],
[6, 30, 56, 82],
[6, 30, 58, 86],
[6, 34, 62, 90],
[6, 28, 50, 72, 94],
[6, 26, 50, 74, 98],
[6, 30, 54, 78, 102],
[6, 28, 54, 80, 106],
[6, 32, 58, 84, 110],
[6, 30, 58, 86, 114],
[6, 34, 62, 90, 118],
[6, 26, 50, 74, 98, 122],
[6, 30, 54, 78, 102, 126],
[6, 26, 52, 78, 104, 130],
[6, 30, 56, 82, 108, 134],
[6, 34, 60, 86, 112, 138],
[6, 30, 58, 86, 114, 142],
[6, 34, 62, 90, 118, 146],
[6, 30, 54, 78, 102, 126, 150],
[6, 24, 50, 76, 102, 128, 154],
[6, 28, 54, 80, 106, 132, 158],
[6, 32, 58, 84, 110, 136, 162],
[6, 26, 54, 82, 110, 138, 166],
[6, 30, 58, 86, 114, 142, 170]
]
G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0
G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0
G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1
DEMERIT_POINTS_1 = 3
DEMERIT_POINTS_2 = 3
DEMERIT_POINTS_3 = 40
DEMERIT_POINTS_4 = 10
BITS_FOR_MODE = {
QRMODE[:mode_number] => [10, 12, 14],
QRMODE[:mode_alpha_numk] => [9, 11, 13],
QRMODE[:mode_8bit_byte] => [8, 16, 16],
QRMODE[:mode_kanji] => [8, 10, 12],
}
def QRUtil.max_size
PATTERN_POSITION_TABLE.count
end
def QRUtil.get_bch_format_info( data )
d = data << 10
while QRUtil.get_bch_digit(d) - QRUtil.get_bch_digit(G15) >= 0
d ^= (G15 << (QRUtil.get_bch_digit(d) - QRUtil.get_bch_digit(G15)))
end
(( data << 10 ) | d) ^ G15_MASK
end
def QRUtil.rszf( num, count )
# zero fill right shift
(num >> count) & ((2 ** ((num.size * 8) - count))-1)
end
def QRUtil.get_bch_version(data)
d = data << 12
while QRUtil.get_bch_digit(d) - QRUtil.get_bch_digit(G18) >= 0
d ^= (G18 << (QRUtil.get_bch_digit(d) - QRUtil.get_bch_digit(G18)))
end
( data << 12 ) | d
end
def QRUtil.get_bch_digit( data )
digit = 0
while data != 0
digit = digit + 1
data = QRUtil.rszf( data, 1 )
end
digit
end
def QRUtil.get_pattern_positions(version)
PATTERN_POSITION_TABLE[version - 1]
end
def QRUtil.get_mask( mask_pattern, i, j )
if mask_pattern > QRMASKCOMPUTATIONS.size
raise QRCodeRunTimeError, "bad mask_pattern: #{mask_pattern}"
end
return QRMASKCOMPUTATIONS[mask_pattern].call(i, j)
end
def QRUtil.get_error_correct_polynomial( error_correct_length )
a = QRPolynomial.new( [1], 0 )
( 0...error_correct_length ).each do |i|
a = a.multiply( QRPolynomial.new( [1, QRMath.gexp(i)], 0 ) )
end
a
end
def QRUtil.get_length_in_bits(mode, version)
if !QRMODE.value?(mode)
raise QRCodeRunTimeError, "Unknown mode: #{mode}"
end
if version > 40
raise QRCodeRunTimeError, "Unknown version: #{version}"
end
if version.between?(1, 9)
# 1 - 9
macro_version = 0
elsif version <= 26
# 10 - 26
macro_version = 1
elsif version <= 40
# 27 - 40
macro_version = 2
end
return BITS_FOR_MODE[mode][macro_version]
end
def QRUtil.get_lost_points(modules)
demerit_points = 0
demerit_points += QRUtil.demerit_points_1_same_color(modules)
demerit_points += QRUtil.demerit_points_2_full_blocks(modules)
demerit_points += QRUtil.demerit_points_3_dangerous_patterns(modules)
demerit_points += QRUtil.demerit_points_4_dark_ratio(modules)
return demerit_points
end
def QRUtil.demerit_points_1_same_color(modules)
demerit_points = 0
module_count = modules.size
# level1
(0...module_count).each do |row|
(0...module_count).each do |col|
same_count = 0
dark = modules[row][col]
( -1..1 ).each do |r|
next if row + r < 0 || module_count <= row + r
( -1..1 ).each do |c|
next if col + c < 0 || module_count <= col + c
next if r == 0 && c == 0
if dark == modules[row + r][col + c]
same_count += 1
end
end
end
if same_count > 5
demerit_points += (DEMERIT_POINTS_1 + same_count - 5)
end
end
end
return demerit_points
end
def QRUtil.demerit_points_2_full_blocks(modules)
demerit_points = 0
module_count = modules.size
# level 2
(0...(module_count - 1)).each do |row|
(0...(module_count - 1)).each do |col|
count = 0
count += 1 if modules[row][col]
count += 1 if modules[row + 1][col]
count += 1 if modules[row][col + 1]
count += 1 if modules[row + 1][col + 1]
if (count == 0 || count == 4)
demerit_points += DEMERIT_POINTS_2
end
end
end
return demerit_points
end
def QRUtil.demerit_points_3_dangerous_patterns(modules)
demerit_points = 0
module_count = modules.size
# level 3
modules.each do |row|
(module_count - 6).times do |col_idx|
if row[col_idx] &&
!row[col_idx + 1] &&
row[col_idx + 2] &&
row[col_idx + 3] &&
row[col_idx + 4] &&
!row[col_idx + 5] &&
row[col_idx + 6]
demerit_points += DEMERIT_POINTS_3
end
end
end
(0...module_count).each do |col|
(0...(module_count - 6)).each do |row|
if modules[row][col] &&
!modules[row + 1][col] &&
modules[row + 2][col] &&
modules[row + 3][col] &&
modules[row + 4][col] &&
!modules[row + 5][col] &&
modules[row + 6][col]
demerit_points += DEMERIT_POINTS_3
end
end
end
return demerit_points
end
def QRUtil.demerit_points_4_dark_ratio(modules)
# level 4
dark_count = modules.reduce(0) do |sum, col|
sum + col.count(true)
end
ratio = dark_count / (modules.size * modules.size)
ratio_delta = (100 * ratio - 50).abs / 5
demerit_points = ratio_delta * DEMERIT_POINTS_4
return demerit_points
end
end
end
rqrcode_core-0.2.0/lib/rqrcode_core/version.rb 0000664 0000000 0000000 00000000112 13771636311 0021411 0 ustar 00root root 0000000 0000000 # frozen_string_literal: true
module RQRCodeCore
VERSION = "0.2.0"
end
rqrcode_core-0.2.0/rqrcode_core.gemspec 0000664 0000000 0000000 00000002300 13771636311 0020177 0 ustar 00root root 0000000 0000000
lib = File.expand_path("../lib", __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "rqrcode_core/version"
Gem::Specification.new do |spec|
spec.name = "rqrcode_core"
spec.version = RQRCodeCore::VERSION
spec.platform = Gem::Platform::RUBY
spec.authors = ["Duncan Robertson"]
spec.email = ["duncan@whomwah.com"]
spec.summary = "A library to encode QR Codes"
spec.description = <= 2.0"
spec.add_development_dependency "rake", "~> 13.0"
spec.add_development_dependency "minitest", "~> 5.0"
end
rqrcode_core-0.2.0/test/ 0000775 0000000 0000000 00000000000 13771636311 0015147 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/test/rqrcode_core/ 0000775 0000000 0000000 00000000000 13771636311 0017616 5 ustar 00root root 0000000 0000000 rqrcode_core-0.2.0/test/rqrcode_core/data.rb 0000664 0000000 0000000 00000243227 13771636311 0021066 0 ustar 00root root 0000000 0000000 MATRIX_1_H = [[true, true, true, true, true, true, true, false, true, true, false, true, false, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, false, false, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, false, false, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, false, false, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, true, true, false, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, false, true, true, true, false, false, false, false, false, false, false, false], [false, false, false, false, false, true, true, false, false, true, false, true, false, false, true, false, true, false, true, false, true], [true, true, true, true, true, false, false, true, false, false, true, false, false, true, true, false, true, true, true, true, false], [false, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, true, true, true, true, false], [false, true, false, false, true, false, false, false, true, false, false, false, true, false, true, false, true, true, true, false, false], [false, true, true, false, false, true, true, false, true, true, false, false, false, false, false, false, false, true, false, false, true], [false, false, false, false, false, false, false, false, true, true, false, false, false, true, false, false, false, true, false, false, true], [true, true, true, true, true, true, true, false, false, true, false, false, true, false, true, true, false, false, false, true, false], [true, false, false, false, false, false, true, false, true, true, true, false, false, true, false, false, false, true, true, false, false], [true, false, true, true, true, false, true, false, false, false, false, false, false, false, true, false, true, false, false, true, false], [true, false, true, true, true, false, true, false, false, false, true, false, false, true, true, false, true, false, true, false, false], [true, false, true, true, true, false, true, false, false, true, false, false, false, true, false, false, true, false, false, true, true], [true, false, false, false, false, false, true, false, false, true, false, false, true, false, true, true, false, true, true, false, false], [true, true, true, true, true, true, true, false, false, true, false, true, false, false, false, true, false, false, false, true, false]]
MATRIX_3_H = [[true, true, true, true, true, true, true, false, false, true, true, true, true, false, true, true, false, true, true, false, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, false, true, true, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, true, true, true, true, false, false, false, false, true, false, false, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, false, true, false, true, false, false, false, false, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, true, true, false, true, true, true, true, true, false, false, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, false, false, false, true, false, true, true, false, false, true, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, false, true, false, false, false, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false], [false, false, true, true, false, false, true, true, true, false, true, false, false, true, false, true, false, false, false, true, true, true, true, false, true, false, false, false, false], [true, false, true, false, false, true, false, true, false, true, true, false, false, false, true, true, false, false, false, false, false, false, false, false, true, false, false, false, true], [true, false, true, true, false, true, true, false, false, true, true, true, true, true, false, false, true, false, true, false, false, true, true, false, false, true, true, true, false], [false, false, false, false, true, true, false, false, false, true, true, true, true, true, false, false, false, false, false, true, false, false, false, false, false, true, false, false, true], [false, false, true, true, true, true, true, false, false, false, false, true, true, true, false, false, true, true, false, false, false, true, false, false, false, true, false, false, false], [false, true, true, true, true, false, false, true, true, false, true, true, false, true, true, false, true, false, false, false, false, false, false, false, false, true, true, false, false], [false, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, true, true, false, false, false, true, false, true, false, false, false, true, false], [true, false, true, true, true, true, false, true, true, true, false, false, false, true, true, false, false, true, false, true, true, true, true, false, true, true, false, true, true], [false, true, true, true, false, false, true, false, true, true, false, false, false, false, false, false, false, true, false, true, true, true, true, true, false, false, false, true, true], [false, true, true, true, false, true, false, false, true, false, false, true, false, true, false, true, true, true, false, true, true, false, true, true, true, false, true, false, false], [true, false, false, true, false, true, true, false, false, false, false, true, false, false, false, false, true, true, true, true, false, false, true, false, false, false, true, false, false], [false, false, true, true, true, true, false, false, false, true, true, false, true, false, true, true, true, true, true, true, false, false, true, false, true, true, false, false, true], [false, true, false, false, true, false, true, true, false, true, false, true, false, true, false, true, false, true, false, false, true, true, true, true, true, true, false, true, true], [false, false, false, false, false, false, false, false, true, true, false, true, true, true, true, true, false, true, true, true, true, false, false, false, true, true, true, false, false], [true, true, true, true, true, true, true, false, true, false, false, true, false, false, false, false, true, true, true, false, true, false, true, false, true, false, false, false, false], [true, false, false, false, false, false, true, false, false, true, false, false, true, false, true, false, false, true, false, true, true, false, false, false, true, false, false, true, true], [true, false, true, true, true, false, true, false, false, true, false, false, true, true, false, true, false, false, true, false, true, true, true, true, true, false, true, true, false], [true, false, true, true, true, false, true, false, true, false, false, false, true, false, false, false, false, false, true, true, true, true, true, true, true, false, true, false, false], [true, false, true, true, true, false, true, false, true, false, true, true, true, false, true, true, false, true, false, true, false, false, true, true, false, false, false, false, true], [true, false, false, false, false, false, true, false, false, false, false, false, false, true, false, true, true, true, true, true, false, true, false, true, false, false, false, true, false], [true, true, true, true, true, true, true, false, false, false, true, true, true, false, false, true, false, false, true, false, true, true, false, true, false, true, true, true, false]]
MATRIX_5_H = [[true, true, true, true, true, true, true, false, false, true, false, true, false, false, false, false, true, false, false, false, true, false, false, false, true, false, false, true, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, false, true, true, true, false, true, true, true, true, false, false, false, false, true, false, false, false, false, false, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, true, true, false, false, true, false, true, true, false, true, true, true, true, false, false, true, true, false, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, true, false, true, false, true, false, true, false, true, true, false, false, true, true, true, false, false, false, false, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, true, true, false, true, false, false, false, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, true, false, true, true, false, true, true, false, true, true, true, false, false, true, true, true, true, true, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, true, true, false, true, true, false, true, false, true, true, true, false, false, false, false, false, false, false, false], [false, false, false, true, true, false, true, true, false, true, false, true, false, false, true, true, false, true, false, true, false, false, true, true, true, true, true, false, false, false, false, false, false, true, true, false, false], [false, false, false, true, false, true, false, false, false, false, true, true, true, true, false, true, false, true, false, false, true, false, false, false, true, false, true, false, true, false, true, true, false, false, true, true, true], [false, false, false, true, false, false, true, false, true, true, false, false, false, false, true, false, true, true, false, false, true, false, true, false, true, false, true, true, true, true, true, false, false, false, false, true, true], [true, true, true, false, true, false, false, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, true, false, true, false, false, true, true, false, true, false, true], [true, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, false, true, true, false, false, true, false, true, true, true, true, true, false, false, true, true, true, false, true, true, true], [true, false, false, true, true, false, false, false, true, false, false, false, true, false, true, true, true, true, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, true, false, false, true], [true, true, true, true, true, true, true, true, false, true, true, true, false, false, true, false, false, false, false, false, false, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, false], [true, true, false, false, true, true, false, true, false, true, true, false, false, true, true, true, true, false, true, false, false, false, false, true, false, true, true, false, true, false, false, true, false, true, true, false, false], [false, true, true, false, true, false, true, false, true, true, false, false, true, false, false, true, true, true, true, true, true, true, true, true, true, false, false, true, false, false, false, true, true, false, true, false, false], [true, false, false, true, true, true, false, false, false, true, true, false, false, false, false, true, true, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, true, true, false], [false, true, false, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, false, false, false, false, false, false, true, true, false, true, true, true, false, true, false, true, false, true], [true, true, true, false, true, true, false, false, true, true, true, true, true, true, true, true, false, true, true, false, false, false, false, false, false, true, false, true, true, true, true, true, true, false, false, false, false], [false, false, false, false, false, true, true, true, false, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, false, true, false, true, true, true, false, true, true, true], [true, true, true, false, true, true, false, false, true, true, true, true, false, false, false, false, false, true, true, false, true, true, false, false, true, false, false, false, true, true, true, true, true, true, false, false, true], [false, false, true, false, false, false, true, false, false, true, true, true, true, false, true, true, false, true, true, true, false, false, true, false, true, false, true, true, false, true, true, false, false, true, true, false, false], [true, false, true, false, true, false, false, true, false, true, true, false, true, false, false, true, true, false, false, true, true, false, true, true, true, false, true, true, false, false, true, true, true, true, false, true, false], [false, false, false, true, false, true, true, true, false, false, false, false, false, true, false, true, false, false, true, true, true, true, true, false, false, true, true, false, true, true, true, false, true, true, true, false, false], [true, false, true, true, false, true, false, false, true, false, false, false, false, true, false, false, true, true, true, true, false, true, true, false, true, false, false, false, true, true, true, true, true, true, true, false, true], [true, true, true, true, false, false, true, false, true, false, true, false, false, true, false, false, false, true, false, true, false, false, true, false, false, false, true, false, true, false, true, false, false, true, false, true, false], [true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, false, true, true, true, false, false, false, false, false, true, true, true, true, false, true, true, false, true, true, false, false, false], [true, false, true, true, false, false, true, true, false, false, true, false, false, false, true, false, true, false, true, true, false, true, true, true, false, false, false, false, true, true, true, true, true, true, false, false, false], [false, false, false, false, false, false, false, false, true, false, true, false, false, false, true, false, false, false, true, true, false, false, false, true, true, false, false, false, true, false, false, false, true, true, true, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, false, false, true, false, false, false, false, false, false, false, true, true, false, true, true, true, true, false, true, false, true, false, true, true, true], [true, false, false, false, false, false, true, false, false, true, true, false, false, true, false, false, false, true, true, true, true, true, false, false, true, true, false, true, true, false, false, false, true, true, false, true, true], [true, false, true, true, true, false, true, false, true, false, false, true, false, true, true, false, false, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true], [true, false, true, true, true, false, true, false, true, true, true, true, true, true, false, false, false, true, true, true, false, false, true, false, false, true, false, false, false, true, true, true, true, true, false, false, true], [true, false, true, true, true, false, true, false, false, true, true, true, true, false, true, false, false, false, false, true, false, true, false, false, true, true, false, false, true, true, false, false, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, false, true, true, false, false, true, true, true, false, false, false, true, false, false, false, true, false, true, true, true, true, true, false, true, false, true, true], [true, true, true, true, true, true, true, false, false, true, true, false, false, false, true, false, true, false, true, true, false, false, false, false, true, true, false, true, true, false, true, true, true, true, true, false, true]]
MATRIX_10_H = [[true, true, true, true, true, true, true, false, false, true, false, true, true, true, true, false, false, true, false, true, true, false, true, true, false, false, true, true, false, false, false, true, true, false, true, true, false, false, false, false, false, true, false, false, true, true, true, true, false, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, true, true, false, true, false, false, true, false, false, true, false, true, false, false, true, false, false, true, false, true, true, true, true, true, true, true, true, true, true, false, false, true, false, true, false, true, false, true, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, false, false, true, false, false, false, true, false, true, true, false, false, true, true, true, false, true, false, true, false, false, false, false, false, true, true, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, false, false, true, false, false, true, true, true, false, false, false, false, true, false, false, false, true, false, true, true, true, true, true, false, false, true, false, false, true, false, true, true, true, false, false, true, false, true, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, true, false, true, false, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, false, true, true, false, false, true, false, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, true, true, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, true, true, false, true, false, true, false, true, false, true, true, false, false, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, true, true, false, false, false, false, true, true, false, false, false, true, false, false, false, true, false, false, false, false, true, false, true, false, true, false, false, true, false, true, false, false, true, false, false, false, false, false, false, false, false, false], [false, false, true, true, false, false, true, true, true, false, false, true, false, false, false, true, false, true, false, true, false, true, false, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, false, true, false, true, true, true, false, false, true, true, false, true, false, false, false, false], [false, true, true, false, false, false, false, true, false, false, false, false, false, true, true, false, true, false, false, false, true, false, true, false, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, false, false, true, true, false, true, false, true, true, true, true, true, false, true, false], [true, true, false, false, false, true, true, true, false, false, false, false, true, true, false, true, true, false, false, true, true, true, false, true, true, false, false, false, true, true, false, true, true, true, false, true, true, false, true, false, false, true, false, true, false, true, false, true, true, false, true, true, true, true, true, false, true], [true, true, true, true, false, false, false, false, false, false, false, true, false, false, false, true, false, true, false, true, true, false, false, false, true, false, false, false, true, true, false, true, true, false, false, false, true, true, false, false, true, false, false, true, false, false, true, true, true, true, false, false, false, true, true, false, false], [false, true, true, true, true, false, true, true, true, false, false, false, true, false, false, true, true, true, false, false, false, false, true, true, true, false, false, false, true, true, false, true, false, true, false, false, false, true, false, false, true, true, true, true, true, false, false, true, true, true, false, false, false, false, true, false, false], [true, true, true, true, false, true, false, false, true, false, false, false, false, false, false, false, true, true, true, false, false, false, true, false, true, true, true, true, true, true, true, true, false, true, true, false, true, false, true, false, true, true, false, false, false, true, false, true, false, false, true, true, false, true, false, false, true], [false, true, true, true, true, true, true, false, false, true, false, true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, true, false, false, false, true, true, true, true, false, false, true, false, false, true, false, true, false, false, true, false, false, true, false, false, false, true, true, true, false, false, true], [false, true, false, false, true, false, false, false, false, true, false, true, false, false, true, true, false, false, false, false, true, true, false, false, false, false, false, false, true, true, true, false, false, true, false, false, true, true, true, false, false, true, false, true, false, true, false, false, true, true, true, true, false, false, true, false, true], [false, false, true, true, true, true, true, false, true, true, false, false, false, false, false, false, true, true, true, false, true, true, true, false, false, true, true, true, false, true, true, true, false, false, false, false, false, false, false, false, false, true, true, false, true, true, false, true, false, false, false, true, true, false, false, true, false], [true, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false, false, true, true, true, true, false, false, true, true, false, true, false, false, false, false, false, true, false, true, true, true, false, true, true, true, true, true, false, false, false, true, true, true, false, true, false, false, true, true, false, false], [true, true, true, false, false, true, true, true, true, true, false, true, false, false, false, true, true, true, true, true, false, true, true, true, false, false, true, true, false, true, false, true, true, false, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false], [false, true, false, true, true, true, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, false, true, false, false, false, true, false, true, true, true, false, true, false, false, true, false, false, true, true, true, false, true, false, true, false, false, false, true, true, true], [false, false, true, false, false, true, true, false, true, true, true, false, false, true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, false, true, false, true, false, true, false, true, false, false, true, false, true, false, false, true, false, false, true, false, false, false, true, false, false, false, true, false], [true, false, false, false, false, false, false, false, false, true, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, true, false, true, false, false, true, true, true, false, true, true, false, false, false, true, true, false, true, false, true, false, true, false, true, false, false, true, true, true, false, false, false], [false, true, false, true, true, false, true, true, true, true, true, false, true, false, true, true, true, false, true, false, true, false, false, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, true, false, false, true, false, false, false, false, false, true, true, true, true, true, true, false, true], [false, true, false, true, false, false, false, true, false, false, true, true, true, false, false, false, false, false, true, true, true, false, true, false, false, true, false, true, false, false, true, false, true, false, true, false, false, false, true, true, true, false, false, false, false, false, true, false, false, false, true, true, true, true, true, true, false], [true, false, false, false, true, true, true, false, false, false, false, true, false, false, true, false, false, false, false, true, false, false, true, false, true, true, false, false, false, true, true, true, true, true, false, true, true, false, true, true, false, true, true, false, false, false, false, false, true, false, true, true, false, false, true, false, false], [true, false, true, false, true, false, false, true, true, false, true, false, false, true, true, false, false, false, true, false, true, false, false, false, true, true, true, false, true, false, true, true, false, false, false, false, true, true, false, true, false, true, false, true, true, false, false, false, true, true, false, true, false, false, false, true, true], [false, false, true, true, true, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, false, true, true, false, true, false, true, true, false, true, true, true, true, true, false, true, true, false], [true, true, true, false, true, false, false, false, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, false, false, true, true, false, false, false, true, false, true, false, true, false, false, false, false, false, false, true, false, false, false, false, true, true, true, false, false, false, true, true, true, true, false], [false, true, false, false, true, false, true, false, true, true, false, false, false, false, true, true, false, false, true, false, false, true, true, false, false, true, true, false, true, false, true, false, false, false, false, true, false, true, true, false, false, true, true, true, false, false, true, false, true, false, true, false, true, true, true, false, true], [false, true, false, true, true, false, false, false, true, false, true, false, false, false, true, true, true, false, true, false, false, false, false, false, true, true, true, false, false, false, true, true, true, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, false, false, true, true, true, false, false], [true, true, true, false, true, true, true, true, true, true, false, true, false, false, false, false, true, false, false, false, true, false, true, false, true, true, true, true, true, true, true, true, false, true, true, false, false, true, false, true, false, false, true, true, true, true, false, false, true, true, true, true, true, false, false, false, false], [false, false, true, true, true, false, false, true, false, false, true, false, true, false, false, false, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, true, false, true, true, true, false, true, false, false, false, true, false, true, true, false, false, false, true, false, true, false, false, false, true, true, true], [false, true, false, false, true, false, true, false, false, false, true, true, false, true, false, true, true, true, true, true, true, true, false, false, false, true, true, false, false, true, false, false, true, false, true, false, false, true, true, true, false, true, false, true, false, true, true, false, true, true, false, false, true, false, false, true, false], [false, false, true, false, true, false, false, false, true, true, false, false, true, true, true, true, false, false, false, true, false, false, true, true, false, true, true, false, false, false, true, true, true, true, false, false, true, true, true, true, true, false, true, true, false, true, false, true, true, true, false, false, true, false, true, false, false], [false, true, true, false, true, true, true, false, false, false, false, false, true, false, true, false, false, true, true, false, false, false, true, true, false, true, true, false, false, false, true, false, false, false, true, false, true, false, true, true, true, false, false, false, true, true, false, true, false, false, true, false, true, false, false, true, false], [false, false, false, true, true, false, false, false, true, false, false, true, true, false, true, false, true, false, true, false, false, false, true, false, true, false, true, false, false, false, true, true, true, false, true, false, false, true, false, true, true, true, true, true, false, true, false, false, true, false, false, true, false, false, false, true, true], [true, true, true, true, true, false, true, true, true, true, false, true, true, false, false, false, false, true, false, false, true, false, true, true, true, false, false, false, true, false, true, false, true, true, false, false, true, true, false, true, false, false, false, true, true, true, true, true, true, false, false, false, false, true, true, true, true], [false, false, true, false, true, false, false, false, false, false, false, false, true, true, false, true, false, true, true, true, false, false, true, true, true, true, true, true, false, true, false, false, false, false, false, true, false, false, true, true, false, false, true, false, false, true, true, false, true, true, true, false, false, false, true, true, true], [false, false, true, true, false, true, true, false, false, true, false, false, false, true, false, true, false, false, false, true, true, true, false, false, false, false, true, false, false, false, true, false, false, false, true, true, true, false, false, false, true, false, false, false, true, false, true, true, false, true, false, true, true, false, true, true, false], [false, false, false, false, true, true, false, true, true, false, false, false, false, false, true, true, true, false, false, true, true, false, false, false, true, false, false, true, false, true, true, true, true, true, true, true, false, false, false, true, false, false, true, true, false, false, true, false, false, true, false, true, false, true, false, true, false], [true, false, false, false, false, true, true, true, false, false, false, false, true, false, true, true, false, true, false, false, false, true, true, true, true, true, true, false, true, false, false, true, false, true, true, false, false, true, true, true, true, false, false, false, true, false, true, false, false, true, false, false, false, true, false, false, true], [true, true, false, false, false, false, false, true, true, true, false, true, true, false, true, false, true, true, true, false, true, true, false, true, true, false, false, true, false, false, false, false, true, true, true, false, true, true, false, false, false, false, false, false, false, true, false, true, true, true, true, true, false, false, false, true, false], [true, true, true, false, true, false, true, true, false, true, false, false, true, false, false, true, false, false, false, false, false, true, true, true, false, false, false, true, true, true, false, false, true, true, true, false, true, true, false, false, true, true, true, false, false, true, false, true, false, true, false, true, true, true, true, true, true], [true, false, true, true, false, true, false, true, false, true, false, false, false, true, false, true, true, true, true, true, false, false, false, true, true, true, false, true, true, true, true, false, true, false, true, false, true, true, false, true, false, false, true, true, true, true, true, true, false, false, false, true, true, true, false, false, false], [true, true, true, true, false, false, true, true, true, false, false, true, false, true, false, false, false, true, true, true, true, true, false, false, false, false, true, true, false, false, false, true, true, false, true, false, false, true, true, false, true, false, true, true, false, false, false, false, true, true, false, true, true, true, false, false, true], [false, false, true, false, true, true, false, false, true, true, true, true, false, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, false, false, true, true, false, true, false, false, true, true, true, false, false, true, false, true, false, true, false, false, true, true, false, true, false, true, false, true, false], [true, false, true, false, false, true, true, true, true, false, false, true, false, false, true, true, false, true, false, false, false, false, false, false, false, false, true, false, true, true, true, true, false, false, true, true, true, false, true, false, false, true, false, false, true, false, false, true, false, false, true, true, false, true, true, false, true], [true, true, true, true, true, false, false, true, false, false, true, false, true, false, false, true, false, false, true, false, true, false, false, true, false, true, false, true, true, true, false, false, true, false, false, true, true, false, true, false, true, false, false, true, false, true, false, false, true, false, false, false, true, true, true, false, false], [false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, true, false, false, true, false, false, false, true, false, true, true, true, true, true, false, true, false, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false], [false, false, false, false, false, false, false, false, true, true, false, false, true, true, true, false, false, true, true, true, false, false, true, false, false, true, true, false, false, false, true, true, false, true, false, true, true, true, false, false, true, true, false, false, false, true, true, true, true, false, false, false, true, true, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, false, true, false, true, true, false, true, true, false, false, true, true, false, true, true, false, true, false, true, false, true, false, false, false, false, true, false, true, false, true, false, false, true, false, true, true, true, false, true, false, true, true, false, false, true], [true, false, false, false, false, false, true, false, false, false, false, true, true, true, false, false, true, false, false, true, true, true, true, true, true, true, true, false, false, false, true, true, true, true, true, true, false, true, false, false, false, true, false, true, false, true, false, true, true, false, false, false, true, false, true, false, true], [true, false, true, true, true, false, true, false, false, false, true, false, false, true, false, true, false, false, true, false, false, true, false, false, false, false, true, true, true, true, true, false, false, false, false, true, false, false, true, false, false, true, true, false, true, true, false, false, true, true, true, true, true, false, false, true, false], [true, false, true, true, true, false, true, false, true, false, false, true, true, false, false, true, false, true, false, false, true, false, false, false, true, false, false, true, false, true, false, false, true, false, true, false, false, true, false, true, true, true, true, false, false, false, true, true, false, false, true, true, false, false, false, true, false], [true, false, true, true, true, false, true, false, true, true, false, false, true, true, false, true, true, false, true, false, true, false, false, false, false, true, true, true, false, false, true, true, true, true, true, false, false, false, false, true, false, false, true, false, false, false, false, false, true, false, true, false, false, true, true, false, false], [true, false, false, false, false, false, true, false, false, false, false, true, true, false, false, false, true, true, true, true, false, false, false, true, false, false, false, false, true, false, true, false, false, false, true, false, true, false, true, false, false, false, true, false, true, true, true, false, false, true, false, false, false, true, false, false, true], [true, true, true, true, true, true, true, false, false, true, false, false, true, false, false, false, false, true, true, false, true, false, true, false, false, true, true, true, true, false, true, false, false, true, false, true, false, true, true, true, false, false, true, false, true, false, false, false, false, true, false, true, true, true, false, false, false]]
MATRIX_4_H = [[true, true, true, true, true, true, true, false, false, true, true, false, false, false, false, false, false, false, false, true, false, true, false, true, false, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, false, false, true, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, false, false, true, false, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, true, false, true, false, true, false, false, true, false, true, true, false, true, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, true, true, false, true, false, false, false, false, false, true, true, true, false, true, false, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true, true, true, false, true, true, true, false, false, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, false, false, true, true, true, false, false, false, true, true, true, false, false, true, true, true, false, false, false, false, false, false, false, false], [false, false, true, true, false, false, true, true, true, true, false, false, false, false, true, true, true, false, false, false, false, true, true, true, true, true, true, false, true, false, false, false, false], [false, true, true, true, false, false, false, true, false, false, false, false, false, false, true, false, true, false, true, true, false, true, false, true, false, false, true, true, false, true, true, false, true], [true, false, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, false, false, true, true, true, true, true, true, true, true, true, false, true, true, true], [false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, false, true, false, false, false, false, false, true, false, false, true, true, true, false, false, true], [true, false, false, false, false, false, true, false, true, false, true, false, true, true, false, false, false, false, true, false, false, true, false, false, false, true, false, false, true, true, false, false, false], [false, false, false, true, true, true, false, true, false, true, false, false, false, true, false, false, true, true, false, false, true, false, false, false, true, false, false, false, false, true, false, true, false], [false, false, false, false, true, false, true, true, false, false, true, true, true, true, true, false, false, true, false, true, false, true, true, false, true, false, true, true, true, false, false, false, false], [true, true, true, true, true, true, false, false, false, true, false, false, false, false, false, true, false, false, true, false, true, true, true, true, false, true, false, true, true, false, true, true, false], [true, false, false, true, false, false, true, false, false, true, false, true, true, false, true, false, true, false, false, true, false, true, false, false, false, true, true, false, true, false, true, false, true], [false, true, false, false, true, false, false, false, false, true, true, false, false, false, true, false, true, true, true, true, false, false, true, true, true, true, true, true, true, true, false, false, true], [false, true, false, false, false, true, true, true, false, false, false, false, false, true, true, true, false, true, true, true, true, false, false, false, true, false, false, false, false, true, false, false, false], [true, false, true, true, true, true, false, false, true, false, false, false, false, true, true, false, false, false, false, true, false, false, false, false, false, false, true, false, false, false, false, false, false], [false, false, true, false, true, false, true, true, true, false, false, true, true, false, true, false, false, false, true, true, true, true, false, false, false, false, false, true, false, true, true, true, false], [true, true, false, false, true, false, false, false, false, true, true, true, false, true, false, true, false, true, false, true, false, false, false, true, false, false, true, false, false, true, false, false, true], [false, false, true, true, false, false, true, false, true, false, false, true, false, true, false, true, false, true, true, true, false, true, true, true, false, true, false, false, true, false, true, true, true], [false, true, false, false, true, true, false, false, false, false, true, true, true, false, true, false, true, false, true, true, true, false, false, true, false, true, true, true, false, false, false, false, true], [true, false, false, true, false, true, true, false, false, false, false, true, false, false, false, false, false, true, true, true, false, false, true, false, true, true, true, true, true, false, false, true, true], [false, false, false, false, false, false, false, false, true, false, true, true, false, false, false, true, true, true, false, false, true, true, false, true, true, false, false, false, true, true, false, false, false], [true, true, true, true, true, true, true, false, true, true, true, false, false, true, true, false, true, true, true, false, true, true, false, true, true, false, true, false, true, false, true, false, false], [true, false, false, false, false, false, true, false, false, false, true, true, false, false, false, true, true, true, false, false, false, false, false, true, true, false, false, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, false], [true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, false, true, false, true, false, false, false, true, true, false, false, false, true, false, false, false, true, true], [true, false, true, true, true, false, true, false, true, true, true, true, false, false, true, true, true, false, false, true, false, true, true, true, false, false, true, false, false, false, true, false, false], [true, false, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, false, true, false, false, true, false, true, true, false, false, true, true, true, false, false, true], [true, true, true, true, true, true, true, false, false, true, true, false, false, true, false, false, false, true, true, true, false, true, false, false, false, false, true, true, true, true, true, false, false]]
MATRIX_1_L = [[true, true, true, true, true, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, false, true, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, true, false, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, true, true, true, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, true, true, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, false, true, false, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, false, true, true, true, true, false, false, false, false, false, false, false, false], [true, true, false, false, false, true, true, true, false, true, false, false, true, false, false, false, true, true, false, false, false], [false, true, true, false, true, true, false, true, true, true, true, false, true, false, true, false, true, true, true, true, false], [true, false, false, false, false, false, true, false, true, false, false, true, false, true, false, false, true, true, true, true, false], [false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, true, true, true, false, false], [true, true, false, true, false, true, true, false, true, false, true, false, false, false, true, false, false, true, false, false, true], [false, false, false, false, false, false, false, false, true, false, true, true, true, true, true, false, false, true, false, false, true], [true, true, true, true, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false], [true, false, false, false, false, false, true, false, true, true, true, true, true, true, false, false, false, true, true, false, false], [true, false, true, true, true, false, true, false, false, true, false, false, true, false, false, false, true, false, false, true, false], [true, false, true, true, true, false, true, false, false, false, true, false, true, false, false, false, true, false, true, false, false], [true, false, true, true, true, false, true, false, false, true, true, false, false, false, true, false, true, false, false, true, true], [true, false, false, false, false, false, true, false, true, false, true, false, false, false, false, true, false, true, true, false, false], [true, true, true, true, true, true, true, false, true, false, false, true, false, true, false, true, false, false, false, true, false]]
MATRIX_1_M = [[true, true, true, true, true, true, true, false, true, false, true, false, false, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, true, false, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, true, false, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, false, false, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, true, false, true, false, false, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false, false, false], [true, false, true, false, false, false, true, true, false, true, false, true, true, false, false, true, false, false, true, false, true], [false, false, true, true, true, true, false, true, true, true, false, false, false, false, false, false, false, true, false, true, true], [true, false, true, true, false, false, true, true, false, false, true, false, false, false, true, false, false, false, true, false, true], [false, false, true, true, true, true, false, true, true, true, true, false, true, false, false, false, true, true, false, false, false], [false, false, false, true, false, false, true, false, true, true, false, false, false, false, true, false, false, true, false, false, true], [false, false, false, false, false, false, false, false, true, true, false, true, false, true, true, false, false, true, true, false, true], [true, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, false, true], [true, false, false, false, false, false, true, false, false, false, true, true, false, true, true, false, true, true, false, false, true], [true, false, true, true, true, false, true, false, false, true, false, true, true, true, true, false, false, true, false, false, true], [true, false, true, true, true, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false], [true, false, true, true, true, false, true, false, true, true, true, false, false, false, true, false, true, false, false, true, true], [true, false, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, true, false, false, false], [true, true, true, true, true, true, true, false, true, true, false, false, false, false, true, true, true, true, false, false, true]]
MATRIX_1_Q = [[true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, true, false, true, false, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, false, false, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, true, true, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false], [false, true, false, false, false, false, true, true, true, true, false, false, true, true, false, false, false, false, false, true, true], [false, true, true, true, false, false, false, false, false, true, true, true, true, false, true, false, true, true, true, true, false], [false, false, false, false, false, true, true, true, true, false, false, true, false, true, false, false, true, true, true, true, false], [true, false, false, true, true, true, false, false, false, true, false, true, false, false, false, false, true, true, true, false, false], [false, false, false, false, false, true, true, true, false, false, false, false, false, false, true, false, false, true, false, false, true], [false, false, false, false, false, false, false, false, true, false, true, true, false, true, true, false, false, true, false, false, true], [true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, false], [true, false, false, false, false, false, true, false, false, false, false, true, true, true, false, false, false, true, true, false, false], [true, false, true, true, true, false, true, false, false, true, false, false, true, false, false, false, true, false, false, true, false], [true, false, true, true, true, false, true, false, false, true, false, false, true, false, false, false, true, false, true, false, false], [true, false, true, true, true, false, true, false, false, true, true, false, false, false, true, false, true, false, false, true, true], [true, false, false, false, false, false, true, false, true, true, false, false, false, false, false, true, false, true, true, false, false], [true, true, true, true, true, true, true, false, false, true, false, true, false, true, false, true, false, false, false, true, false]]
MATRIX_4_L = [[true, true, true, true, true, true, true, false, true, true, true, false, true, false, false, false, false, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, true, true, true, false, false, false, false, false, true, true, false, true, false, false, false, false, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, true, false, true, true, false, true, false, true, true, false, false, false, false, true, true, true, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, true, false, true, false, false, true, true, true, true, true, false, false, false, true, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, false, false, false, true, true, false, true, false, true, true, false, true, true, true, true, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, true, false, false, true, true, true, true, true, false, false, true, false, true, false, false, false, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, false, true, false, false, true, false, true, false, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false], [true, true, false, false, true, true, true, false, false, false, false, true, false, true, true, true, true, false, true, false, false, true, false, false, true, false, false, true, false, true, true, true, true], [true, false, true, true, true, true, false, true, false, true, true, false, true, false, false, false, false, true, false, true, true, false, true, true, false, false, false, true, false, false, true, true, false], [false, true, true, true, false, false, true, true, true, false, false, true, true, true, true, true, false, false, true, false, true, true, true, true, true, false, false, true, true, true, true, true, false], [true, true, true, true, true, true, false, true, true, false, true, true, false, true, false, true, true, false, false, false, false, true, true, false, true, false, true, true, true, false, false, false, true], [false, true, false, true, true, true, true, true, true, false, true, false, true, true, false, false, false, false, false, true, true, true, true, true, true, false, true, true, true, false, false, false, false], [false, true, false, true, false, false, false, false, true, true, false, false, false, true, true, false, true, false, true, true, false, false, false, true, true, true, false, true, false, false, true, true, false], [false, true, true, false, true, true, true, true, false, false, false, false, false, false, false, false, true, true, false, true, false, false, true, true, true, true, true, false, false, true, true, false, false], [true, true, false, false, true, false, false, false, true, true, true, false, true, false, true, false, false, true, true, true, true, true, true, false, false, true, true, false, false, false, false, true, true], [false, false, false, true, false, true, true, false, true, true, true, true, false, true, true, true, true, false, true, false, false, true, true, false, false, false, true, false, true, false, false, false, true], [false, true, true, true, true, true, false, true, false, true, true, false, true, false, false, false, false, true, false, true, true, true, false, true, false, true, false, false, false, false, true, false, false], [true, false, false, true, false, true, true, false, true, false, true, true, true, true, true, true, false, false, true, false, true, true, false, true, true, true, false, false, false, false, true, true, false], [false, true, false, true, false, true, false, false, true, false, false, true, false, true, false, true, true, false, false, false, false, true, true, true, true, true, true, true, false, true, false, true, true], [true, false, false, false, false, true, true, false, false, true, true, false, true, true, false, false, false, false, false, true, true, true, true, false, true, false, true, false, true, false, false, false, true], [true, false, false, true, true, false, false, true, true, false, false, false, false, true, true, false, true, false, true, true, false, false, true, true, false, false, false, true, false, true, false, false, false], [false, false, false, false, false, true, true, true, true, false, true, false, false, false, false, false, true, true, false, true, false, false, false, true, true, false, false, false, true, true, true, true, false], [false, false, false, true, true, true, false, true, true, false, false, false, true, false, true, false, false, true, true, true, true, true, false, true, true, false, true, false, true, false, false, true, true], [true, true, false, true, false, true, true, false, false, false, true, true, false, true, true, true, true, false, true, false, false, false, false, true, true, true, true, true, true, false, false, false, true], [false, false, false, false, false, false, false, false, true, false, true, false, true, false, false, false, false, true, false, true, true, true, false, false, true, false, false, false, true, false, true, false, false], [true, true, true, true, true, true, true, false, false, false, true, true, true, true, true, true, false, false, true, false, true, false, false, false, true, false, true, false, true, false, true, true, false], [true, false, false, false, false, false, true, false, true, true, true, true, false, true, false, true, true, false, false, false, false, false, true, false, true, false, false, false, true, false, false, true, false], [true, false, true, true, true, false, true, false, true, false, false, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, false, true, true], [true, false, true, true, true, false, true, false, false, true, false, false, false, true, true, false, true, false, true, true, false, false, false, true, true, false, true, true, true, true, false, true, false], [true, false, true, true, true, false, true, false, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, false, true, false, true, false, true, false, true, false, false], [true, false, false, false, false, false, true, false, true, false, false, false, true, false, true, false, false, true, true, true, true, true, false, true, true, false, false, true, false, true, false, false, false], [true, true, true, true, true, true, true, false, true, false, false, true, false, true, true, true, true, false, true, false, false, false, false, true, true, false, true, true, true, false, false, false, true]]
MATRIX_4_M = [[true, true, true, true, true, true, true, false, true, true, false, true, false, true, false, true, false, false, true, false, false, false, false, true, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, true, false, false, true, true, true, false, true, false, true, true, false, false, false, false, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, true, true, false, false, false, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, true, true, false, false, false, false, false, true, true, false, true, false, true, true, false, false, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, false, false, true, true, false, false, true, true, false, true, false, true, true, false, false, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, true, true, false, false, true, true, true, true, false, false, false, false, true, true, true, true, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, true, true, true, true, true, false, false, true, false, false, false, false, false, false, false, false], [true, false, false, false, true, false, true, true, true, false, true, false, true, false, false, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, false, true], [true, true, false, true, false, false, false, true, false, true, true, false, true, false, true, true, false, true, true, false, false, true, true, true, false, true, false, false, false, true, true, true, true], [false, false, false, false, true, false, true, false, true, false, false, false, true, true, true, true, true, false, true, false, true, false, false, true, true, false, false, false, false, false, true, false, false], [true, false, true, true, true, true, false, true, true, false, true, true, true, true, false, true, true, false, false, false, false, false, true, true, true, true, false, true, true, false, false, true, true], [false, true, true, true, false, true, true, true, true, true, true, true, true, true, false, false, true, false, false, true, false, false, true, false, false, true, true, false, false, true, false, false, true], [true, false, true, true, false, true, false, true, true, false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false], [false, true, true, true, false, true, true, false, false, false, true, false, false, true, false, true, false, true, true, false, true, true, true, true, true, true, true, true, false, true, true, true, false], [true, true, false, false, true, false, false, false, false, false, true, true, true, true, false, true, true, true, true, false, false, true, true, true, false, false, true, false, false, false, true, true, true], [false, true, true, true, false, false, true, true, true, false, false, true, true, false, false, false, true, true, false, true, true, true, true, false, false, false, true, false, true, false, true, false, true], [false, false, true, true, true, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, true, true, false, true, false, true, false, true, true, false, false], [false, false, false, true, false, true, true, true, true, true, true, false, true, true, false, true, true, true, false, false, false, true, true, true, false, true, true, true, false, false, true, true, false], [true, true, false, true, false, false, false, true, false, true, false, false, true, true, true, true, true, true, true, true, false, true, false, false, true, false, true, true, true, true, false, false, false], [false, false, true, false, false, true, true, false, false, false, true, true, false, true, true, false, false, false, true, true, true, false, false, true, true, false, false, true, false, false, false, false, false], [true, true, true, true, false, false, false, false, true, true, true, true, true, false, true, false, true, false, false, true, false, false, true, false, false, true, true, false, false, false, true, false, false], [false, false, false, true, true, true, true, true, true, false, false, true, true, false, true, false, true, false, false, true, false, false, true, false, false, false, false, false, true, false, false, true, false], [false, false, false, false, false, true, false, false, false, true, true, true, false, false, true, false, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, false], [true, true, true, true, true, false, true, true, false, false, true, false, true, false, false, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, true, false, false, false, true, false, true, false, true, true, false, false, true, false, false, true, false, false, false, true, true, false, true, false], [true, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, false, false, false, true, false, true, false, true, true, true, true, false], [true, false, false, false, false, false, true, false, false, false, true, true, true, false, false, false, true, false, false, true, true, false, true, true, true, false, false, false, true, false, false, false, true], [true, false, true, true, true, false, true, false, true, false, false, true, true, true, true, false, true, false, false, true, false, false, true, false, true, true, true, true, true, false, false, true, true], [true, false, true, true, true, false, true, false, false, false, true, true, true, true, true, false, false, true, true, true, true, true, false, true, false, false, true, false, true, true, false, true, false], [true, false, true, true, true, false, true, false, false, true, false, true, true, false, false, true, false, false, true, false, true, false, false, false, true, false, true, false, true, true, true, false, false], [true, false, false, false, false, false, true, false, false, true, true, false, false, false, false, true, true, true, true, false, false, true, false, false, false, false, false, true, false, false, true, false, false], [true, true, true, true, true, true, true, false, true, true, true, true, false, true, true, false, false, true, false, true, true, true, true, false, true, false, true, false, false, false, true, false, true]]
MATRIX_4_Q = [[true, true, true, true, true, true, true, false, false, true, true, true, false, true, true, true, false, true, true, false, false, true, true, false, true, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, true, false, false, true, false, false, false, true, true, false, true, true, false, false, false, false, false, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, false, false, true, true, true, false, true, false, false, false, false, true, true, true, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, false, false, true, true, true, false, true, false, true, true, true, false, true, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, false, false, false, false, true, true, false, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, true, false, true, true, false, true, false, true, false, true, false, true, false, false, true, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false], [false, true, false, true, true, true, true, false, true, false, false, false, true, true, false, false, true, true, false, false, false, false, false, true, true, true, true, false, true, true, false, true, false], [false, false, false, true, true, true, false, false, true, true, false, false, true, false, false, true, false, true, true, true, false, true, false, true, false, false, false, false, true, true, true, false, false], [true, false, false, false, true, false, true, false, true, false, true, false, true, true, true, false, true, false, false, false, false, false, true, true, false, false, true, false, true, false, false, true, true], [false, false, false, true, true, false, false, false, false, true, false, false, true, false, true, false, false, false, true, false, false, true, true, true, false, false, true, false, true, false, true, true, true], [true, true, true, false, false, true, true, true, false, true, true, false, true, false, false, true, true, true, false, true, false, true, false, true, false, false, true, true, false, false, false, false, false], [true, false, false, false, true, false, false, false, true, false, false, true, true, false, false, true, false, false, true, true, true, false, false, false, true, true, false, true, false, false, true, false, false], [true, false, true, false, true, true, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, true, true, false, false, false, true, true, true, false, false, false, false], [true, false, true, true, false, false, false, false, false, true, true, true, true, false, false, false, true, false, false, false, true, false, true, false, true, false, false, false, true, false, true, true, false], [false, false, true, false, false, false, true, false, true, false, true, false, false, true, true, true, false, true, true, false, true, false, true, true, false, true, true, true, true, false, false, true, true], [true, true, false, false, true, false, false, true, false, true, true, false, false, true, false, true, false, true, false, true, true, false, false, false, false, false, true, true, true, false, true, false, true], [true, false, true, true, true, true, true, true, true, false, false, false, true, true, true, false, true, false, false, true, true, true, true, true, true, false, false, true, false, false, false, true, true], [true, false, false, false, true, true, false, false, true, true, false, true, false, false, false, true, true, true, true, false, true, false, true, true, false, true, true, false, false, false, true, false, false], [true, false, true, true, false, true, true, false, true, false, true, true, false, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, true, false], [true, false, true, false, true, true, false, false, false, true, false, false, false, true, false, false, true, false, true, false, false, false, false, false, false, true, false, false, true, false, true, true, false], [true, false, false, false, true, false, true, false, true, true, false, true, false, false, false, true, true, false, true, true, true, false, false, false, true, false, true, false, false, true, true, true, true], [true, false, false, false, false, false, false, false, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, false, false, true, true, false, false, true, true, true, false], [true, true, true, false, false, true, true, false, true, true, false, false, true, true, false, false, false, false, true, false, false, false, false, false, true, true, true, true, true, false, false, true, true], [false, false, false, false, false, false, false, false, true, true, false, false, true, false, true, true, true, false, false, false, false, true, false, false, true, false, false, false, true, true, false, false, false], [true, true, true, true, true, true, true, false, false, true, false, true, true, true, true, true, true, false, true, true, true, false, false, true, true, false, true, false, true, false, false, false, false], [true, false, false, false, false, false, true, false, true, true, false, true, true, true, false, false, true, false, false, true, false, true, true, false, true, false, false, false, true, true, true, true, true], [true, false, true, true, true, false, true, false, true, false, true, true, false, false, false, false, true, false, true, false, false, true, true, true, true, true, true, true, true, true, false, true, true], [true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, false, true, false, true, false, false, true, true, false, false, true, false, false, false, true, true, false, true], [true, false, true, true, true, false, true, false, false, true, true, false, true, true, false, false, true, true, true, true, false, false, false, false, false, true, false, false, true, true, true, true, true], [true, false, false, false, false, false, true, false, true, true, false, false, true, false, false, true, false, true, false, true, true, false, true, false, true, false, true, false, true, false, true, true, true], [true, true, true, true, true, true, true, false, false, true, true, false, true, true, true, false, true, false, true, true, false, false, false, false, true, false, true, true, true, true, false, false, false]]
MATRIX_UTF8_RU_test = [[true, true, true, true, true, true, true, false, true, false, true, true, true, true, true, false, false, false, true, true, true, true, true, true, true], [true, false, false, false, false, false, true, false, false, false, false, false, true, true, true, true, true, false, true, false, false, false, false, false, true], [true, false, true, true, true, false, true, false, true, false, false, true, false, true, true, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, false, false, true, false, true, true, false, true, true, false, true, false, true, true, true, false, true], [true, false, true, true, true, false, true, false, true, false, false, true, true, true, false, true, false, false, true, false, true, true, true, false, true], [true, false, false, false, false, false, true, false, false, true, false, false, true, true, false, true, false, false, true, false, false, false, false, false, true], [true, true, true, true, true, true, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true], [false, false, false, false, false, false, false, false, true, true, true, false, false, false, false, true, true, false, false, false, false, false, false, false, false], [false, false, false, false, false, true, true, false, false, false, true, false, true, true, false, true, false, false, true, false, true, false, true, false, true], [false, false, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, false, true, true, false, false, true, true, true], [false, true, true, false, true, true, true, false, false, false, false, false, false, true, false, false, false, false, true, false, true, true, false, true, false], [true, true, false, false, true, false, false, false, false, false, true, false, false, false, false, true, false, true, true, true, true, false, true, false, false], [false, false, false, false, false, false, true, true, false, false, false, false, true, true, false, false, false, true, true, true, true, false, false, true, true], [true, true, true, true, false, true, false, false, false, true, false, true, false, false, true, false, false, true, true, false, false, true, false, false, true], [true, false, false, true, true, false, true, true, true, false, false, true, true, true, false, true, true, true, false, false, true, false, false, false, false], [true, false, false, false, false, false, false, false, true, true, false, false, false, true, false, false, true, false, false, false, true, true, false, true, true], [true, false, true, true, true, true, true, true, false, false, true, false, false, true, true, true, true, true, true, true, true, false, false, false, true], [false, false, false, false, false, false, false, false, true, false, false, false, false, true, true, false, true, false, false, false, true, false, false, true, true], [true, true, true, true, true, true, true, false, false, true, true, true, false, true, false, true, true, false, true, false, true, false, true, false, false], [true, false, false, false, false, false, true, false, true, true, false, false, true, false, true, true, true, false, false, false, true, false, true, false, true], [true, false, true, true, true, false, true, false, false, true, false, true, true, false, false, false, true, true, true, true, true, true, false, false, false], [true, false, true, true, true, false, true, false, false, true, true, true, true, true, false, false, false, true, false, false, true, false, true, false, true], [true, false, true, true, true, false, true, false, false, true, false, false, false, true, false, false, true, false, true, false, true, false, false, false, true], [true, false, false, false, false, false, true, false, false, true, false, false, false, false, true, true, false, false, true, true, false, true, true, false, true], [true, true, true, true, true, true, true, false, false, true, false, true, false, false, false, true, true, false, true, true, true, false, true, false, true]]
AS_ANSI = "\e[47m \e[m\n\e[47m \e[m\n\e[47m \e[m\n\e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[40m \e[47m \e[m\n\e[47m \e[m\n\e[47m \e[m\n\e[47m \e[m\n\e[47m \e[m\n" rqrcode_core-0.2.0/test/rqrcode_core/regresions_test.rb 0000664 0000000 0000000 00000000343 13771636311 0023362 0 ustar 00root root 0000000 0000000 require 'test_helper'
class RegresionTests < Minitest::Test
# Rs block information was incomplete.
def test_code_length_overflow_bug
RQRCodeCore::QRCode.new('s' * 220)
RQRCodeCore::QRCode.new('s' * 195)
end
end
rqrcode_core-0.2.0/test/rqrcode_core/rqrcode_test.rb 0000664 0000000 0000000 00000012005 13771636311 0022637 0 ustar 00root root 0000000 0000000 # encoding: utf-8
require 'test_helper'
class RQRCodeCore::BaseTest < Minitest::Test
require_relative "data"
def test_no_data_given
assert_raises(RQRCodeCore::QRCodeArgumentError) {
RQRCodeCore::QRCode.new(size:1, level: :h)
RQRCodeCore::QRCode.new(size: 1)
RQRCodeCore::QRCode.new
}
assert_raises(RQRCodeCore::QRCodeRunTimeError) {
qr = RQRCodeCore::QRCode.new('duncan')
qr.checked?(0,999999)
}
end
def test_H_
qr = RQRCodeCore::QRCode.new('duncan', size: 1)
assert_equal qr.modules.size, 21
assert_equal qr.modules, MATRIX_1_H
qr = RQRCodeCore::QRCode.new('duncan', size: 1)
assert_equal qr.modules, MATRIX_1_H
qr = RQRCodeCore::QRCode.new('duncan', size: 1, level: :l)
assert_equal qr.modules, MATRIX_1_L
qr = RQRCodeCore::QRCode.new('duncan', size: 1, level: :m)
assert_equal qr.modules, MATRIX_1_M
qr = RQRCodeCore::QRCode.new('duncan', size: 1, level: :q)
assert_equal qr.modules, MATRIX_1_Q
end
def test_3_H_
qr = RQRCodeCore::QRCode.new('duncan', size: 3)
assert_equal qr.modules.size, 29
assert_equal qr.modules, MATRIX_3_H
end
def test_5_H_
qr = RQRCodeCore::QRCode.new('duncan', size: 5)
assert_equal qr.modules.size, 37
assert_equal qr.modules, MATRIX_5_H
end
def test_10_H_
qr = RQRCodeCore::QRCode.new('duncan', size: 10)
assert_equal qr.modules.size, 57
assert_equal qr.modules, MATRIX_10_H
end
def test_4_H_
qr = RQRCodeCore::QRCode.new('www.bbc.co.uk/programmes/b0090blw', level: :l, size: 4)
assert_equal qr.modules, MATRIX_4_L
qr = RQRCodeCore::QRCode.new('www.bbc.co.uk/programmes/b0090blw', level: :m, size: 4)
assert_equal qr.modules, MATRIX_4_M
qr = RQRCodeCore::QRCode.new('www.bbc.co.uk/programmes/b0090blw', level: :q, size: 4)
assert_equal qr.modules, MATRIX_4_Q
qr = RQRCodeCore::QRCode.new('www.bbc.co.uk/programmes/b0090blw')
assert_equal qr.modules.size, 33
assert_equal qr.modules, MATRIX_4_H
end
def test_to_s
qr = RQRCodeCore::QRCode.new('duncan', size: 1)
assert_equal "xxxxxxx xx x xxxxxxx\n", qr.to_s[0..21]
assert_equal "qqqqqqqnqqnqnnqqqqqqq\n", qr.to_s(true: 'q', false: 'n')[0..21]
assert_equal "@@@@@@@ @@ @ @@@@@@@\n", qr.to_s(true: '@')[0..21]
end
def test_auto_alphanumeric
# Overflowws without the alpha version
assert RQRCodeCore::QRCode.new('1234567890', size: 1, level: :h)
qr = RQRCodeCore::QRCode.new('DUNCAN', size: 1, level: :h)
assert_equal "xxxxxxx xxx xxxxxxx\n", qr.to_s[0..21]
end
def test_auto_numeric
# When digit only automatically uses numeric mode, default ecc level is :h
digits = RQRCodeCore::QRCode.new('1' * 17) # Version 1, numeric mode, ECC h
assert_equal 1, digits.version
assert_equal :mode_number, digits.mode
assert_equal :h, digits.error_correction_level
# When alpha automatically works
alpha = RQRCodeCore::QRCode.new('X' * 10) # Version 1, alpha mode, ECC h
assert_equal 1, alpha.version
assert_equal :mode_alpha_numk, alpha.mode
assert_equal :h, alpha.error_correction_level
# Generic should use binary
binary = RQRCodeCore::QRCode.new('x' * 7) # Version 1, 8bit mode, ECC h
assert_equal 1, binary.version
assert_equal :mode_8bit_byte, binary.mode
assert_equal :h, binary.error_correction_level
end
def test_numeric_2_M
data = '279042272585972554922067893753871413584876543211601021503002'
qr = RQRCodeCore::QRCode.new(data, size: 2, level: :m, mode: :number)
assert_equal "xxxxxxx x x x xxxxxxx\n", qr.to_s[0..25]
end
def test_rszf_error_not_thrown
assert RQRCodeCore::QRCode.new('2 1058 657682')
assert RQRCodeCore::QRCode.new('40952', size: 1, level: :h)
assert RQRCodeCore::QRCode.new('40932', size: 1, level: :h)
end
def test_exceed_max_size
assert_raises RQRCodeCore::QRCodeArgumentError do
RQRCodeCore::QRCode.new('duncan', size: 41)
end
end
def test_error_correction_level
# attr_reader was wrong
assert_equal RQRCodeCore::QRCode.new('a', level: :h).error_correction_level, :h
end
def test_version_table
# tables in RQRCodeCore::QRCode::QRMAXDIGITS wasn't updated to support greater versions
assert_equal RQRCodeCore::QRCode.new('1' * 289, level: :h, mode: :number).version, 11
assert_equal RQRCodeCore::QRCode.new('A' * 175, level: :h, mode: :alphanumeric).version, 11
assert_equal RQRCodeCore::QRCode.new('a' * 383, level: :h, mode: :byte_8bit).version, 21
end
def test_levels
assert RQRCodeCore::QRCode.new('duncan', level: :l)
assert RQRCodeCore::QRCode.new('duncan', level: :m)
assert RQRCodeCore::QRCode.new('duncan', level: :q)
assert RQRCodeCore::QRCode.new('duncan', level: :h)
%w(a b c d e f g i j k n o p r s t u v w x y z).each do |ltr|
assert_raises(RQRCodeCore::QRCodeArgumentError) {
RQRCodeCore::QRCode.new('duncan', level: ltr.to_sym)
}
end
end
def test_utf8
qr = RQRCodeCore::QRCode.new('ัะตัั')
assert_equal qr.modules, MATRIX_UTF8_RU_test
end
end
rqrcode_core-0.2.0/test/test_helper.rb 0000664 0000000 0000000 00000000156 13771636311 0020014 0 ustar 00root root 0000000 0000000 $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require "rqrcode_core"
require "minitest/autorun"