Skip to content

Instantly share code, notes, and snippets.

@Qqwy
Qqwy / Example.ex
Created Jul 11, 2020
Elixir 'safe macro override' example implementation
View Example.ex
defmodule Example do
use OverrideExample1
use OverrideExample2
@a 1
@b 2
end
# Prints at compile-time:
#
# yaay: {:a, [line: 4], [1]}
# wooh: {:a, [line: 4, context: OverrideExample2], [1]}
@Qqwy
Qqwy / refined_assertions.rb
Created May 1, 2022
Refined Minitest Assertions
View refined_assertions.rb
class RefinedAssertions
@mutex = Mutex.new
def self.set_last_operator(operator, lhs, rhs, res)
@mutex.synchronize do
@set = true
@result = [operator, lhs, rhs, res]
end
@Qqwy
Qqwy / doctest-minitest.rb
Created Mar 9, 2022
Example of how to integrate doctests with Ruby Minitest
View doctest-minitest.rb
# Example of how to integrate doctests with Ruby Minitest
#
# Besides depending on `minitest`,
# this functionality depends on the `doctest-core` gem, c.f. https://www.rubydoc.info/gems/doctest-core/
class YourAppName::TestCase < MiniTest::Test
# To be used inside the body of a tests-class
# It will automatically create test cases for all
# 'documentation test' snippets that exist in the comments
@Qqwy
Qqwy / Capturepipe.ex
Last active Jan 21, 2022
Elixir example of a pipe-operator that uses some simple metaprogramming to allow piping into capture-syntax.
View Capturepipe.ex
defmodule Capturepipe do
@doc """
A pipe-operator that extends the normal pipe
in one tiny way:
It allows the syntax of having a bare `&1` capture
to exist inside a datastructure as one of the pipe results.
This is useful to insert the pipe's results into a datastructure
such as a tuple.
@Qqwy
Qqwy / YCombinator.ex
Last active Jan 7, 2022
Explanation of using the Y-Combinator and wrapping functions in Elixir to write recursive functions and wrap them with extra functionality
View YCombinator.ex
defmodule YCombinator do
@moduledoc """
Some functions explaining the Y-Combinator.
Can definitely be improved upon, but this is as much as time allowed me this evening.
"""
def factorial(n) do
y_combinator(&almost_factorial/1).(n)
View tuple_map_benchmark.exs
defmodule Benchmarks do
@warmup 0.05
@time 0.05
@memory_time 0.5
@parallel 1
@inputs (
(0..20)
|> Enum.map(fn size -> {to_string(size), (1..size) |> Enum.shuffle |> List.to_tuple} end)
)
View gcd_maxmin.cob
*> Compile using GNU Cobol, e.g.: `cobc -x gcd_maxmin.cob`
IDENTIFICATION DIVISION.
PROGRAM-ID. gcd-maxmin.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMS.
05 NUMS-ELEMS PIC 9(9)
OCCURS 0 TO 9999 TIMES DEPENDING ON NUMS-LEN.
77 NUMS-IDX PIC 9(9) COMP.
@Qqwy
Qqwy / caesar_cipher.pl
Created Nov 9, 2020
A simple substitution (Caesar/Vernam) cypher, implemented in Prolog. Beginner code; can probably be significantly improved
View caesar_cipher.pl
-module(caesar_cipher, [
shift_plaintext_cyphertext/3,
shift_plainchar_cypherchar/3,
shift_plainletter_cypherletter/3
]).
:- use_module(library(reif)).
:- use_module(library(clpz)).
:- use_module(library(lists)).
@Qqwy
Qqwy / addition.beam_disasm.ex
Last active Jul 8, 2020
An example of what BEAM code ends up being generated for a simple TypeCheck spec.
View addition.beam_disasm.ex
{:beam_file, Addition,
[
{:__info__, 1, 2},
{:"__type_check_spec_for_add/2__", 0, 18},
{:add, 2, 8},
{:baseline_add, 2, 16},
{:module_info, 0, 20},
{:module_info, 1, 22}
], [vsn: [337339698024769425821845159222917769638]],
[
@Qqwy
Qqwy / capturepipe3.ex
Last active Jun 24, 2020
Elixir example of a pipe-operator that uses some simple metaprogramming to allow piping into capture-syntax. Version with slightly more verbose `&`-prefixed syntax. Implementation that rewrites pipes nested inside &.
View capturepipe3.ex
defmodule Capturepipe do
@doc """
A pipe-operator that extends the normal pipe
in one tiny way:
It allows the syntax of having a bare `&1` capture
to exist inside a datastructure as one of the pipe results.
This is useful to insert the pipe's results into a datastructure
such as a tuple.