1
0
mirror of https://github.com/exaloop/codon.git synced 2025-06-03 15:03:52 +08:00
codon/stdlib/internal/__init_test__.codon
Ibrahim Numanagić 5de233a64e
Dynamic Polymorphism (#58)
* Use Static[] for static inheritance

* Support .seq extension

* Fix #36

* Polymorphic typechecking; vtables [wip]

* v-table dispatch [wip]

* vtable routing [wip; bug]

* vtable routing [MVP]

* Fix texts

* Add union type support

* Update FAQs

* Clarify

* Add BSL license

* Add makeUnion

* Add IR UnionType

* Update union representation in LLVM

* Update README

* Update README.md

* Update README

* Update README.md

* Add benchmarks

* Add more benchmarks and README

* Add primes benchmark

* Update benchmarks

* Fix cpp

* Clean up list

* Update faq.md

* Add binary trees benchmark

* Add fannkuch benchmark

* Fix paths

* Add PyPy

* Abort on fail

* More benchmarks

* Add cpp word_count

* Update set_partition cpp

* Add nbody cpp

* Add TAQ cpp; fix word_count timing

* Update CODEOWNERS

* Update README

* Update README.md

* Update CODEOWNERS

* Fix bench script

* Update binary_trees.cpp

* Update taq.cpp

* Fix primes benchmark

* Add mandelbrot benchmark

* Fix OpenMP init

* Add Module::unsafeGetUnionType

* UnionType [wip] [skip ci]

* Integrate IR unions and Union

* UnionType refactor [skip ci]

* Update README.md

* Update docs

* UnionType [wip] [skip ci]

* UnionType and automatic unions

* Add Slack

* Update faq.md

* Refactor types

* New error reporting [wip]

* New error reporting [wip]

* peglib updates [wip] [skip_ci]

* Fix parsing issues

* Fix parsing issues

* Fix error reporting issues

* Make sure random module matches Python

* Update releases.md

* Fix tests

* Fix #59

* Fix #57

* Fix #50

* Fix #49

* Fix #26; Fix #51; Fix #47; Fix #49

* Fix collection extension methods

* Fix #62

* Handle *args/**kwargs with Callable[]; Fix #43

* Fix #43

* Fix Ptr.__sub__; Fix polymorphism issues

* Add typeinfo

* clang-format

* Upgrade fmtlib to v9; Use CPM for fmtlib; format spec support; __format__ support

* Use CPM for semver and toml++

* Remove extension check

* Revamp str methods

* Update str.zfill

* Fix thunk crashes [wip] [skip_ci]

* Fix str.__reversed__

* Fix count_with_max

* Fix vtable memory allocation issues

* Add poly AST tests

* Use PDQsort when stability does not matter

* Fix dotted imports; Fix  issues

* Fix kwargs passing to Python

* Fix #61

* Fix #37

* Add isinstance support for unions; Union methods return Union type if different

* clang-format

* Nicely format error tracebacks

* Fix build issues; clang-format

* Fix OpenMP init

* Fix OpenMP init

* Update README.md

* Fix tests

* Update license [skip ci]

* Update license [ci skip]

* Add copyright header to all source files

* Fix super(); Fix error recovery in ClassStmt

* Clean up whitespace [ci skip]

* Use Python 3.9 on CI

* Print info in random test

* Fix single unions

* Update random_test.codon

* Fix polymorhic thunk instantiation

* Fix random test

* Add operator.attrgetter and operator.methodcaller

* Add code documentation

* Update documentation

* Update README.md

* Fix tests

* Fix random init

Co-authored-by: A. R. Shajii <ars@ars.me>
2022-12-04 19:45:21 -05:00

134 lines
3.4 KiB
Python

# Copyright (C) 2022 Exaloop Inc. <https://exaloop.io>
# Core library
from internal.core import *
from internal.attributes import *
from internal.types.ptr import *
from internal.types.str import *
from internal.types.int import *
from internal.types.bool import *
from internal.types.array import *
from internal.types.error import *
from internal.types.intn import *
from internal.types.float import *
from internal.types.byte import *
from internal.types.generator import *
from internal.types.optional import *
from internal.types.slice import *
from internal.types.range import *
from internal.internal import *
from internal.types.strbuf import strbuf as _strbuf
from internal.types.collections.list import *
import internal.c_stubs as _C
def next(g: Generator[T], default: Optional[T] = None, T: type) -> T:
if g.done():
if default:
return unwrap(default)
else:
raise StopIteration()
return g.next()
from C import seq_print_full(str, cobj)
class Set:
items: List[T]
T: type
def __init__(self):
self.items = []
def __iter__(self) -> Generator[T]:
yield from self.items
def add(self, what: T):
if what not in self.items:
self.items.append(what)
def __repr__(self) -> str:
s = self.items.__repr__()
s.ptr[0] = "{".ptr[0]
s.ptr[s.len - 1] = "}".ptr[0]
return s
class Dict:
keys: List[K]
values: List[V]
K: type
V: type
def __init__(self):
self.keys = []
self.values = []
def __iter__(self) -> Generator[K]:
yield from self.keys
def items(self) -> Generator[Tuple[K, V]]:
for i in range(self.keys.len):
yield (self.keys[i], self.values[i])
def __contains__(self, key: K) -> bool:
return self.keys.index(key) != -1
def __getitem__(self, key: K) -> V:
i = self.keys.index(key)
return self.values[i]
def __setitem__(self, key: K, val: V):
i = self.keys.index(key)
if i != -1:
self.values[i] = val
else:
self.keys.append(key)
self.values.append(val)
def __len__(self) -> int:
return self.keys.len
def __repr__(self) -> str:
n = self.__len__()
if n == 0:
return "{}"
else:
lst = []
lst.append("{")
first = True
for k, v in self.items():
if not first:
lst.append(", ")
else:
first = False
lst.append(k.__repr__())
lst.append(": ")
lst.append(v.__repr__())
lst.append("}")
return str.cat(lst)
@extend
class str:
def __getitem__(self, idx: int) -> str:
if idx < 0:
idx += self.len
if not (0 <= idx < self.len):
raise IndexError("string index out of range")
return str(self.ptr + idx, 1)
def __getitem__(self, s: Slice) -> str:
if s.start is None and s.stop is None and s.step is None:
return self.__copy__()
elif s.step is None:
start, stop, step, length = s.adjust_indices(self.len)
return str(self.ptr + start, length)
else:
raise ValueError("nope")
def __repr__(self) -> str:
return f"'{self}'"
from internal.builtin import *
from openmp import Ident as __OMPIdent, for_par
from internal.dlopen import dlsym as _dlsym